Mysql phpmyadmin导出后缺少外键约束

Mysql phpmyadmin导出后缺少外键约束,mysql,sql,phpmyadmin,foreign-keys,key,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), FOREIG

我使用以下脚本在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 ;
所以问题是:我的外键约束在哪里?
键是否指FK?似乎新生成的脚本中不再引用两个表
utete
attivita
。我哪里做错了

编辑

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

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

它们在数据库中定义。
SHOW CREATE TABLE users\u x\u activities
的输出将包括外键约束定义

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

键是否指FK?

否。
KEY id\u user(id\u user)
这里指的是索引

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

是的,你说得对。CREATETABLE语句中不包括外键约束

我哪里做错了?

MySQL
SHOW CREATE TABLE users\u x\u活动将包含外键约束


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

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

  • 内部:使用phpmyadmin designer设置约束(例如,存储为内部的约束)时,将不包括在导出中
  • innoDB:这些限制包含在导出检出链接视频中

phpmyadmin不是在create table语句之后添加所有表约束,而不是在create table语句中添加吗?是否检查了脚本末尾的添加约束命令?@BlaiseSwanwick我已编辑了我的问题。在第一个生成的脚本中,我没有获得其他语句。使用新选项,我获得了其他声明(请参见编辑)谢谢@spencer。使用Display Foreign Key Relationship(显示外键关系)(如编辑中所述),我获得了生成外键约束的语句?但是如果我导出带有外键和数据的表,则在插入FK约束下的数据时失败。如果子表在父表之前填充,则会发生这种情况。但是,如果我在导出时不使用外键签入,我将得到不使用FKs的表。如何解决?有几个选择。1) 以不违反外键的顺序加载表。2) 如果您知道这些行没有违反任何外键约束,那么可以强制MySQL在会话中禁用外键检查。执行
SET foreign\u key\u checks=0
,然后运行insert语句,完成后,通过执行
SET foreign\u key\u checks=1
(这基本上免除了MySQL对数据完整性的任何责任;会话负责保证完整性。3)或删除外键,运行插入,然后重新添加外键。(在大型表上重新添加外键可能会花费很长的时间,并且在持续时间内保持锁定。)您指的是什么会话?我说的是有或没有FK定义的导出文件。解决方案是,如果FK定义在所有表定义和插入之后。我可以在phpmyadmin中设置它吗?优秀的视频教程!但有没有办法将数据库类型从MyISAM更改为InnoDB?默认值是myPhpAdmin中的MyISAM。。。