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

时间:2014-01-06 18:17:37

标签: java mysql triggers syntax-error

我一直在尝试用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_logtable_nameactiontime)VALUES('nc_censor'附近使用正确的语法在第1行

我没有在phpMyAdmin,服务器控制台或类似的东西中运行它。我需要在String中从java运行它。我在课堂上打电话给this.mysql.update(trigger);“基本上”运行它。

我已经尝试在ssh mysql中运行create trigger string,但它也不起作用。

1 个答案:

答案 0 :(得分: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());