alter table Spcf Add constraint fk_Spcf_spbh_spbh --约束名 Foreign key(spbh) references Sp(spbh) on update cascade --级联更新 on delete cascade --级联删除 alter table Spcf Add constraint fk_Spcf_cfbh_spbh --约束名 Foreign key(spbh) references Sp(spbh) on update cascade --级联更新 on delete cascade --级联删除
级联删除参考如下: /* 标题:两表通过字段关联进行级联删除。 作者:爱新觉罗·毓华(十八年风雨,守得冰山雪莲花开) 时间:2008-11-20 地点:广东深圳 */create table ta(id int not null) create table tb(id int , aid int) insert into ta values(1) insert into ta values(2) insert into tb values(1 , 1) insert into tb values(2 , 2) insert into tb values(3 , 1) go--一、查看原始数据 --ta表的原始数据 select * from ta /* id ----------- 1 2 */ --tb表的原始数据 select * from tb /* id aid ----------- ----------- 1 1 2 2 3 1 */--二、看看没有创建级联删除时的情况(删除ta表id=1的数据,看看是否影响tb表) delete from ta where id = 1 select * from ta /* id ----------- 2 */ select * from tb /* id aid ----------- ----------- 1 1 2 2 3 1 */--三、恢复原始数据,创建级联删除,删除ta表id=1的数据,看看是否影响tb表 insert into ta values(1) --为ta创建主健 alter table ta add constraint pk_ta_id primary key (id) go --为tb创建外健,并指定级联删除 alter table tb add constraint fk_tb_aid foreign key (aid) references ta(id) on delete cascade go delete from ta where id = 1 select * from ta /* id ----------- 2 */ select * from tb /* id aid ----------- ----------- 2 2 */--删除级联约束 alter table tb drop constraint fk_tb_aid go --删除测试表 drop table ta , tb go
sqlserver 支持级联更新和删除oracle 只支持级联删除 alter table 表名 add constraint 约束名 foreign key(字段名) references 主表名(字段名) on delete cascade语法: Foreign Key (column[,...n]) references referenced_table_name[(ref_column[,...n])] [on delete cascade] [on update cascade] 注释: column:列名 referenced_table_name:外键参考的主键表名称 ref_name:外键要参考的表的主键列 on delete:删除级联 on update:更新级联 表的外键约束 SELECT 外键表ID=b.fkeyid ,外键表名称=object_name(b.fkeyid) ,外键列ID=b.fkey ,外键列名=(SELECT name FROM syscolumns WHERE colid=b.fkey AND id=b.fkeyid) ,主键表ID=b.rkeyid ,主键表名=object_name(b.rkeyid) ,主键列ID=b.rkey ,主键列名=(SELECT name FROM syscolumns WHERE colid=b.rkey AND id=b.rkeyid) FROM sysobjects a join sysforeignkeys b on a.id=b.constid join sysobjects c on a.parent_obj=c.id where a.xtype='f' AND c.xtype='U'
查询一个表的所有外键: SELECT 主键列ID=b.rkey ,主键列名=(SELECT name FROM syscolumns WHERE colid=b.rkey AND id=b.rkeyid) ,外键表ID=b.fkeyid ,外键表名称=object_name(b.fkeyid) ,外键列ID=b.fkey ,外键列名=(SELECT name FROM syscolumns WHERE colid=b.fkey AND id=b.fkeyid) FROM sysobjects a join sysforeignkeys b on a.id=b.constid join sysobjects c on a.parent_obj=c.id where a.xtype='f' AND c.xtype='U' and object_name(b.rkeyid)='要查询的表名'
Add constraint fk_Spcf_spbh_spbh --约束名
Foreign key(spbh) references Sp(spbh)
on update cascade --级联更新
on delete cascade --级联删除
alter table Spcf
Add constraint fk_Spcf_cfbh_spbh --约束名
Foreign key(spbh) references Sp(spbh)
on update cascade --级联更新
on delete cascade --级联删除
/*
标题:两表通过字段关联进行级联删除。
作者:爱新觉罗·毓华(十八年风雨,守得冰山雪莲花开)
时间:2008-11-20
地点:广东深圳
*/create table ta(id int not null)
create table tb(id int , aid int)
insert into ta values(1)
insert into ta values(2)
insert into tb values(1 , 1)
insert into tb values(2 , 2)
insert into tb values(3 , 1)
go--一、查看原始数据
--ta表的原始数据
select * from ta
/*
id
-----------
1
2
*/
--tb表的原始数据
select * from tb
/*
id aid
----------- -----------
1 1
2 2
3 1
*/--二、看看没有创建级联删除时的情况(删除ta表id=1的数据,看看是否影响tb表)
delete from ta where id = 1
select * from ta
/*
id
-----------
2
*/
select * from tb
/*
id aid
----------- -----------
1 1
2 2
3 1
*/--三、恢复原始数据,创建级联删除,删除ta表id=1的数据,看看是否影响tb表
insert into ta values(1)
--为ta创建主健
alter table ta add constraint pk_ta_id primary key (id)
go
--为tb创建外健,并指定级联删除
alter table tb add constraint fk_tb_aid foreign key (aid) references ta(id) on delete cascade
go
delete from ta where id = 1
select * from ta
/*
id
-----------
2
*/
select * from tb
/*
id aid
----------- -----------
2 2
*/--删除级联约束
alter table tb drop constraint fk_tb_aid
go
--删除测试表
drop table ta , tb
go
add constraint 约束名
foreign key(字段名) references 主表名(字段名)
on delete cascade语法:
Foreign Key
(column[,...n])
references referenced_table_name[(ref_column[,...n])]
[on delete cascade]
[on update cascade]
注释:
column:列名
referenced_table_name:外键参考的主键表名称
ref_name:外键要参考的表的主键列
on delete:删除级联
on update:更新级联
表的外键约束 SELECT 外键表ID=b.fkeyid
,外键表名称=object_name(b.fkeyid)
,外键列ID=b.fkey
,外键列名=(SELECT name FROM syscolumns WHERE colid=b.fkey AND id=b.fkeyid)
,主键表ID=b.rkeyid
,主键表名=object_name(b.rkeyid)
,主键列ID=b.rkey
,主键列名=(SELECT name FROM syscolumns WHERE colid=b.rkey AND id=b.rkeyid)
FROM sysobjects a
join sysforeignkeys b on a.id=b.constid
join sysobjects c on a.parent_obj=c.id
where a.xtype='f' AND c.xtype='U'
查询一个表的所有外键: SELECT 主键列ID=b.rkey
,主键列名=(SELECT name FROM syscolumns WHERE colid=b.rkey AND id=b.rkeyid)
,外键表ID=b.fkeyid
,外键表名称=object_name(b.fkeyid)
,外键列ID=b.fkey
,外键列名=(SELECT name FROM syscolumns WHERE colid=b.fkey AND id=b.fkeyid)
FROM sysobjects a
join sysforeignkeys b on a.id=b.constid
join sysobjects c on a.parent_obj=c.id
where a.xtype='f' AND c.xtype='U'
and object_name(b.rkeyid)='要查询的表名'