我正在使用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 数据库驱动程序在两种模式中的