约束
目标:
- 约束的概念和分类:保证数据的正确性、有效性和完整性;
非空NOT NULL
;唯一UNIQUE
;主键PRIMARY KEY
;外键FOREIGN KEY
; - 四种约束的添加和删除语句:创建表时添加、表创建完后修改。
1. 约束的概念
约束:对表中的数据进行限定,保证数据的正确性、有效性和完整性。
2. 约束的分类
2.1 非空约束 NOT NULL
- (1) 概念: 被约束的那一列内容不能为null。
- (2) 添加方式:
① 创建表时添加:
*CREATE TABLE stu(id INT,NAME VARCHAR(20) NOT NULL);
约束NAME列的数据不能为null;
② 表创建完后用ALTER, MODIFY
关键字添加或删除:
*ALTER TABLE stu MODIFY NAME VARCHAR(20) NOT NULL;
创建完表后再为NAME列添加约束;
*ALTER TABLE stu MODIFY NAME VARCHAR(20);
删除NAME列的非空约束。
2.2 唯一约束 UNIQUE
- (1) 概念: 被修饰的那一列的值不能重复。注意:MySQL中可以有多个NULL。
- (2) 添加方式:
① 创建表时添加:
*CREATE TABLE stu(id INT,NAME VARCHAR(20) UNIQUE);
约束NAME列的数据不能重复;
② 表创建完后用ALTER, MODIFY
关键字添加:
*ALTER TABLE stu MODIFY NAME VARCHAR(20) UNIQUE;
创建完表后再为NAME列添加唯一约束;
③ 表创建完后用ALTER, DROP INDEX
关键字删除:
*ALTER TABLE stu DROP INDEX NAME VARCHAR(20);
删除NAME列的唯一约束。
2.3 主键约束 PRIMARY KEY
- (1) 概念: 键就是表中记录的唯一标识。被主键约束的那一列的值非空且唯一,一张表只能有一个字段为主键。
- (2) 添加方式:
① 创建表时添加:
*CREATE TABLE stu(id INT PRIMARY KEY,NAME VARCHAR(20) );
id列的数据为主键,非空且唯一;
② 表创建完后用ALTER, DROP PRIMARY KEY
关键字删除:
*ALTER TABLE stu DROP PRIMARY KEY;
删除主键约束,注意不需要指定字段,因为一个表中只有一个主键。 - (3) 自动增长:
如果某一列是数值类型,使用AUTO_INCREMENT
来完成值的自动增长,一般配合主键使用。
① 创建表时添加自动增长:
*CREATE TABLE stu(id INT PRIMARY KEY AUTO_INCREMENT, NAME VARCHAR(20) );
注意: id添加了自动增长后,赋值NULL,其值会自动增长;
也可以自己赋值,此时自动增长只与上一项的数据有关。
② 表创建完后用ALTER, MODIFY
关键字添加或删除:
*ALTER TABLE stu MODIFY id INT AUTO_INCREMENT;
添加自动增长
*ALTER TABLE stu MODIFY id INT AUTO_INCREMENT;
删除自动增长,注意主键这样删不掉。
2.4 外键约束 FOREIGN KEY
-
(1) 概念: 让表与表之间产生关系,从而保证数据的正确性。
-
(2) 添加方式:
① 创建表时添加外键:
*CREATE TABLE 表名( ... 外键列, CONSTRAINT 外键名称 FOREIGN KEY (外键列名称) REFERENCES 主表名称(主表列名称) );
② 表创建完后用ALTER, DROP
关键字删除:
*ALTER TABLE 表名 DROP FOREIGN KEY 外键名称;
*② 表创建完后用ALTER, ADD
关键字添加:
*ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY (外键列名称) REFERENCES 主表名称(主表列名称);
(3) 级联操作:
主表与被外键约束的表之间的关系。
① 分类: -
级联更新
ON UPDATE CASCADE
主表被关联的列更新后,被约束的外键也更新 -
级联删除
ON DELETE CASCADE
主表被关联的列删除后,被约束的外键也删除② 添加级联操作:
*ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY (外键列名称) REFERENCES 主表名称(主表列名称) ON UPDATE CASCADE ON DELETE CASCADE;