2015-11-12 123 views
0

我想重新創建一個我以前創建和刪除的觸發器。不能創建/刪除觸發器

刪除SQL:

DROP TRIGGER openitdb.trgLicenseInsert; 

刪除錯誤:

Error Code: 1360. Trigger does not exist

創建SQL:

DELIMITER $$ 

CREATE TRIGGER trgLicenseInsert 
AFTER UPDATE ON SoftwareLicenseDetails 
FOR EACH ROW BEGIN 

INSERT INTO audithistory (audit_date, audit_field, audit_oldvalue, audit_changelog_fk, audit_newvalue, audit_assetid_fk) VALUES (Now(),'Software License Details', (SELECT Title FROM SoftwareTypes WHERE ID = (SELECT SoftwareNameFK 
FROM SoftwareLicenseDetails 
WHERE ComputerFK=new.ComputerFK 
ORDER BY ID Desc 
LIMIT 1)), (SELECT MAX(ID) FROM Changelog as ChangelogID), 'License Added',new.ComputerFK); 

END; $$ 
DELIMITER ; 

創建錯誤:

Error Code: 1359. Trigger already exists

觸發器不會顯示在MySQL Workbench中,但不知何故它被標記爲已存在。

SoftwareLicenseDetails table information

SHOW TRIGGERS

enter image description here

我怎樣才能解決這個問題呢?我錯過了什麼嗎?

編輯:

我試圖結合兩個觸發器,但我在第6行得到一個錯誤(IF new.Flag = 0 ..)

DELIMITER $$ 

CREATE TRIGGER trgSoftwareLicenseDetails 
AFTER UPDATE ON SoftwareLicenseDetails 
FOR EACH ROW BEGIN 
IF new.Flag = 0 THEN 
    INSERT INTO audithistory (audit_date, audit_field, audit_oldvalue, audit_changelog_fk, audit_newvalue, audit_assetid_fk) VALUES (Now(),'Software License Details', (SELECT Title FROM SoftwareTypes WHERE ID = 
    (SELECT SoftwareNameFK FROM SoftwareLicenseDetails 
    WHERE ComputerFK=new.ComputerFK 
    ORDER BY ID Desc 
    LIMIT 1)), (SELECT MAX(ID) FROM Changelog as ChangelogID), 'License Added',new.ComputerFK); 
FROM SoftwareLicenseDetails 
WHERE ComputerFK=new.ComputerFK 
ORDER BY ID Desc 
LIMIT 1)), (SELECT MAX(ID) FROM Changelog as ChangelogID), 'License Added',new.ComputerFK); 
ELSE IF new.Flag = 1 THEN 
    INSERT INTO audithistory (audit_date, audit_field, audit_oldvalue, audit_changelog_fk, audit_newvalue, audit_assetid_fk) VALUES (Now(),'Software License Details', 'N/A', (SELECT MAX(ID) FROM Changelog as ChangelogID), 'License Deleted',old.ComputerFK); 
END IF; 
END; $$ 
DELIMITER ; 
+0

也許問題到工作臺?嘗試在MySQL控制檯中進行此操作。 –

回答

0

根據該節目的觸發器命令trgLicenseDelete觸發器附加到更新事件之後。但是,您嘗試通過將trgLicenseInsert附加到同一個事件(更新後)來創建trgLicenseInsert,因此,儘管mysql的名稱不同,但它認爲trgLicenseInsert觸發器是重複的。顯然,你不能刪除一個不存在的名字的觸發器。

如果兩個觸發器都需要在更新後運行,那麼我建議您將它們的功能合併到一個觸發器中,或者您需要將2個觸發器附加到不同的事件。

但是,也許你使用的是舊版本的MySQL,因爲新版本應該產生不同的錯誤消息,如果重複是由於同一事件,而不是相同的名稱,請參閱mysql bug 10946

+0

我試圖將兩個觸發器合併爲1,但在第6行出現錯誤。請使用新代碼查看更新後的問題。 – Brian

+0

我很抱歉,但這是一個不同的問題。你應該單獨提出。 – Shadow