Ограничения внешнего ключа отсутствуют после экспорта 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: эти ограничения, включенные в экспорт, проверяют связанное видео об этом
Настройка ограничения внешнего ключа