外键约束和外键约束的级联操作
CREATE TABLE emp( -- 创建emp表 id INT PRIMARY KEY AUTO_INCREMENT, NAME VARCHAR(30), age INT, dep_name VARCHAR(30), -- 部门名称 dep_location VARCHAR(30) -- 部门地址 ); -- 添加数据 INSERT INTO emp (NAME,age,dep_name,dep_location) VALUES ('张三',20,'研发部','广州'); INSERT INTO emp (NAME,age,dep_name,dep_location) VALUES ('李四',21,'研发部','广州'); INSERT INTO emp (NAME,age,dep_name,dep_location) VALUES ('王五',20,'研发部','广州'); INSERT INTO emp (NAME,age,dep_name,dep_location) VALUES ('老王',28,'销售部','深圳'); INSERT INTO emp (NAME,age,dep_name,dep_location) VALUES ('大王',22,'销售部','深圳'); INSERT INTO emp (NAME,age,dep_name,dep_location) VALUES ('小王',18,'销售部','深圳'); SELECT * FROM emp;
外键约束
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(30), age INT, dep_id INT, -- 外键对应主表的主键 CONSTRAINT emp_dept_fk FOREIGN KEY (dep_id) REFERENCES department(id) ); -- 添加2个部门 INSERT INTO department VALUES(NULL,'研发部','广州'),(NULL,'销售部','广州'); -- 添加员工,dep_id 表示员工所在的部门 INSERT INTO employee(NAME,age,dep_id) VALUES ('张三',20,1); INSERT INTO employee(NAME,age,dep_id) VALUES ('李四',21,1); INSERT INTO employee(NAME,age,dep_id) VALUES ('王五',20,1); INSERT INTO employee(NAME,age,dep_id) VALUES ('老王',28,2); INSERT INTO employee(NAME,age,dep_id) VALUES ('大王',22,2); INSERT INTO employee(NAME,age,dep_id) VALUES ('小王',18,2); SELECT * FROM employee; SELECT * FROM department;
2、删除外键
ALTER TABLE 表名 DROP FOREIGN KEY 外键名称;
-- 删除外键 ALTER TABLE employee DROP FOREIGN KEY emp_dept_fk;
3、创建表之后添加外键
ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY (外键列名称) REFERENCES 主表名称(主表列名称);
-- 创建表之后添加外键 ALTER TABLE employee ADD CONSTRAINT emp_dept_fk FOREIGN KEY (dep_id) REFERENCES department(id);
外键约束_级联操作
1、添加级联操作
ALTER TABLE 表名 ADD CONSTRAINT 外键名称
FOREIGN KEY (外键列名称) REFERENCES 主表名称(主表列名称) ON UPDATE CASCADE ON DELETE CASCADE;
-- 添加外键,设置级联更新,设置级联删除 ALTER TABLE employee ADD CONSTRAINT emp_dept_fk FOREIGN KEY (dep_id) REFERENCES department(id) ON UPDATE CASCADE ON DELETE CASCADE;
2、分类
级联更新:ON UPDATE CASCADE
-- 添加外键,设置级联更新,设置级联删除 ALTER TABLE employee ADD CONSTRAINT emp_dept_fk FOREIGN KEY (dep_id) REFERENCES department(id) ON UPDATE CASCADE;
级联删除:ON DELETE CASCADE
-- 添加外键,设置级联更新,设置级联删除 ALTER TABLE employee ADD CONSTRAINT emp_dept_fk FOREIGN KEY (dep_id) REFERENCES department(id) ON DELETE CASCADE;