【发布时间】:2017-07-29 05:25:03
【问题描述】:
我正在使用带有 schema.sql 文件的 Spring JDBC 使用 Spring Boot 数据库初始化。我正在使用 MYSQL
如果我在 schema.sql 中有如下简单的表创建,它可以正常工作
CREATE TABLE Persons
(
PersonID int,
LastName varchar(255),
FirstName varchar(255),
Address varchar(255),
City varchar(255)
);
但是当我添加一个在 MySQL Workbench 中正确运行的触发器时
DROP TRIGGER IF EXISTS Persons_log_update;
CREATE TRIGGER Persons_log_update
BEFORE UPDATE ON Persons
FOR EACH ROW
BEGIN
INSERT INTO Personshistory(PersonID,LastName,FirstName,Address,City)
values(OLD.PersonID,OLD.LastName,OLD.FirstName,OLD.Address,OLD.City);
END ^;
我用过 spring.datasource.separator=^;在属性文件中提到here
但它失败了,异常为
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 'CREATE TRIGGER Persons_log_update BEFORE UPDATE ON Persons FOR EACH ROW BE' at line 1
我想我的问题与this 的问题相同,但在 postgresql 中。
编辑: 如果我删除 spring.datasource.separator=^;来自属性文件并位于光标下方
DROP TRIGGER IF EXISTS Persons_log_update;
DELIMITER $$
CREATE TRIGGER Persons_log_update
BEFORE UPDATE ON Persons
FOR EACH ROW
BEGIN
INSERT INTO Personshistory(PersonID,LastName,FirstName,Address,City)
values(OLD.PersonID,OLD.LastName,OLD.FirstName,OLD.Address,OLD.City);
END$$
DELIMITER ;
同样的错误
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 'DELIMITER $$ CREATE TRIGGER Persons_log_update BEFORE UPDATE ON Persons FO' at line 1
【问题讨论】:
-
您确定
spring.datasource.separator=^不会替换您的分号作为分隔符吗?如果去掉这个属性配置会出现什么样的错误? -
@Jagger 根据您的建议删除了 spring.datasource.separator=^ 但得到了类似的错误。检查更新的问题
标签: java mysql spring-boot sql-scripts