约束
主键约束:
关键字:PRIMARY KEY
特点:
-
主键约束相当于 唯一约束+非空约束 的组合,主键约束列不允许重复,也不允许出现空值
-
一个表最多只能有一个主键约束 ; 可以在列级别创建,也可以在表级别上创建
-
复合主键:主键约束对应着表中的一列或者多列
- 这些列都不允许为空值
- 组合的值不允许重复
-
创建主键约束时,系统默认会在所在的列或列组合上建立对应的主键索引
如果删除主键约束了,主键约束对应的索引就自动删除
-
不要修改主键字段的值,可能会破坏数据的完整性
-
MySQL的主键名总是PRIMARY,就算自己命名了主键约束名也没用
注释:
单字段主键和多字段主键:
语法格式:
-
单字段主键:
列名 列名数据类型 PRIMARY KEY[默认值]
-
复合主键:
PRIMARY KEY (列名1,列名2,列名3,......,列名N)
删除主键约束:
语法格式:
ALTER TABLE table_name DROP PRIMARY KEY;
外键约束:
关键字:FOREIGN KEY
外键的作用:
-
外键属于引用完整性
-
一个表的外键可以为空值
若不为空值,则每一个外键值必须等于另一个表中主键的某个值
特点:
- 从表的外键列,必须引用/参考主表的主键或唯一约束的列,因为被依赖/被参考的值必须是唯一的
- 在创建外键约束时,如果不给外键约束命名, 默认名不是列名,而是自动产生一个外键名,也可以指定外键
约束名 - 删表时,先删从表(或先删除外键约束),再删除主表
- 当主表的记录被从表参照时,主表的记录将不允许删除,如果要删除数据,需要先删除从表中依赖该记录的数
据,然后才可以删除主表的数据 - 在“从表”中指定外键约束,并且一个表可以建立多个外键约束
- 当创建外键约束时索引名,但是外键的约束名
- 删除外键约束后,必须手动删除对应的索引
注释:
语法格式:
-
建表时添加外键列
[CONSTRAINT 外键名] FOREIGN KEY 字段名 REFERENCES 主表名 主键列
外键的命名:
前缀一般为 fk 开头,紧跟 主表名 字段名;以下划线分割
-
建表后添加外键列
ALTER TABLE table_name ADD FOREIGN KEY (字段名) REFERENCES 主表名 主键列;
注意:
- (从表的某个字段)的数据类型必须与主表名(被参考字段)的数据类型一致,逻辑意义也一样
- (从表的某个字段)的字段名可以与主表名(被参考字段)的字段名一样,也可以不一样
删除外键约束:
步骤一:
-
查看约束名
SELECT * FROM information_schema.table_constraints WHERE table_name = '表名称' ;
-
删除外键约束
ALTER TABLE 从表名 DROP FOREIGN KEY 外键约束名;
步骤二:查看查看索引名和删除索引
-
查看索引名
SHOW INDEX FROM 表名称;
-
删除索引
ALTER TABLE 从表名 DROP INDEX 索引名;
自增约束:
关键字:AUTO_INCREMENT
特点:
-
一个表中只能有一个字段使用AUTO_INCREMENT ; 必须与主键组合使用
-
AUTO_INCREMENT的列的数据类型必须是整数类型
-
AUTO_INCREMENT 默认情况下,起始值为1,增量为1
-
如果自增列指定了 0 和 null,会在当前最大值的基础上自增
如果自增列手动指定了具体值,直接赋值为具体值
注释:
语法格式:
-
建表时添加
字段名 字段数据类型 AUTO_INCREMENT;
-
建表后添加
ALTER TABLE table_name 字段名 数据类型 AUTO_INCREMENT;
删除自增长约束:
语法格式:
ALTER TABLE table_name 字段名 数据类型;
非空约束:
关键字:NOT NULL
特点:
- 非空约束指字段的值不能为空
- 非空约束只能出现在列上,不能组合非空,只能单独列;
- 空字符串 ’ ’ 不等于NULL, 0也不等于NULL
注释:
语法格式:
-
创建表时添加非空约束
字段名 字段数据类型 NOT NULL
-
建表后添加非空约束
ALTER TABLE table_name MODIFY 字段名 数据类型 NOT NULL;
-
删除非空约束
ALTER TABLE table_name MODIFY 字段名 数据类型 NULL;
默认约束:
特点:
- 默认约束指定某列的默认值
- 默认值只能约束一个列
- 不能用于AUTO_INCREMENT列,TIMESTAMP列
- 对一个已经有数据的表添加默认约束,原来的数据不能得到默认值
注释:
语法格式:
-
建表时添加默认约束
字段名 字段数据类型 DEFAULT 默认值;
-
建表后添加默认约束
ALTER TABLE table_name MODIFY 字段名 数据类型 DEFAULT 默认值;
删除默认约束:
-
删除默认约束,并删除非空约束
ALTER TABLE table_name MODIFY 字段名 数据类型;
-
删除默认约束,保留非空约束
ALTER TABLE table_name MODIFY 字段名 数据类型 NOT NULL;
唯一约束:
特点:
- 唯一约束可以是某一个列的值唯一,也可以多个列组合的值唯一
- 唯一性约束允许列值为空 ; 允许为空,但是只能出现一个空值
- 在创建唯一约束的时候,如果不给唯一约束命名,就默认和列名相同
- MySQL会给唯一约束的列上默认创建一个唯一索引
注释:
语法格式:
-
创建表时添加
字段名 字段类型 UNIQUE
-
创建表时最后添加
CREATE TABLE table_name( ..... [CONSTRAINT 约束名] UNIQUE KEY (字段名) )
-
建表后添加
-
方式一:
复合型约束
ALTER TABLE table_name ADD UNIQUE KEY(字段列表);
-
方式二:
ALTER TABLE table_name MODIFY 字段名 数据类型 UNIQUE;
-
删除唯一性约束:
特点:
- 删除唯一约束只能通过删除唯一索引的方式删除
- 删除时需要指定唯一索引名,唯一索引名就和唯一约束名一样
- 如果创建唯一约束时未指定名称
- 如果是单列,就默认和列名相同
- 如果是组合列,那么默认和() 中排在第一个的列名相同