表的约束【mysql数据库】

表中一定要有各种约束,通过约束来保证未来插入表格的数据是符合预期的。约束本质是通过技术手段倒闭程序员插入正确的数据。反过来,站在mysql视角,插入进来的数据,都是符合数据约束的。

约束的最终目标:保证数据的完整性和可预期性。

目录

一、空属值 

二、默认值

 三、列描述

四、zerofill

五、 主键

复合主键

六、自增长

七、唯一键

八、 外键


一、空属值 

mysql中NULL表示没有,NULL不参与计算,单引号和双引号都表示空字符串(一般用单引号) 

两个值:null(默认的)和 not null(不能为空) 

数据库默认字段基本都是字段为空,但实际开发时,尽可能保证字段不为空,因为数据为空无法参与运算。 

可以发现,插入数据时,设置了not null属性的列是不允许为空的。

二、默认值

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

 

如果既指定not null 又指定default会怎样?

通过测试我们可以发现:只要设置了not null,我们就无法插入null,如果没有明确指定一列要插入,用的是default,如果建表时没有设置default值,就无法直接插入,设置了default值,就用的是default值。

default和not null不冲突,他们是互相补充的。

为什么我们平时建表时没有设置default值,却还是可以缺省插入呢?

原因是mysql会默认自动给我们加上default  NULL

如果建表时带了not null,mysql就默认不设置default

 三、列描述

comment,没有实际含义,专门用来描述字段(类似语言中的注释)

四、zerofill

数字类型后圆括号里带上数字int (10)是什么意思?

可以看到,我们建表的时候没有带(10),但mysqld给我们优化了一下。

此时,我们尝试给b这列加上zerofill:

此时:表中的数据就变成了这样:

zerofill的作用就是当数据的宽度小于指定宽度(圆括号内的数字)时,自动补0。

默认有符号的11位宽度,无符号的10位宽度就足够了:

五、 主键

primary key用来唯一地约束该字段里面的数据,不能重复,不能为空,一张表最多一个主键,主键所在列通常是整数类型。(直白讲就是要有一列数据能标识这一行数据的唯一性,比如一个学生的学号)主键会默认加上非空约束。

主键冲突:

站在数据库的角度,根据主键一定可以唯一地找到一条对应的数据:

可以根据主键对数据进行准确的增删查改:

去掉主键:

另一种指定主键的方式:建表后再指定主键必须保证这一列是不冲突的,所以最后建表的时候就指定好主键:

复合主键

一个主键不一定只能定义一列,可以多列构成一个复合主键。

六、自增长

auto_increment:一般和主键搭配使用,可以无需指定自动增长,必须为整数,一张表最多一个自增长。

 也可以指定id为1000插入:

插入1000后,意味着将下一次插入的起始数字改成了1001,后面插入的元素就会从1001开始自增。

应用场景:比如注册QQ时,QQ号就是自增的。

七、唯一键

unique key:不能重复,但可以为空

unique强调唯一性,主键只是选择一列唯一键作为主键。

 通过上面测试可以发现,插入时id字段不能插入重复元素,但可以插入多个null值。

八、 外键

主表:班级表        从表:学生表

因为每个学生的班级id必须是在班级表里存在的,也就是说逻辑上不应该插入班级表里不存在的班级id,要起到约束的作用,可以使用外键约束。

foreign key(字段名)references (主表名)(列名)

此时,如果想插入一个不存在的班级是不行的:

如果想删除一个班级,在这个班级跟别的表还有关联时,也是删除不了的。

constraint 是给外键起名字,不起也有默认的:

  

  • 17
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值