级联操作
-
级联更新
两张表添加级联更新操作后,主表键值被修改时,添加外键的表中的值也会随之修改。
添加级联更新,外键名是自定义的
#添加级联更新 ALTER TABLE 表名 ADD CONSTRAINT 外键名 FOREIGN KEY (表中添加外键的列名) REFERENCES 主表(主表列) ON UPDATE CASCADE;
#添加级联更新 ALTER TABLE emp ADD CONSTRAINT emp_dep FOREIGN KEY (dep_id) REFERENCES dep(id) ON UPDATE CASCADE;
-
级联删除
主表中的数据被删除时,被级联的表的数据也会被删除
#添加级联删除 ALTER TABLE 表名 ADD CONSTRAINT 外键名 FOREIGN KEY (添加外键的列名) REFERENCES 主表(主表列) ON UPDATE CASCADE ON DELETE CASCADE; #添加级联删除 ALTER TABLE emp ADD CONSTRAINT emp_dep FOREIGN KEY (dep_id) REFERENCES dep(id) ON UPDATE CASCADE ON DELETE CASCADE;
#创建员工表 CREATE TABLE emp( id INT, name VARCHAR(30), dep_id INT ); #创建部门表 CREATE TABLE dep( id INT, dep_name VARCHAR(30), dep_city VARCHAR(30) ); #给员工表添加主键 ALTER TABLE emp MODIFY id INT PRIMARY KEY; #给部门表添加主键 ALTER TABLE dep MODIFY id INT PRIMARY KEY; #给员工表添加数据 INSERT INTO emp(id,name,dep_id) VALUE(1,'小王',1); INSERT INTO emp(id,name,dep_id) VALUE(2,'大王',2); #给部门表添加数据 INSERT INTO dep(id,dep_name,dep_city) VALUE(1,'研发部','非洲'); INSERT INTO dep(id,dep_name,dep_city) VALUE(2,'销售部','南极洲'); #添加级联更新 ALTER TABLE emp ADD CONSTRAINT emp_dep FOREIGN KEY (dep_id) REFERENCES dep(id) ON UPDATE CASCADE; #删除外键,测试级联删除 ALTER TABLE emp DROP FOREIGN KEY emp_dep; #添加级联删除 ALTER TABLE emp ADD CONSTRAINT emp_dep FOREIGN KEY (dep_id) REFERENCES dep(id) ON UPDATE CASCADE ON DELETE CASCADE; #删除一行测试级联删除 DELETE FROM dep WHERE id=2; #测试级联更新 UPDATE dep SET id=3 WHERE id=1; #查询两张表 SELECT * FROM emp; SELECT * FROM dep;