10

我使用以下脚本在 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 约束?在其他情况下不是?

4

2 回答 2

4

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

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

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

KEY是指FK吗?

KEY id_user (id_user),这里指的是一个索引。

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

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

我在哪里做错了?

MySQLSHOW CREATE TABLE users_x_activities将包含外键约束。

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

于 2013-07-26T20:44:30.017 回答
1

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

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

设置外键约束

于 2016-02-16T15:55:21.533 回答