【MySQL进阶之路】表的约束——非空约束,默认值,列描述, zerofill

目录

空属性

默认值

非空约束和默认值

列描述

zerofill


【MySQL进阶之路】MySQL基础——从零认识MySQL-CSDN博客

🤗个人主页:东洛的克莱斯韦克-CSDN博客​​​​​​

🔥空属性

null 表示空的, not null表示非空。

null 不参与运算

select 1+null;

数据库默认字段是可以为空的,如果在业务中不允许字段的值为空,就需要加上非空约束

场景

创建一个班级表,包含班级名和班级所在的教室。 站在正常的业务逻辑中: 如果班级没有名字,你不知道你在哪个班级 如果教室名字可以为空,就不知道在哪上课

建表时不加非空约束

create table class(
    name varchar(10),
    room char(10)
    );

那么可以插入空值

insert into class() values();

建表时加上非空约束

create table class1(
    name varchar(10) not null,
    room char(10) not null
    );

插入空值时会报错

🔥默认值

默认值:某一种数据会经常性的出现某个具体的值,可以在一开始就指定好,在需要真实数据的时候, 用户可以选择性的使用默认值。

用 default 字段设置默认值

场景

在用户注册账号时,我们默认用户的性别是未知,当用户确定选择男或女是在进行更改。

 create table if not exists acount(
    id varchar(20),
    gender char(2) default '未知'
    );

默认值的设置会受字符集的影响,小编在配置文件中设置的字符集是utf8mb4,在建表时出现了如下报错

更改当前数据库的字符集

alter database db2 character set utf8;

建表成功,只插入id字段的数据看效果

insert into acount(id) values('12345');

🔥非空约束和默认值

我们用如下SQL语句测试

create table test(
    t1 char(2) null default 'a',
    t2 char(2) not null,
    t3 char(2) not null default 'b'
    );

insert into test (t1,t2,t3)values(' ','c',' ');

结果如下

这说明,不管我有没有非空约束和默认值,只要我插入了合法数据,就按插入的数据来。

insert into test (t2)values('d');

结果如下

这说明,不管我有没有非空约束,只要我有默认值,如果我没插入数据,就按我默认的值来

insert into test ()values();

结果如下

报错也很明显,如果我有非空约束,但我没有默认值,如果我没插入数据,就会报错。

🔥列描述

列描述comment,没有实际含义,专门用来描述字段,会根据表创建语句保存,用来给程序员或DBA 来进行了解。

create table tt12 (
name varchar(20) not null comment '姓名',
age tinyint unsigned default 0 comment '年龄',
sex char(2) default '男' comment '性别'
);

desc 看不到注释信息

show create table 可以查看注释信息

🔥zerofill

用如下SQL语句创建一张表

create table test1(
    age int unsigned
    );
show create table test1 \G;

可以看到int(10),这个代表什么意思呢?整型不是4字节码?这个10又代表什么呢?其实没有zerofill这个 属性,括号内的数字是毫无意义的。

insert into test1 values(1);

但是对列添加了zerofill属性后,显示的结果就有所不同了。修改test1表的属性

 alter table test1 change age age int unsigned zerofill;

这次可以看到a的值由原来的1变成0000000001,这就是zerofill属性的作用,如果宽度小于设定的宽度,自动填充0。要注意的是,这只是最后显示的结果,在MySQL中实际存储的还是1。为什 么是这样呢?我们可以用hex函数来证明。

可以看出数据库内部存储的还是1,0000000001只是设置了zerofill属性后的一种格式化输出而已。

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值