当前位置: 首页 > 面试题库 >

Spring Boot数据库初始化MySQLException的触发器

曹建华
2023-03-14
问题内容

我正在使用Spring JDBC和schema.sql文件使用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 = ^;在属性文件中所提到这里

但是它失败,因为

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

我猜我的问题和[这个问题相同,但是在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=^;进来application.properties并且每一行都结束时,过程/触发器应通过^;
Example 终止,我的问题得到了解决,如下所示:

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 ^;


 类似资料:
  • 本文向大家介绍SpringBoot使用flyway初始化数据库,包括了SpringBoot使用flyway初始化数据库的使用技巧和注意事项,需要的朋友参考一下 概述 Flyway这款数据库版本工具就算大家没有使用过但也略有耳闻了,SpringBoot对该款工具进行集成的框架可以让我们在启动SpringBoot应用时自动去找SQL版本文件进行比对执行,但在迁移或初始化时往往还是需要先手动进行下数据库

  • 我有不使用Flyway的现有数据库postgres,我需要复制它。如何将现有数据库状态移动到新的空数据库?我没有任何迁移sql。所以我期待像Liquibase中的GenerateChangelog这样的命令,但在Flyway中似乎没有这样的命令。

  • 初始化数据 打开MainSetup类,在Daos语句后面插入新建根用户的代码 // 初始化默认根用户 if (dao.count(User.class) == 0) { User user = new User(); user.setName("admin"); user.setPassword

  • 我想为现有的应用程序使用flyway。 应该有两种不同的情况: 1)应用程序安装:DDL和数据库初始化 2) 应用程序更新:迁移数据库 问题是如果我安装版本6.0,我有例如: 如果我将init version设置为V1.0.0,它将执行直到V6_0_0的所有更新,但是在数据库初始化之后,它将跳过所有更新。 要安装一个旧的shema,这样我就可以使用所有udpate脚本,即使对于全新安装也会非常困难

  • 我有带有Spring、Hibernate/JPA和Spring数据的webapp。我为一些实体创建了扩展JpaRepository的存储库,如果某些字段名简单为id(findById)或findByRole(其中Role是enum或findByActive,其中active是给定实体中的布尔字段),那么使用缺省方法如.save(T)或saveAndFlush、findAll甚至findBy都很好。

  • 初始化 Paradox 数据库的驱动程序 当安装 Paradox 数据库的驱动程序时,设置程序会在引擎的 Windows 注册表和 ISAM Formats子键写入一些缺省值。不应直接修改这些设置(除非必要);而应使用应用程序的设置程序来添加、删除、或更改这些设置。下列部分描述 Paradox 数据库驱动程序的初始化和 ISAM Formats 设置。 Paradox 数据库驱动程序在两种模式中的