[英]BEFORE DELETE trigger
如何停止刪除一個具有觸發器的另一個表(沒有FK)中的PK? CALL cannot_delete_error會停止刪除嗎? 這是我到目前為止所得到的。
CREATE TRIGGER T1
BEFORE DELETE ON Clients
FOR EACH ROW
BEGIN
SELECT Client, Ref FROM Clients K, Invoice F
IF F.Client = K.Ref
CALL cannot_delete_error
END IF;
END
使用'INSTEAD OF DELETE'
觸發器。
基本上,您可以評估是否應該刪除該項目。 在觸發器中,您最終可以決定刪除項目,如:
--test to see if you actually should delete it.
--if you do decide to delete it
DELETE FROM MyTable
WHERE ID IN (SELECT ID FROM deleted)
另一方面,請記住,'已刪除'表可能包含多行。
另一方面,如果可能的話,盡量在db之外做這個! 或者使用前面的查詢。 觸發器非常難以維護。 簡單的查詢或函數(例如dbo.udf_CanIDeleteThis()')可以更加通用。
如果您使用的是MySQL 5.5或更高版本,則可以使用SIGNAL
DELIMITER //
CREATE TRIGGER tg_fk_check
BEFORE DELETE ON clients
FOR EACH ROW
BEGIN
IF EXISTS(SELECT *
FROM invoices
WHERE client_id = OLD.client_id) THEN
SIGNAL sqlstate '45000'
SET message_text = 'Cannot delete a parent row: child rows exist';
END IF;
END//
DELIMITER ;
這是SQLFiddle演示。 取消注釋上次刪除並單擊“ Build Schema
以查看其運行情況。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.