首页 文章

MySQL:创建一个触发器不断给我语法错误

提问于
浏览
0

我一直在尝试从java创建一个触发器,它只是不起作用 .

String trigger = String.format("CREATE TRIGGER `%s` AFTER %s ON %s BEGIN INSERT INTO `ndb_log` (`table_name`, `action`, `time`) VALUES ('%s', '%s', UNIX_TIMESTAMP()) END;",
            name, this.event.toUppercase(), this.table, this.table, this.event.toLowercase());

CREATE TRIGGER `onnc_censorINSERT` AFTER INSERT ON nc_censor BEGIN INSERT INTO `ndb_log` (`table_name`, `action`, `time`) VALUES ('nc_censor', 'insert', UNIX_TIMESTAMP()); END;

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:SQL语法中有错误;检查与MySQL服务器版本对应的手册,以便在'BEGIN INSERT INTO ndb_log(table_name,action,time)VALUES(第1行'nc_censor')附近使用正确的语法

我没有在phpMyAdmin,服务器控制台或类似的东西中运行它 . 我需要在 String 中从java运行它 . 我在我的 class 中调用 this.mysql.update(trigger); ,"basically"运行它 .

我试过在ssh mysql中运行create trigger string,但它也不起作用 .

1 回答

  • 0

    两件事:(1)你错过了触发器声明的FOR EACH ROW子句; (2)你不需要BEGIN和END,因为你的触发器只执行一个语句 . 试试这个:

    CREATE TRIGGER `onnc_censorINSERT` AFTER INSERT ON nc_censor FOR EACH ROW INSERT INTO `ndb_log` (`table_name`, `action`, `time`) VALUES ('nc_censor', 'insert', UNIX_TIMESTAMP());
    

相关问题