java - Spring boot schema.sql 不适用于 mysqldump 文件

标签 java mysql spring unit-testing

每次启动集成测试时,Spring Boot 都会自动选择并运行我的 schema.sql 文件。

问题是:
它给了我一个错误

Cannot delete or update a parent row: a foreign key constraint fails.

我可以使用 mysql 命令导入这个文件,没有问题,所以我怀疑 Spring boot 没有使用 mysql 命令来运行脚本。
schema.sqlmysqldump 创建。没有任何修改。
在我执行以下“解决方法”后它起作用了:
1. 去掉 MySQL 特定的关键字/命令,例如 /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
2. 重新排列create table block ,以便以正确的顺序创建表,以避免外键约束错误。

问题: 如何让 Spring boot 像 mysql 一样导入我的 schema.sql 文件?如果我可以 mysqldump 文件并使用它进行测试而不是使用一些“hacky 解决方法”,那就太好了。

谢谢!

最佳答案

添加到 .sql 文件的开头

SET FOREIGN_KEY_CHECKS=0;

最后

SET FOREIGN_KEY_CHECKS=1;

该命令禁用外键检查并将其恢复。

转储只是插入表的所有内容行,但尚未插入相关表。

从转储恢复的 MYSQL 会自动显示这些行。

关于java - Spring boot schema.sql 不适用于 mysqldump 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47918986/

相关文章:

java - 在 eclipse 上向 Tomcat 提供 <Realm/> 信息

java - 用于通用密码的 Java 中的 Mac OS X 钥匙串(keychain)访问

java - 获取一行 HBase 的特定列族中的列

java - 从另一个类访问数据

php - 在 MySQL 表上创建数字顺序索引

php - Laravel 原始数据库插入受影响的行

php - 单引号导致更新 SQL 失败

spring - @ConditionalOnProperty 注释的目的是什么?

java - Spring 5.1.5.RELEASE 我应该如何选择 JVM 版本

spring - 使用 Spring Bean 声明覆盖 Grails 中的服务