В настоящее время я пытаюсь переключиться с 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 `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'.
Версии:
МарияДБ 10.4
Spring Boot 2.1.5.РЕЛИЗ
Пролетный путь 5.2.4
@RickJames сценарий не выполняется в том же порядке, в котором они написаны в сценарии? Первыми операторами являются операторы создания таблиц, а внешние ключи определяются позже!





Согласно странице ИЗМЕНИТЬ ТАБЛИЦУ документации MariaDB синтаксис ADD CONSTRAINT должен быть:
ADD [CONSTRAINT [symbol]]
FOREIGN KEY [IF NOT EXISTS] [index_name] (index_col_name,...)
reference_definition
и, согласно странице СОЗДАТЬ ТАБЛИЦУ документации 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.
Ошибка, которую я совершил, заключалась в том, что я запустил создание jpa ddl для H2 в памяти, а затем попытался применить команды в моем скрипте Flyway к MaraiDB.
Либо запустите операторы
CREATE TABLEв правильном порядке (для FK), либо отключите, а затем снова включите FK.