约束
约束——用于实现数据完整性,数据完整性理解为:数据的有效性(正确性)。
数据库完整性概述:
(1)实体完整性(行与行) 主键约束、外键约束
(2)域(字段)完整性(各个字段数值) 非空约束、默认值约束、检查
(3)参照完整性(表与表) 外键约束
(4)用户(自定义)完整性
约束的类型:
(1)主键约束
(2)外键约束
(3)非空约束
(4)唯一约束
(5)默认值约束
(6)检查约束
1)主键约束(PRIMARY KEY)
用来唯一标识表中的一个列,一个表中主键约束最多只能有一个,不同的行上,主键值不能相等。
在创建表时设置联合主键约束。联合主键,即多个列联合作为主键。这是,主键列的值不能同时都相等。
修改表时添加主键约束
语法格式:
ALTER TABLE 表名
ADD CONSTRAINT 约束名 PRIMARY KEY(列名);
表名:要添加约束的表
约束名:由用户指定,用于标识约束
列名:要添加主键约束的列
修改表时删除主键约束
语法格式:
ALTER TABLE 表名
DROP PRIMARY KEY;
注意:由于主键约束在一个表中只能有一个,因此不需要指定主键名就可以删除。
2)外键约束( FOREIGN KEY )
- 外键是指引用另一个表中的一列或多列,被引用的列应该具有主键约束或唯一约束。
- 外键用于建立和加强两个表数据之间的连接。
- 外键用于建立和加强两个表数据之间的连接。
- 外键用于建立多个表之间的关系。
添加外键
语法格式:
ALTER TABLE 表名
ADD CONSTRAINT 约束名
FOREIGN KEY (外键字段名) REFERENCES 外键表名(列名);
删除外键
语法格式:
ALTER TABLE 表名
DROP FOREIGN KEY 外键名;
EG:
ALTER TABLE student
ADD CONSTRAINT FK_ID
FOREIGEN KEY (gid) REFERENCES grade(id);
含义:
- 在student表的gid列上建立一个外键约束,该约束是参照grade表的id字段。
- 对表添加数据时有什么影响?对于被参照的表grade:添加数据时无任何影响。
- 对于外键表student上的外键列gid:该列上的数据只能选择被参照表grade上被参照列id中的数据。
- 简单的说:student表上gid列中的数据,只能是grade表上id列中已有的数据。即,student表的gid外键依赖于grade表的id。
3)非空约束(NOT NULL)
用来限定数据表中的列必须输入值。
修改表时添加非空约束
语法格式:
ALTER TABLE 表名
MODIFY 列名 该列数据类型 NOT NULL ;
4)唯一约束(UNIQUE)
用来唯一标识表中列的,不同的行上,唯一键的值也不能相等与主键约束不同的是,在一张数据表中可以有多个唯一约束。
修改表时添加唯一约束
语法格式:
ALTER TABLE 表名
ADD CONSTRAINT 约束名 UNIQUE(列名);
删除唯一约束
语法格式:
DROP INDEX 约束名 ON 表名
5)默认值约束(DEFAULT)
用来当不给表的列输入值时,自动为该列指定一个值。
修改表时添加默认值约束
语法格式:
ALTER TABLE 表名
ALTER 列名 SET DEFAULT 默认值 ;
删除默认值约束
语法格式:
ALTER TABLE 表名
ALTER 列名 DROP DEFAULT ;
小结
1、 表创建后,再添加约束
- 主键约束
ALTER TABLE 表名
ADD CONSTRAINT 约束名 PRIMARY KEY(列名);
- 唯一约束
ALTER TABLE 表名
ADD CONSTRAINT 约束名 UNIQUE(列名);
- 非空约束
ALTER TABLE 表名
MODIFY 列名 该列数据类型 NOT NULL ;
- 默认约束
ALTER TABLE 表名
ALTER 列名 SET DEFAULT 默认值 ;
- 外键约束
ALTER TABLE 表名
ADD CONSTRAINT 约束名
FOREIGN KEY (外键字段名) REFERENCES 外键表名(列名);
注意:约束名称可以使用SHOW CREATE TABLE 表名;来查询。
2、删除约束
- 主键约束
ALTER TABLE 表名
DROP PRIMARY KEY;
- 唯一约束
DROP INDEX 约束名 ON 表名
- 非空约束
ALTER TABLE 表名
MODIFY 列名 该列数据类型 ;
- 默认约束
ALTER TABLE 表名
ALTER 列名 DROP DEFAULT ;
- 外键约束
ALTER TABLE 表名
DROP FOREIGN KEY 外键名;