Я пытаюсь создать ограничение внешнего ключа между двумя таблицами, но после выполнения команды alter mysql создает индекс вместо внешнего ключа.
Я использую hibernate, поэтому изначально я думал, что это проблема спящего режима, но когда я выполняю запрос непосредственно на поведение mysql, это то же самое.
alter table person добавить ограничение FK9ircw28d19mdg5pu8yfg1qs8p адрес внешнего ключа (Address_Id) Адрес (Address_Id)
После выполнения этой команды я получаю следующее в базе данных mysql
Как видите, ограничение добавляется в индексы, а не как внешний ключ.
Hibernate выполняет следующие запросы при создании таблиц:
Hibernate: отбрасывать таблицу, если существует Адрес
Hibernate: drop table if exists hibernate_sequence
Спящий режим: выпадающий стол, если существует человек
Hibernate: create table Address (Address_Id bigint not null, addressLine1 varchar (255), addressLine2 varchar (255), city varchar (255) не null, страна varchar (255) не null, state varchar (255) не null, первичный ключ ( Address_Id)) engine = MyISAM
Hibernate: создать таблицу hibernate_sequence (next_val bigint) engine = MyISAM
Спящий режим: вставить в значения hibernate_sequence (1)
Спящий режим: вставить в значения hibernate_sequence (1)
Hibernate: create table person (Person_Id bigint not null, dob date not null, имя varchar (255) не null, Address_Id bigint, первичный ключ (Person_Id)) engine = MyISAM
Hibernate: изменить таблицу лица добавить ограничение FK9ircw28d19mdg5pu8yfg1qs8p внешний ключ (Address_Id) ссылки Адрес (Address_Id)
Спасибо @Solarflare. Это решило мою проблему. Проблема: механизм MyISAM не поддерживает внешние ключи. Как только я изменил тип двигателя на InnoDB, все работало, как ожидалось.