级联更新相关数据字段 在外键定义的时候加 ON UPDATE CASCADE 指定如果试图更新某行中的键值,而该行的键值由其它表的现有行中的外键所引用,则所有外键值也将更新成为该键指定的新值。如果在目标表上也定义了级联引用操作,则对在那些表中更新的键值同样采取指定的级联操作。例:create table dep( --部门表 id int not null CONSTRAINT PK_dep_id PRIMARY KEY NONCLUSTERED, name varchar(50) ) gocreate table employee( --员工表 id int not null CONSTRAINT PK_emp_id PRIMARY KEY NONCLUSTERED, name varchar(50), depid int not null, CONSTRAINT FK_employee_dep FOREIGN KEY (depid) REFERENCES dep (id) ON UPDATE CASCADE ) goinsert dep select 2,'销售部' union all select 3,'人事部' goinsert employee select 1,'张三',2 union all select 2,'李四',3goupdate employee set depid=1 where id=3 select * from dep select * from employee --看看以上语句出不出错,结果怎样,去掉 ON UPDATE CASCADE,再看看级联删除相关数据记录在外键定义的时候加 ON DELETE CASCADE 指定如果试图删除某行,而该行含有由其它表的现有行中的外键所引用的键,则也将删除所有包含那些外键的行。如果在目标表上也定义了级联引用操作,则对从那些表中删除的行同样采取指定的级联操作。差不多,不举例了
例子改一下, update employee set depid=1 where id=3 --〉 update employee set depid=1 where id=2
在外键定义的时候加 ON UPDATE CASCADE 指定如果试图更新某行中的键值,而该行的键值由其它表的现有行中的外键所引用,则所有外键值也将更新成为该键指定的新值。如果在目标表上也定义了级联引用操作,则对在那些表中更新的键值同样采取指定的级联操作。例:create table dep( --部门表
id int not null CONSTRAINT PK_dep_id PRIMARY KEY NONCLUSTERED,
name varchar(50)
)
gocreate table employee( --员工表
id int not null CONSTRAINT PK_emp_id PRIMARY KEY NONCLUSTERED,
name varchar(50),
depid int not null,
CONSTRAINT FK_employee_dep FOREIGN KEY (depid)
REFERENCES dep (id) ON UPDATE CASCADE
)
goinsert dep select 2,'销售部'
union all select 3,'人事部'
goinsert employee select 1,'张三',2
union all select 2,'李四',3goupdate employee set depid=1 where id=3
select * from dep
select * from employee
--看看以上语句出不出错,结果怎样,去掉 ON UPDATE CASCADE,再看看级联删除相关数据记录在外键定义的时候加 ON DELETE CASCADE 指定如果试图删除某行,而该行含有由其它表的现有行中的外键所引用的键,则也将删除所有包含那些外键的行。如果在目标表上也定义了级联引用操作,则对从那些表中删除的行同样采取指定的级联操作。差不多,不举例了
update employee set depid=1 where id=3
--〉
update employee set depid=1 where id=2
一个主表的主键字段与另一个表的两个字段不能同时设置为级联删除,只能把其中一个设置为级联删除,另一个变通处理,如:用触发器实现。
jwt1982(飞星)说的对