gpt4 book ai didi

java - MySQL:创建触发器总是给我语法错误

转载 作者:行者123 更新时间:2023-11-30 00:51:11 27 4
gpt4 key购买 nike

我一直在尝试从 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: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'BEGIN INSERT INTO ndb_log (table_name, action, time) VALUES ('nc_censor' at line 1

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

我尝试在 ssh mysql 中运行创建触发器字符串,但它也不起作用。

最佳答案

有两件事:(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());

关于java - MySQL:创建触发器总是给我语法错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20956529/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com