Flyway & MariaDB: SQLException Ограничение внешнего ключа сформировано неправильно - PullRequest
1 голос
/ 23 июня 2019

В настоящее время я пытаюсь перейти с Hibernate, генерирующего мою схему ddl, на миграцию 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 `spozing`.`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

  • Пружинный пыльник 2.1.5.RELEASE

  • пролет 5.2.4

1 Ответ

2 голосов
/ 23 июня 2019

Согласно странице ALTER TABLE документации MariaDB, синтаксис ADD CONSTRAINT должен быть следующим:

ADD [CONSTRAINT [symbol]]
    FOREIGN KEY [IF NOT EXISTS] [index_name] (index_col_name,...)
    reference_definition

и согласно CREATE TABLE На странице документации MariaDB синтаксис reference_definition должен быть следующим:

REFERENCES tbl_name (index_col_name,...)
  [MATCH FULL | MATCH PARTIAL | MATCH SIMPLE]
  [ON DELETE reference_option]
  [ON UPDATE reference_option]

Таким образом, ошибка синтаксического анализа, с которой вы сталкиваетесь, вероятнее всего из-за того, что вы пропустили (index_col_name,...) после cancelled_internal_booking имени таблицы.

...