【问题标题】:Alter table not adding foreign key MYSQL更改表不添加外键 MYSQL
【发布时间】:2017-08-02 03:01:00
【问题描述】:

当我执行以下操作时,它看起来像是设置了一个常规 KEY,而不是外键:

ALTER TABLE `dev1_IMGStoreTmpComponents`
ADD CONSTRAINT `con_fk_templates`
FOREIGN KEY `fk_templates`(`templateId`)
REFERENCES `dev1_IMGStoreTemplates`(`templateId`)

SQL 运行成功。

然后我运行这个:

SHOW CREATE TABLE `dev1_IMGStoreTmpComponents`;

 CREATE TABLE `dev1_IMGStoreTmpComponents` (
 `componentId` int(10) unsigned NOT NULL AUTO_INCREMENT,
 `name` varchar(100) COLLATE utf8mb4_unicode_520_ci NOT NULL,
 `description` varchar(250) COLLATE utf8mb4_unicode_520_ci DEFAULT NULL,
 `templateId` int(10) unsigned NOT NULL,
 `type` char(3) COLLATE utf8mb4_unicode_520_ci NOT NULL,
 `layer` tinyint(3) unsigned DEFAULT NULL,
 `posx` mediumint(8) unsigned NOT NULL,
 `posy` mediumint(8) unsigned NOT NULL,
 `width` mediumint(8) unsigned NOT NULL,
 `height` mediumint(8) unsigned NOT NULL,
 `settings` text COLLATE utf8mb4_unicode_520_ci,
 PRIMARY KEY (`componentId`),
 UNIQUE KEY `componentId` (`componentId`,`templateId`),
 KEY `con_fk_templates` (`templateId`)
) ENGINE=MyISAM AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_520_ci COMMENT='Template Components'

为什么我在 Create 表中看不到 CONSTRAINT?

【问题讨论】:

标签: mysql


【解决方案1】:

MyISAM 存储引擎不支持外键约束。

ENGINE=MYISAM 

InnoDB 存储引擎支持引用完整性约束。 (引用表和被引用表都需要用 InnoDB 存储引擎定义。)

ENGINE=INNODB

MySQL 确实接受 MyISAM 表的外键约束语法,但 MySQL 忽略外键。接受该语法的最可能原因是使从其他数据库迁移 DDL 更容易。

【讨论】:

  • 啊,好的。这就说得通了。现在我可以停止为此而努力了。谢谢!
猜你喜欢
  • 2014-12-16
  • 2016-12-10
  • 2011-08-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多