每次启动集成测试时,Spring Boot 都会自动选择并运行我的 schema.sql 文件。
问题是:
它给了我一个错误
Cannot delete or update a parent row: a foreign key constraint fails.
我可以使用 mysql
命令导入这个文件,没有问题,所以我怀疑 Spring boot 没有使用 mysql
命令来运行脚本。
schema.sql 由mysqldump 创建。没有任何修改。
在我执行以下“解决方法”后它起作用了:
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/