Mysql如果不存在则创建触发器

lio*_*ior 5 mysql trigger

我有一个创建触发器的脚本,我想多次运行它,如果触发器已经存在,则需要跳过创建部分。

mysql触发器中是否有“如果不存在则创建”?

我试过 :

    IF NOT EXISTS ((SELECT TRIGGER_NAME
        FROM information_schema.triggers
        WHERE TRIGGER_SCHEMA = 'xxx_admin' AND TRIGGER_NAME = 'test_AFTER_UPDATE')) 
        THEN
    CREATE DEFINER=`root`@`localhost` TRIGGER `xxx_admin`.`test_AFTER_UPDATE` AFTER UPDATE ON `test` FOR EACH ROW
        BEGIN
        INSERT INTO auditTest 
        select *, now() from test where id = NEW.id;
        END;
  END IF;
Run Code Online (Sandbox Code Playgroud)

我得到:语法错误“'IF'在此位置不是有效输入

Rol*_*DBA 3

没有CREATE TRIGGER“如果不存在”

存在DROP TRIGGER IF EXISTS

您必须按如下方式执行触发器的创建:

USE xxx_admin
DELIMITER $$
DROP TRIGGER IF EXISTS test_AFTER_UPDATE $$
CREATE DEFINER=`root`@`localhost` TRIGGER `xxx_admin`.`test_AFTER_UPDATE`
AFTER UPDATE ON `test` FOR EACH ROW
BEGIN
    INSERT INTO auditTest 
    select *, now() from test where id = NEW.id;
END $$
DELIMITER ;
Run Code Online (Sandbox Code Playgroud)

试一试 !!!

至于您的错误,像这样使用 IF 在 CLI 中是无效的。