【MySQL】表的束缚

打印 上一主题 下一主题

主题 983|帖子 983|积分 2951

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
目录
一、非空束缚not null
二、默认值束缚default
三、列描述comment
四、填充零zerofill
五、主键primary key
六、自增长auto_increment
七、唯一键unique
八、外键foreign key


一、非空束缚not null

如果不对一个字段做非空束缚,则默认为空。但空数据无法参与运算,而且我们偶然必要克制用户在某些字段中输入空值,所以实际开发时我们常常必要对一些字段进行非空束缚

像这样,在建表时不对字段进行非空束缚,且插入时也没有指定数据,则默认为空
如果要克制某些字段为空,就要像下面这样在数据范例后加上非空束缚

输入desc 表名 检察表的结构:

NULL属性代表某列数据可否为空。可以看到,到场非空束缚后,对应字段就不允许为空了,



二、默认值束缚default

添加default束缚实际上就是为某列数据设置默认值,当未指定列数据则接纳该默认值
前面已经可以看到,如果不设置default束缚,则字段默认值为NULL。default束缚和非空束缚并不冲突,如果用户插入的数据是NULL,就看是否有非空束缚;如果对应列未插入数据,就看是否有default束缚。
添加default束缚的方式和非空束缚一样:

检察表结构:

可以看到对应字段的Default属性已经被设置为我们指定的默认值了


三、列描述comment

我们在之前已经见过列描述了,其主要用于对一个字段作注释,相当于一个软性的束缚
例如:

列描述用于提示用户对应字段的含义,可以通过 show create table 列名 来检察



四、填充零zerofill

zerofill可以在插入的数据小于设定的长度时在前面自动填充前导0
我们在设置数字范例时,可以在范例的背面加上一个长度,例如:

向表中插入一行数据:

可以看到,设置了zerofill属性的字段a,若数据长度小于我们前面设定的长度10,则会在前面添加前导0直到符合设定长度;如果数据位数比设置的长度更大则正常插入,无需添加
实际上在数据库内部存储的数据还是去除前导0后的原始数据,设置zerofill只能让数据格式化输出


五、主键primary key

主键(primary key)用于束缚某个字段里面的数据不能重复且不能为空。例如当插入学号数据时,一般是不允许有重复的学号的,因此就可以将该列数据设置为主键
一张表里最多只能有一个主键,且设置为主键的列通常是整数范例。因此主键也用于标识某行数据的唯一性,例如通过学号标识一个学生的唯一性
将某个字段设置为主键的方式有多种,例如:


  • 建表时直接指定主键

在检察表结构时,对应字段的Key属性如果为PRI则表明该字段是主键


  • 在已创建的表中追加主键束缚
  1. alter table 表名 add primary key(列名);
复制代码



  • 用主键字段列表来创建主键
这种方式可以创建复合主键,例如:

此时id和age共同合成一个复合主键,此时只有这两列数据同时重复才会触发主键冲突,否则都是允许插入的
删除主键的方式:
  1. alter table 表名 drop primary key;
复制代码

可以看到主键束缚已经被删除了
在插入数据时,插入重复的主键数据是不被允许的,例如:

如果一个表中已经存在了若干条数据,且某一列中存在重复数据,此时我们不能再对该列添加主键束缚


六、自增长auto_increment

自增长属于主键的一种,当某个字段设置自增长时,即便我们在插入时不指定该字段的值,系统也会自动从当前字段已有的最大值进行+1操纵得到一个自增长的值。自增长通常与主键搭配使用作为逻辑主键
任何一个字段要做自增长,条件是本身是一个索引,且必须是整数。一张表最多只能有一个自增长字段
例如:

随便插入几个数据,观察自增长字段的变化

我们也可以在插入时指定自增长字段的值,这样在下一次自增时则会以上一次插入的值为基准开始增长

在最初建表时,我们也可以指定自增的初始值



七、唯一键unique

一张表中每每有多个字段都必要保证数据的不重复,但主键只能有一个,因此唯一键就可以解决多个字段必要唯一性束缚的问题。
唯一键与主键互补,主键用于标识单条数据在整个表中的唯一性,唯一键用于保证某个字段中数据在这一列的唯一性。例如我们将用户的姓名作为主键标识用户的唯一性,但用户的电话也是不应该重复的,因此我们可以将电话设置为唯一键
唯一键的本质与主键差不多,但唯一键允许数据为空,且不对空数据做唯一性比较(即唯一键可以有多个空数据)
例如:

随便插入几条数据:

可以看到唯一键不允许重复,但不会对null做检测


八、外键foreign key

外键用于界说主表与从表之间的关系。外键束缚主要在创建从表时界说,而且与主表的主键束缚或唯一键束缚关联
例如我们有一个主表存放学校内全部班级的信息,从表存放学生的信息


  • 先创建主表,将班级的编号设置为主键



  • 再创建从表,将学生学号设置为主键,将学生所属的班级编号与主表中的班级编号进行外键束缚关联

设置外键束缚的语法:
  1. foreign key (从表字段) references 主表名(主表字段)
复制代码
我们先向主表中插入几个班级信息

再向从表中插入几个学生信息

可以看到,当学生所属的class_id在主表中的id字段中存在时,是可以正常插入的,但:

当class_id在主表中的id字段中不存在时克制插入。事实上一个学生也不大概属于一个不存在的班级,因此是符合我们实际业务必要的
外键的数据必要在主表中所关联的对应列中存在,不能插入不存在的数据
但是如果class_id为null,是允许插入的

例如某个学生还没有分配班级,就设置为null
如果某个主键列对应的外键中还有数据,我们是无法直接删除对应的主键数据的,例如:

编号为1的班级中还存在学生的数据,我们就无法把这个班级的数据删除
实际中,许多数据都是存在相关性的。如果两张表在业务上具有相关性,但是没有建立束缚关系,就大概导致出现问题,例如一个学生属于了一个不存在的班级。通过外键我们就可以将差别表的两个字段相关联,建立束缚关系。
完.

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

祗疼妳一个

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表