phpmyadmin导出后缺少外键约束

时间:2013-07-26 20:26:20

标签: mysql sql phpmyadmin foreign-keys key

我使用以下脚本在mysql中创建一个表:

  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导出创建的表时,我获得以下脚本

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吗?似乎在新生成的脚本中不再引用两个表utenteattivita。我在哪里做错了?

编辑

在phpMyAdmin中,配置表的导出我找到了“显示外键关系”选项 如果我标记了这个选项,我还在脚本中添加了这段代码

--
-- 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约束?在其他情况下不?

2 个答案:

答案 0 :(得分:4)

所以问题是:我的外键约束在哪里?

它们在数据库中定义。 SHOW CREATE TABLE users_x_activities的输出将包括外键约束定义。

外键约束的定义可能出现在生成的脚本末尾的单独的ALTER TABLE语句中。

KEY是指FK吗?

没有。 KEY id_user (id_user)这里指的是索引。

似乎在新生成的脚本中不再引用两个表utente和attivita。

是的,你是对的。外键约束不包含在CREATE TABLE语句中。

我在哪里做错了?

MySQL SHOW CREATE TABLE users_x_activities将包含外键约束。

外键约束可能包含在phpMyAdmin生成的脚本中,但是在脚本的末尾,在单独的ALTER TABLE语句中。

答案 1 :(得分:1)

使用phpmyadmin管理表时有两种类型的约束:

  • internal:当您使用phpmyadmin设计器设置约束时,例如存储为内部的约束,这些约束将不包含在导出中。
  • innoDB:导出中包含的这些约束检查了关于它的链接视频

Setting up a foreign key constraint