級聯刪除練習
--創建用戶表(主表)
create table UserInfo
(
UserId int identity(1,1) primary key ,
UserName varchar(20), --用戶名
password varchar(20) not null --密碼
)
--創建用戶詳情表(附表)
create table UserDetails
(
id int identity(1,1) primary key,
name varchar(50) not null, --真實姓名
userId int
--方法一: 創建用於級聯刪除的約束
--foreign key (userId) references UserInfo(UserId) on delete cascade
)
--方法二:創建用於級聯刪除的約束
alter table UserDetails --約束對象UserDetails
add constraint [FK_UserDetails_UserInfo] --添加約束,命名為FK_UserDetails_UserInfo
foreign key(UserId) references UserInfo(UserId) -- UserDetails表的UserId列引用UserInfo表UserId列的值
on delete cascade --級聯刪除
--插入測試數據
insert UserInfo values ('ly','jeff')
insert UserInfo values('wzq','wzqwzq')
insert UserInfo values('lg','lglg')
insert UserDetails values('李四',1)
insert UserDetails values('王五',2)
insert UserDetails values('劉六',3)
--測試級聯刪除
--刪除 UserInfo 主表中UserID=1的同時刪除UserDetails從表中UserId=1 的內容
delete from userInfo where UserId=1
--刪除userDetails從表中UserId=1 對主表無影響
delete from userDetails where UserId=1
--刪除用於級聯刪除的約束
ALTER TABLE [dbo].[UserDetails] DROP CONSTRAINT [FK_UserDetails_UserInfo]
--查詢
select *from UserInfo
select *from UserDetails
sqlserver 支持級聯刪除語法
alter table 外鍵表名稱
add constraint 約束名稱
Foreign Key(column[,...n])
references referenced_table_name[(ref_column[,...n])]
[on delete cascade]
注釋
column:外鍵表的列名
referenced_table_name:外鍵參考的主鍵表名稱
ref_name:外鍵要參考的表的主鍵列
on delete:刪除級聯
