2017年計算機(jī)三級數(shù)據(jù)庫輔導(dǎo):SQLServer2000級聯(lián)刪除的問題列舉

字號:


    1.建立四個表:
    
create table client(   c_id int identity(1,1),  
 c_name nvarchar(255) unique, 
  c_pass nvarchar(255),  
 c_sex bit,   c_mail varchar(255),  
 c_qq varchar(255),   primary key(c_id)   );   
create table album_kind(   k_id int identity(1,1),  
 k_name nvarchar(255),   k_desc nvarchar(255),  
 primary key(k_id)   );  
 create table album(   a_id int identity(1,1),  
 a_name nvarchar(255),   
a_desc nvarchar(255),  
 a_create_date datetime,  
 a_times bigint,  
 c_id int,   k_id int,   
primary key(a_id),   
foreign key(c_id) references 
client(c_id) on delete cascade,   
foreign key(k_id) references
 album_kind(k_id) on delete cascade   );  
 create table album_word(
   aw_id int identity(1,1),  
 aw_title nvarchar(255),   
aw_content nvarchar(500),  
 commit_date datetime,   a_id int,  
 c_id int,   primary key(aw_id),  
 foreign key(a_id) references album(a_id) on delete cascade,  
 foreign key(c_id) references client(c_id) on delete cascade   );

    這時(創(chuàng)建第四個表的時候)SQL Server2000級聯(lián)刪除會報告錯誤:
    將 FOREIGN KEY 約束 'FK_album_word_album' 引入表 'album_word' 中將導(dǎo)致循環(huán)或多重級聯(lián)路徑。請指定 ON DELETE NO ACTION 或 ON UPDATE NO ACTION,或修改其它 FOREIGN KEY 約束。[Microsoft][ODBC SQL Server Driver][SQL Server]未能創(chuàng)建約束。請參閱前面的錯誤信息。
    2.這時候我們?nèi)サ舻谒膫€表中的級聯(lián)刪除:"on delete cascade"
    再次執(zhí)行。。。。通過
    3.創(chuàng)建一個觸發(fā)器可以解決這個問題(接以上1.2步):
    
CREATE TRIGGER album_word_client ON client  
 FOR INSERT, UPDATE, DELETE   AS   
delete album_word from album_word
 join deleted on album_word.c_id = deleted.c_id

    完成!
    語法:create trigger 隨便一個名稱(比如b_a) on 表a for delete as delete 表b from 表b join deleted on 表b.a表外鍵=deleted.a表主鍵(當(dāng)刪除a中某條記錄,b中相關(guān)聯(lián)記錄也會相應(yīng)刪除)