1、约束概念
对表中的数据进行限定,保证数据的正确性、有效性和完整性
2、分类:
1. 主键约束:primary key
2. 非空约束:not null
3. 唯一约束:unique
4. 外键约束:foreign key
3、非空约束:not null,某一列的值不能为null
1. 创建表时添加约束
CREATE TABLE stu(
id INT,
NAME VARCHAR(20) NOT NULL -- name为非空
);
2. 创建表完后,添加非空约束
ALTER TABLE stu MODIFY NAME VARCHAR(20) NOT NULL;
3. 删除name的非空约束
ALTER TABLE stu MODIFY NAME VARCHAR(20);
4、唯一约束:unique,某一列的值不能重复
1. 注意:唯一约束可以有NULL值,但是只能有1条记录为null。
2. 在创建表时,添加唯一约束
CREATE TABLE stu(
id INT,
phone_number VARCHAR(20) UNIQUE -- 手机号
);
3. 删除唯一约束
ALTER TABLE stu MODIFY phone_number VARCHAR(20); -- 删除不了唯一约束
ALTER TABLE stu DROP INDEX phone_number;
4. 在表创建完后,添加唯一约束
ALTER TABLE stu MODIFY phone_number VARCHAR(20) UNIQUE; -- 如果phone_number列存在重复值则添加唯一约束失败
5、主键约束:primary key
1. 注意:
a. 含义:非空且唯一
b. 一张表只能由一个字段为主键
c. 主键就是表中记录的唯一标识
2. 在创建表时,添加主键约束
CREATE TABLE stu(
id INT PRIMARY KEY , -- 给id添加主键约束
NAME VARCHAR(20)
);
3. 删除主键
ALTER TABLE stu MODIFY id INT; -- 并不会删除主键
ALTER TABLE stu DROP PRIMARY KEY;
4. 创建完表后,添加主键
ALTER TABLE stu MODIFY id INT PRIMARY KEY; -- 如果id存在重复的值则不能添加主键
5. 自动增长
a. 概念:如果某一列是数值类型的,使用 auto_increment 可以来完成值的自动增长。
b. 在创建表时,添加主键约束,并且完成逐渐自增长
CREATE TABLE stu(
id INT PRIMARY KEY AUTO_INCREMENT, -- 给id添加主键约束
NAME VARCHAR(20)
);
注意:
INSERT INTO stu VALUES (10,'ccc');
INSERT INTO stu VALUES (NULL,'ccc'); -- id=11,因为id只跟上一条记录的id值有关系,id=上一条记录的id+1
c. 删除自动增长
ALTER TABLE stu MODIFY id INT;
INSERT INTO stu VALUES (NULL,'ccc'); -- 删除主键后执行报id不能为null
INSERT INTO stu VALUES (12,'ccc'); -- 插入成功
d. 添加自动增长
ALTER TABLE stu MODIFY id INT AUTO_INCREMENT;
自动增长一般跟主键连到一起去使用,也可以不和主键连到一起使用,只是比较少。
6、外键约束:foreign key,让表与表产生关系,从而保证数据的正确性。
1. 在创建表时,可以添加外键
CREATE TABLE 表名(
...
外键列
CONSTRAINT 新起的外键名称 FOREIGN KEY (从表外键列名称) REFERENCES 主表名称(主表列名称)
);
练习:
-- 创建部门表(id,dep_name,dep_location) -- 一方,主表 CREATE TABLE department( id INT PRIMARY KEY AUTO_INCREMENT, dep_name VARCHAR(20), dep_location VARCHAR(20) );
-- 创建员工表(id,name,age,dep_id) -- 多方,从表 CREATE TABLE employee( id INT PRIMARY KEY AUTO_INCREMENT, NAME VARCHAR(20), age INT, dep_id INT, -- 外键对应主表的主键,可以为空,但是不可以为不存在的外键值 CONSTRAINT emp_dep_fk FOREIGN KEY (dep_id) REFERENCES department (id) -- 需要先创建部门表 );
注意:添加外键后,删除department表的主键值时若主键值在从表存在时会报异常,同理employee表添加不存在的外键值时也会报异常。
2. 删除外键
语法:ALTER TABLE 从表名 DROP FOREIGN KEY 新起的外键名称;
ALTER TABLE employee DROP FOREIGN KEY emp_dep_fk;
3. 创建表后,添加外键
语法:ALTER TABLE 从表名 ADD CONSTRAINT 新起的外键名称 FOREIGN KEY (从表外键列名称) REFERENCES 主表(主表列名称);
ALTER TABLE employee ADD CONSTRAINT emp_dep_fk FOREIGN KEY (dep_id) REFERENCES department(id); -- 当employee表中dept_id值含有department中id不存在的数据时添加外键失败
4. 级联操作
a. 添加级联操作,级联更新,级联删除
ALTER TABLE 从表名 ADD CONSTRAINT 新起的外键名称 FOREIGN KEY (从表外键列名称) REFERENCES 主表(主表列名称) ON UPDATE CASCADE ON DELETE CASCADE ;
b. 分类:
级联更新:ON UPDATE CASCADE,表示主表主键值更新,对应从表的外键值自动更新
级联删除:ON DELETE CASCADE,表示主表主键值删除,则对应的从表的外键值所在的记录删除
实际的开发中级联操作比较谨慎。