Spring Boot数据库初始化MySQLException for Trigger

Mas*_*ode 6 java mysql sql-scripts spring-boot

我正在使用 Spring Boot 数据库初始化,使用 Spring JDBC 和 schema.sql 文件。我正在使用 MYSQL

如果我在 schema.sql 中有简单的表创建,如下所示,它可以正常工作

CREATE TABLE Persons
(
PersonID int,
LastName varchar(255),
FirstName varchar(255),
Address varchar(255),
City varchar(255)
);
Run Code Online (Sandbox Code Playgroud)

但是当我添加一个触发器时,它在 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 ^;
Run Code Online (Sandbox Code Playgroud)

我用过 spring.datasource.separator=^; 在此处提到的属性文件中

但它失败了,但有例外

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
Run Code Online (Sandbox Code Playgroud)

我想我的问题与这个问题相同,但那是在 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 ;
Run Code Online (Sandbox Code Playgroud)

它给出了同样的错误

 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
Run Code Online (Sandbox Code Playgroud)

Mas*_*ode 5

spring.datasource.separator=^;当我添加并且application.properties程序/触发器之外的每一行都应以示例终止时,我的问题得到解决^; ,如下所示:

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 ^;
Run Code Online (Sandbox Code Playgroud)