我試圖在MySQL上創建一個觸發器,但是我有一個語法問題,我無法找到它。如果有人有更多的經驗可以幫助我,這將是巨大的(這是我第一次使用MySQL!)...MySQL語法問題
我之所以創建這個觸發器是爲了刪除所有的孤兒「標籤」,它與「service_descriptor」具有多對多的關係(這兩個實體通過service_labels鏈接)。
我的代碼是:提前
CREATE TRIGGER `trg_delete_orphan_label` AFTER DELETE
FOR EACH ROW ON `restdb`.`service_labels`
DELETE FROM `restdb`.`labels`
WHERE EXISTS (SELECT *
FROM old D
LEFT_JOIN `restdb`.`service_labels` SL ON SL.`id_label` = D.`id_label`
AND D.`id_service` = SL.`id_service`
WHERE SL.`id_label` IS NULL
`restdb`.`labels`.`id` = D.SL.`id_label`);
謝謝!
我很高興你發現了一些有用的東西,但我注意到現在觸發器在不同的桌子上。您的解決方案在功能和性能方面與我的解決方案略有不同。你的觸發器正在刪除所有的孤兒,而我的只會刪除新的孤兒行。我的方法也會更快,所以您可能需要考慮。 – 2010-06-17 20:54:16
是的!這是事實......問題在於,當觸發器位於service_labels表中時,即使刪除語句對孤兒的語句正常工作,它也不起作用......這是因爲service_labes表沒有被直接刪除......它在service_descriptor後被cacade刪除... 因爲這個原因,我改變了表格,因此我必須改變邏輯! – Alucard 2010-06-18 15:34:11