2015-11-12 120 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