sql觸發器刪除資料庫中的級聯記錄
比如,當我們刪除新聞類別的時候,由於外來鍵的原因,我們無法刪除新聞類別下有新聞內容的記錄,但是通過觸發器,我們就可以實現。
delete from category where id=5 --sql刪除語句
create trigger trigcategorydelete --當執行sql刪除語句時,執行觸發器
on category
after delete
as
begin
delete news where caId=(select id from deleted) --刪除對應新聞類別的新聞內容
end
照一般的思維,這樣就可以同時刪除新聞類別和其下的新聞內容,但是這樣執行卻不成功。是因為關鍵字AFTER,AFTER表示在執行SQL刪除語句後,再執行觸發器裡的語句。這樣一來,順序同樣是先刪除新聞再刪除新聞內容,肯定不成功。
改變關鍵字after為instead of
instead of,表示代替delete操作,而沒有真正delete from category where id=5,當category表的刪除時,同時觸發了trigcategorydelete觸發器,但是由於有instead of關鍵字,所以本身並不執行刪除操作,而是執行觸發器裡的sql語句,從而可以替代之前的SQL語句。比如:
create trigger trigcategorydelete
on category
instead of delete
as
begin
declare @id int --定義一個變數id
select @id=id from deleted --從deleted臨時表中,賦值id給變數@id
delete news where caId=@id --先刪除該類別下的所有新聞
delete category where id=@id --然後刪除新聞類別
end
當我們執行 delete from category where id=5時,id=5的類別並沒有真正刪除,而是轉而執行觸發器裡面的SQL語句
關於deleted表:
Deleted表用於儲存 DELETE 和 UPDATE 語句所影響的行的複本。在執行 DELETE 或 UPDATE 語句時,行從觸發器表中刪除,並傳輸到deleted表中。Deleted表和觸發器表通常沒有相同的行。(//最後一句不是怎麼明白啊?) by google
刪除一條記錄時候,他會把刪除的這條記錄放在一張臨時表裡,當你對category表進行刪除時,在SQL返回的結果訊息裡面會提示出你刪除的記錄。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/16436858/viewspace-660249/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- JN專案-觸發器級聯刪除觸發器
- SQL Server資料庫級別觸發器SQLServer資料庫觸發器
- SQL Server 觸發器的修改與刪除SQLServer觸發器
- 檢視oracle 資料庫中的級聯刪除(delete cascade)Oracle資料庫delete
- SQL資料庫觸發器例項SQL資料庫觸發器
- 通過觸發器記錄資料庫連線資訊觸發器資料庫
- 刪除不掉的資料記錄
- 如何刪除oracle庫中相同的記錄Oracle
- 用SQL語言刪除表中的記錄SQL
- ORACLE資料庫刪除表中記錄報record is locked by another userOracle資料庫
- sql 多表關聯刪除表資料SQL
- oracle 批量刪除觸發器Oracle觸發器
- oracle中的級聯刪除(轉)Oracle
- Oracle中審計刪除(DELETE)操作的觸發器Oracledelete觸發器
- MySQL資料庫中刪除重複記錄的方法總結[推薦]MySql資料庫
- MYSQL資料庫表記錄刪除解決方案MySql資料庫
- 用觸發器記錄資料庫使用者登陸資訊觸發器資料庫
- Oracle 刪除表中重複記錄的DELETE SQLOracledeleteSQL
- SQL2K資料庫開發四之刪除資料庫SQL資料庫
- 級聯刪除
- 刪除sql server資料庫中所有資料SQLServer資料庫
- sql server 中刪除內容重複的某條記錄SQLServer
- oracle巧用觸發器提高資料庫安全級別Oracle觸發器資料庫
- JN專案-刪除觸發器的命令觸發器
- Oracle中刪除重複資料的SqlOracleSQL
- SQL Server觸發器建立、刪除、修改、檢視示例步驟SQLServer觸發器
- 資料庫的觸發器的使用資料庫觸發器
- 在SQL Server中快速刪除重複記錄(轉)SQLServer
- 面試題: 資料庫:delete和trancate刪除表記錄的區別面試題資料庫delete
- 找回Oracle中Delete刪除的記錄Oracledelete
- SQL的資料庫操作:新增、更新、刪除、查詢SQL資料庫
- 快速刪除有外來鍵關聯的資料庫的資料資料庫
- MongoDB資料庫中更新與刪除資料MongoDB資料庫
- GBase XDM(單機/分片叢集)資料庫 刪除記錄資料庫
- 利用Sql server 2005的資料庫觸發器開發的資料庫稽核追蹤系統SQLServer資料庫觸發器
- 資料庫開發---常用物件-觸發器資料庫物件觸發器
- SQL Server無法刪除資料庫 "xxx",因為該資料庫當前正在使用(如何刪除一個Sql Server資料庫)SQLServer資料庫
- oracle 快速刪除大批量資料方法(全部刪除,條件刪除,刪除大量重複記錄)Oracle