MySQL入门学习笔记


第四章:约束

4.1 约束定义

约束:数据库约束是对表中的数据进行进一步的限制,保证数据的正确性、有效性和完整性。是除了数类型之外,对列中存储的数据进行限制或者追加的功能。

常见的约束:

(1)主键约束(Primary Key Constraint):要求主键列的数据唯一,并且不允许为空。

(2)非空约束(Not Null Constraint):指字段的值不能为空,对于使用了非空约束的字段,如果添加数据时没有指定值,数据库系统会报错。

(3)唯一性约束(Unique Constraint):要求该列唯一,允许为空,但只能出现一个空值。

(4)外键约束(Foreign Key Constraint):外键用来在两个表的数据之间建立链接,它可以是一列或者多列。一个表可以有一个或多个外键。外键对应的是参照完整性,一个表的外键可以为空值,若不为空值,则每一个外键值必须等于另一个表中主键的某个值。

(5)默认约束(Default Constraint):默认约束是指某列的默认值。

4.2 主键约束

4.2.1 主键的相关术语

(1)主键约束:primary key

(2)主键字段:被primary key 修饰的字段

(3)主键值:主键字段里面对应的值

4.2.2 主键的作用

(1)表的设计三范式中的第一范式要求任何一张表都应该有主键。

(2)主键字段:被primary key 修饰的字段,主键字段中的值是每一行记录的唯一标识符。

(3)主键可以保证实体的完整性。

(4)主键可以加快数据的检索速度,因为主键约束实际上给字段添加了索引。

4.2.3 主键的分类

根据主键字段的数量来划分:

(1)单一主键:推荐使用单一主键

-- 语法结构1:在定义列的同时指定主键
字段名 数据类型 primary key

-- 语法结构2:在定义完所有列之后指定主键
primary key(字段名)

(2)复合主键:多个字段联合起来添加一个主键

-- 语法结构:
primary key(字段1,字段3,...)

根据主键的性质来划分:

(1)自然主键:主键值最好是和业务没有任何关系的自然数(推荐使用)

(2)业务主键:也业务值或者系统业务挂钩的主键。

4.2.4 主键自增

定义:在数据库应用中,经常希望在每次插入新纪录时,系统会自动生成字段的主键值。可以通过为表主键添加Auto_Increment 关键字来实现。

-- 语法结构:
字段名 数据类型 auto_increment

4.3 非空约束

定义:指字段的值不能为空,对于使用了非空约束的字段,如果添加数据时没有指定值,数据库系统会报错。

-- 语法结构
字段名 数据类型 not null

4.4 唯一性约束

定义:要求该列唯一,允许为空,但只能出现一个空值。唯一性约束可以确保一列或者几列不出现重复值。

-- 语法结构1:在定义完列之后直接指定唯一约束
字段名 数据类型 unique

-- 语法结构2:在定义完所有列之后指定唯一约束
constraint 约束名 unique(字段名)

4.5 外键约束

相关定义:

(1)外键:首先它是表中的一个字段,它可以不是本表的主键,但对应另外一个表的主键。外键主要作用是保证数据引用的完整性,定义外键后,不允许删除在另一个表中具有关联关系的行。外键的作用是保持数据的一致性、完整性。

(2)主表(父表):对于两个具有关联关系的表而言,相关联字段中主键所在的那个表即是主表。

(3)从表(子表):对于两个具有关联关系的表而言,相关联字段中外键所在的那个表即是从表。

-- 语法结构
constraint 外键名 foreign key(字段名) references 主表名(字段名)

4.6 默认约束

定义:默认约束(Default Constraint):默认约束是指某列的默认值。

-- 语法结构
字段名 数据类型 default 默认值