DA弯道超车

2022-06-02   阅读量: 120

Mysql 数据库

MySQL - 六大约束看这一篇就够了主键、外键、唯一、检查、默认值、非空六大约束

约束

在 MySQL 中,约束是指对表中数据的一种约束,能够帮助数据库管理员更好地管理数据库,并且能够确保数据库中数据的正确性和有效性。


例如,在数据表中存放年龄的值时,如果存入 200、300以及一些负数这些无效的值就毫无意义了。因此,使用约束来限定表中的数据范围是很有必要的。


1、主键约束

主键约束是使用最频繁的约束。是MySQL 中使用最为频繁的约束。一般情况下,为了便于 DBMS 更快的查找到表中的记录,都会在表中设置一个主键。


主键是表的一个特殊字段,该字段能唯一标识该表中的每条信息。例如,学生信息表中的学号是唯一的。


主键分为两种类型:单主键和联合主键。


这里需要声明一下,每张表只能有一个主键,如果想将多个字段设置为主键,可以将这些字段联合,设置联合主键。不能够将多个字段设置为主键,下面的内容会进行详细的展示说明。联合主键不是多主键!!!


使用主键应注意以下几点:


每个表只能定义一个主键。

主键值必须唯一标识表中的每一行,且不能为 NULL,即表中不可能存在有相同主键值的两行数据。这是唯一性原则。

一个字段名只能在联合主键字段表中出现一次。

联合主键不能包含不必要的多余字段。当把联合主键的某一字段删除后,如果剩下的字段构成的主键仍然满足唯一性原则,那么这个联合主键是不正确的。这是最小化原则。

这里的最小化原则是在一张表中,满足主键的要求的情况下,尽量使得联合主键中的字段数最小。


2、外键约束

MySQL 外键约束(FOREIGN KEY)是表的一个特殊字段,经常与主键约束一起使用。对于两个具有关联关系的表而言,相关联字段中主键所在的表就是主表(父表),外键所在的表就是从表(子表)。


外键用来建立主表与从表的关联关系,为两个表的数据建立连接,约束两个表中数据的一致性和完整性。比如,一个水果摊,只有苹果、桃子、李子、西瓜等 4 种水果,那么,你来到水果摊要买水果就只能选择苹果、桃子、李子和西瓜,其它的水果都是不能购买的。


主表删除某条记录时,从表中与之对应的记录也必须有相应的改变。一个表可以有一个或多个外键,外键可以为空值,若不为空值,则每一个外键的值必须等于主表中主键的某个值。


定义外键时,需要遵守下列规则:


主表必须已经存在于数据库中,或者是当前正在创建的表。如果是后一种情况,则主表与从表是同一个表,这样的表称为自参照表,这种结构称为自参照完整性。

必须为主表定义主键。

主键不能包含空值,但允许在外键中出现空值。也就是说,只要外键的每个非空值出现在指定的主键中,这个外键的内容就是正确的。

在主表的表名后面指定列名或列名的组合。这个列或列的组合必须是主表的主键或候选键。

外键中列的数目必须和主表的主键中列的数目相同。

外键中列的数据类型必须和主表主键中对应列的数据类型相同。

创建表时设置外键



3、唯一约束

MySQL唯一约束(Unique Key)是指所有记录中字段的值不能重复出现。例如,为 id 字段加上唯一性约束后,每条记录的 id 值都是唯一的,不能出现重复的情况。如果其中一条记录的 id 值为‘0001’,那么该表中就不能出现另一条记录的 id 值也为‘0001’。


唯一约束与主键约束相似的是它们都可以确保列的唯一性。不同的是,唯一约束在一个表中可有多个,并且设置唯一约束的列允许有空值,但是只能有一个空值。而主键约束在一个表中只能有一个,且不允许有空值。比如,在用户信息表中,为了避免表中用户名重名,可以把用户名设置为唯一约束。


4、检查约束

检查约束是用来检查数据表中,字段值是否有效的一个手段。


例如,学生信息表中的年龄字段是没有负数的,并且数值也是有限制的。如果是大学生,年龄一般应该在 18~30 岁之间。在设置字段的检查约束时要根据实际情况进行设置,这样能够减少无效数据的输入。


MySQL检查约束(CHECK)是用来检查数据表中字段值有效性的一种手段,可以通过 CREATE TABLE 或 ALTER TABLE 语句实现。设置检查约束时要根据实际情况进行设置,这样能够减少无效数据的输入。


默认值约束和非空约束也可看作是特殊的检查约束。


5、非空约束

非空约束(NOT NULL)指字段的值不能为空。对于使用了非空约束的字段,如果用户在添加数据时没有指定值,数据库系统就会报错。可以通过 CREATE TABLE 或 ALTER TABLE 语句实现。在表中某个列的定义后加上关键字 NOT NULL 作为限定词,来约束该列的取值不能为空。


比如,在用户信息表中,如果不添加用户名,那么这条用户信息就是无效的,这时就可以为用户名字段设置非空约束。



6、默认值约束

默认值(Default)的完整称呼是”默认值约束(Default Constraint)”,用来指定某列的默认值。在表中插入一条新记录时,如果没有为某个字段赋值,系统就会自动为这个字段插入默认值。


例如,员工信息表中,部门位置在北京的较多,那么部门位置就可以默认为“北京”,系统就会自动为这个字段赋值为“北京”。


默认值约束通常用在已经设置了非空约束的列,这样能够防止数据表在录入数据时出现错误。



主键自增长

在 MySQL 中,当主键定义为自增长后,这个主键的值就不再需要用户输入数据了,而由数据库系统根据定义自动赋值。每增加一条记录,主键会自动以相同的步长进行增长。


通过给字段添加 AUTO_INCREMENT属性来实现主键自增长。语法格式如下:


字段名 数据类型 AUTO_INCREMENT


默认情况下,AUTO_INCREMENT 的初始值是 1,每新增一条记录,字段值自动加 1。

一个表中只能有一个字段使用 AUTO_INCREMENT 约束,且该字段必须有唯一索引,以避免序号重复(即为主键或主键的一部分)。

AUTO_INCREMENT 约束的字段必须具备 NOT NULL 属性。

AUTO_INCREMENT 约束的字段只能是整数类型(TINYINT、SMALLINT、INT、BIGINT 等)。

AUTO_INCREMENT 约束字段的最大值受该字段的数据类型约束,如果达到上限,AUTO_INCREMENT 就会失效。



小结

以上 6 种约束中,一个数据表中只能有一个主键约束,其它约束可以有多个。


在外键的创建时,必须先创建主表,再才能创建从表,因为创建从表需要用到主表。


外键的添加需要满足从表中的字段数据全部出现在主表中的字段值。


默认值约束和非空约束可以看做是一种检查约束


自增字段会出现不连续的情况。


52.4036 3 0 关注作者 收藏

评论(0)


暂无数据

推荐课程

推荐帖子