mysql数据库--mysql记录长度+列属性

mysql记录长度:

mysql中规定任何一条记录长度最长不超过65535字节,(varchar永远达不到理论值)
varchar实际存储长度能达到多少呢?看字符集编码
utf8下varchar的实际顶配21844字符:
gbk下的varchar的实际顶配32766字符:
-- 求出varchar在utf8和gbk下的实际最大长度:
create table my_utf8(
name varchar(65535)
)charset utf8;

create table my_gbk(
name varchar(65535)
)charset gbk;
提示长度太大并给出了最大长度。

mysql数据库--mysql记录长度+列属性_第1张图片

根据给出的最大长度进行创建:

-- 求出varchar在utf8和gbk下的实际最大长度:
create table my_utf8(
name varchar(21845)
)charset utf8;

create table my_gbk(
name varchar(32767)
)charset gbk;

mysql数据库--mysql记录长度+列属性_第2张图片

计算出最大长度:

-- 求出varchar在utf8和gbk下的实际最大长度:
create table my_utf8(
name varchar(21844)   -- 应该为21844,所占字节21844*3+2=65532+2=65534
)charset utf8;

create table my_gbk(
name varchar(32766)   -- 应该为32766,所占字节32766*3+2=65532+2=65534
)charset gbk;

mysql数据库--mysql记录长度+列属性_第3张图片

如上计算出来了65534,还剩余一个字节,用完整个65535字节,增加一个tinyint字段:

增加一个tinyint发现失败:
create table my_utf81(
age tinyint,
name varchar(21844)   -- 应该为21844,所占字节21844*3+2=65532+2=65534
)charset utf8;

create table my_gbk1(
age tinyint,
name varchar(32766)   -- 应该为32766,所占字节32766*3+2=65532+2=65534
)charset gbk;

mysql数据库--mysql记录长度+列属性_第4张图片

mysql记录中:如果有任何一个字段允许为空,那么系统会自动从整个记录中保留一个字节来存储NULL(想释放NULL所占用的字节,必须保证所有的字段都不允许为空)

-- 释放NULL
create table my_utf82(
age tinyint not null,
name varchar(21844) not null   
)charset utf8;

create table my_gbk2(
age tinyint not null,
name varchar(32766) not null   
)charset gbk;

mysql数据库--mysql记录长度+列属性_第5张图片

mysql中text字符串,不占用记录长度,额外存储,但是text文本字符串也是属于记录的一部分,一定需要占据记录中的部分长度:10个字节(保存数据的地址和长度)

-- text占用10个字节长度
create table my_text(
name varchar(21841) not null, 
content text
)charset utf8;

-- 解决问题证明了text占用10个字节
create table my_text(
name varchar(21841) not null, -- 21841 * 3 + 2 = 65523 + 2 = 65525
content text not null        -- 10
)charset utf8;

mysql数据库--mysql记录长度+列属性_第6张图片

列属性:

列属性:真正约束字段的是数据类型,但是数据类型的约束很单一,需要有一些额外的约束,来更加保证数据的合法性。
列属性有很多:NULL/not NULL,default,Primary key,unique key,auto_increment,comment.
空属性:
两个值:NULL(默认的)和NOT NULL(不为空),虽然默认的数据库基本都是字段为空,但是实际上在真实开发的时候
尽可能的要保证所有的数据都不为空,空数据没有意义没办法参与运算。

mysql数据库--mysql记录长度+列属性_第7张图片

创建一个实际案例表:班级表(名字,教室)

-- 创建班级表
create table my_class(
name varchar(20) not null,  -- 考虑实际边界值,不为空
room varchar(20)  -- 不加not null,就是默认允许为空 
)charset utf8;

mysql数据库--mysql记录长度+列属性_第8张图片

列描述:

列描述:comment,描述,没有实际含义,是专门用来描述字段,会根据表创建语句保存;
来给数据库管理员来进行了解的(也即一些注释,我们写代码的时候要注意注释因为这个也是互相分享的,注重代码分格)
-- 创建表
create table my_teacher(
name varchar(20) not null comment '姓名',
money decimal(10,2) not null comment '工资'
)charset utf8;

desc my_teacher;

show create table my_teacher;

mysql数据库--mysql记录长度+列属性_第9张图片

列属性(默认值):

默认值:某一种数据会经常性的出现某一个值。可以在一开始就指定好,在需要真实数据的时候,用户可以选择性的使用默认值。
默认值关键字:default
-- 默认值
create table my_default(
name varchar(20) not null,
age tinyint unsigned default 0,
gender enum('男','女','保密') default '男'
)charset utf8;

mysql数据库--mysql记录长度+列属性_第10张图片

默认值的生效:在数据进行插入的时候,不给数据进行赋值。

-- 插入数据
insert into my_default (name) values('薛飞龙');
select * from my_default;

mysql数据库--mysql记录长度+列属性_第11张图片

想要使用默认值,可以不一定去指定列表,故意不使用字段列表,可以使用default 关键字代替值。

insert into my_default values('项媛媛',18,default);
select * from my_default;

mysql数据库--mysql记录长度+列属性_第12张图片

你可能感兴趣的:(mysql数据库--mysql记录长度+列属性)