Flyway 和 MariaDB:SQLException 外键约束形成不正确
Flyway & MariaDB: SQLException Foreign key constraint is incorrectly formed
我目前正在尝试从生成我的 ddl 方案的 Hibernate 切换到 Flyway 迁移。我生成了 V1__Initial.sql 脚本 。当我 运行 它在内存中的 H2 数据库上时,一切正常。但是当我尝试在 MariaDB 上 运行 它时,我得到以下异常:
Migration V1__Initial.sql failed
--------------------------------
SQL State : HY000
Error Code : 1005
Message : (conn=130) Can't create table `booking`.`booking_cancelled_event` (errno: 150 "Foreign key constraint is incorrectly formed")
Location : db/migration/V1__Initial.sql (C:\code\ajt\backend\target\classes\db\migration\V1__Initial.sql)
Line : 463
Statement : alter table booking_cancelled_event
add constraint FKnxiyj0m730pl9ol2y4qng7577
foreign key (cancelled_booking_id)
references cancelled_internal_booking
来自V1__Initial.sql的对应部分:
alter table booking_cancelled_event
add constraint FKnxiyj0m730pl9ol2y4qng7577
foreign key (cancelled_booking_id)
references cancelled_internal_booking;
来自SHOW ENGINE InnoDB STATUS;
的输出:
------------------------
LATEST FOREIGN KEY ERROR
------------------------
2019-06-23 21:07:30 0x1974 Error in foreign key constraint of table `xxx`.`booking_cancelled_event`:
Alter table `booking`.`booking_cancelled_event` with foreign key constraint failed. Parse error in '
foreign key (cancelled_booking_id)
references cancelled_internal_booking' near '
references cancelled_internal_booking'.
版本:
MariaDB 10.4
Spring 引导 2.1.5.RELEASE
Flyway 5.2.4
根据 MariaDB 文档的 ALTER TABLE 页,ADD CONSTRAINT
的语法应该是:
ADD [CONSTRAINT [symbol]]
FOREIGN KEY [IF NOT EXISTS] [index_name] (index_col_name,...)
reference_definition
根据 MariaDB 文档的 CREATE TABLE 页面,reference_definition
的语法应该是:
REFERENCES tbl_name (index_col_name,...)
[MATCH FULL | MATCH PARTIAL | MATCH SIMPLE]
[ON DELETE reference_option]
[ON UPDATE reference_option]
所以您遇到的解析错误很可能是因为您在 cancelled_internal_booking
table 名称后遗漏了一个 (index_col_name,...)
。
我目前正在尝试从生成我的 ddl 方案的 Hibernate 切换到 Flyway 迁移。我生成了 V1__Initial.sql 脚本
Migration V1__Initial.sql failed
--------------------------------
SQL State : HY000
Error Code : 1005
Message : (conn=130) Can't create table `booking`.`booking_cancelled_event` (errno: 150 "Foreign key constraint is incorrectly formed")
Location : db/migration/V1__Initial.sql (C:\code\ajt\backend\target\classes\db\migration\V1__Initial.sql)
Line : 463
Statement : alter table booking_cancelled_event
add constraint FKnxiyj0m730pl9ol2y4qng7577
foreign key (cancelled_booking_id)
references cancelled_internal_booking
来自V1__Initial.sql的对应部分:
alter table booking_cancelled_event
add constraint FKnxiyj0m730pl9ol2y4qng7577
foreign key (cancelled_booking_id)
references cancelled_internal_booking;
来自SHOW ENGINE InnoDB STATUS;
的输出:
------------------------
LATEST FOREIGN KEY ERROR
------------------------
2019-06-23 21:07:30 0x1974 Error in foreign key constraint of table `xxx`.`booking_cancelled_event`:
Alter table `booking`.`booking_cancelled_event` with foreign key constraint failed. Parse error in '
foreign key (cancelled_booking_id)
references cancelled_internal_booking' near '
references cancelled_internal_booking'.
版本:
MariaDB 10.4
Spring 引导 2.1.5.RELEASE
Flyway 5.2.4
根据 MariaDB 文档的 ALTER TABLE 页,ADD CONSTRAINT
的语法应该是:
ADD [CONSTRAINT [symbol]]
FOREIGN KEY [IF NOT EXISTS] [index_name] (index_col_name,...)
reference_definition
根据 MariaDB 文档的 CREATE TABLE 页面,reference_definition
的语法应该是:
REFERENCES tbl_name (index_col_name,...)
[MATCH FULL | MATCH PARTIAL | MATCH SIMPLE]
[ON DELETE reference_option]
[ON UPDATE reference_option]
所以您遇到的解析错误很可能是因为您在 cancelled_internal_booking
table 名称后遗漏了一个 (index_col_name,...)
。