Ограничения внешнего ключа отсутствуют после экспорта phpmyadmin

Я создаю таблицу в mysql, используя следующий script:

  CREATE TABLE IF NOT EXISTS users_x_activities(
  id int NOT NULL auto_increment, 
  id_user int unsigned NOT NULL,
  id_attivita int unsigned NOT NULL,
  PRIMARY KEY (id),
  FOREIGN KEY (id_user) REFERENCES utente(id),
  FOREIGN KEY (id_attivita) REFERENCES attivita(id)
  ) ENGINE = INNODB;

Когда я экспортирую созданную таблицу из phpMyAdmin, я получаю следующее script

CREATE TABLE IF NOT EXISTS `users_x_activities` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `id_user` int(10) unsigned NOT NULL,
  `id_attivita` int(10) unsigned NOT NULL,
  PRIMARY KEY (`id`),
  KEY `id_user` (`id_user`),
  KEY `id_attivita` (`id_attivita`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

Итак, вопрос: где мои внешние ограничения? KEY относится к FK? Кажется, что две таблицы utente и attivita больше не ссылаются в новом сгенерированном script. где я делаю неправильно?

EDIT

В phpMyAdmin, настраивая экспорт таблицы, я нашел опцию "Отображать внешние отношения ключей", Если я отмечу эту опцию, я также сохраню этот код в script

--
-- RELATIONS FOR TABLE `users_x_activity`:
--   `id_user`
--       `utente` -> `id`
--   `id_attivita`
--       `attivita` -> `id`
--

--
-- Constraints for dumped tables
--

--
-- Constraints for table `users_x_activity`
--
ALTER TABLE `users_x_activity`
  ADD CONSTRAINT `users_x_activities_ibfk_1` FOREIGN KEY (`id_user`) REFERENCES `utente` (`id`),
  ADD CONSTRAINT `users_x_activities_ibfk_2` FOREIGN KEY (`id_attivita`) REFERENCES `attivita` (`id`);

Это означает, что, если я добавлю параметр "Отобразить отношение внешнего ключа", я получаю также ограничения FK? в другом случае нет?

Ответ 1

Итак, вопрос: где мои ограничения внешнего ключа?

Они определены в базе данных. Выход из SHOW CREATE TABLE users_x_activities будет включать определения ограничений внешнего ключа.

Определения ограничений внешнего ключа могут появляться в отдельных операторах ALTER TABLE в конце сгенерированного script.

имеет ли KEY ссылку на FK?

Нет. KEY id_user (id_user) здесь относится к индексу.

Кажется, что две таблицы utente и attivita больше не ссылаются на новый созданный script.

Да, вы правы. Ограничения внешнего ключа не включены в оператор CREATE TABLE.

, где я делаю неправильно?

MySQL SHOW CREATE TABLE users_x_activities будет включать ограничения внешнего ключа.

Ограничения внешнего ключа, вероятно, включены в script, сгенерированные phpMyAdmin, но в конце script в отдельных операциях ALTER TABLE.

Ответ 2

При управлении таблицами с помощью phpmyadmin существует два типа ограничений:

  • internal: когда вы устанавливаете ограничения с дизайном phpmyadmin, например, ограничения, хранящиеся как внутренние, которые не будут включены в экспорт.
  • innoDB: эти ограничения, включенные в экспорт, проверяют связанное видео об этом

Настройка ограничения внешнего ключа