Dan*_*aum 2 mysql sql windows foreign-keys
这是我尝试执行的确切 SQL(在 Windows 上使用 SQLYog 作为 MySQL 客户端):
DROP TABLE IF EXISTS `test`;
CREATE TABLE `test` (
`id` INT (11) NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`id`)
) ENGINE = INNODB ;
DROP TABLE IF EXISTS `temp`;
CREATE TEMPORARY TABLE `temp` (
dish_id INT (11) NOT NULL,
user_id INT (11) NOT NULL,
UNIQUE KEY (dish_id, user_id),
FOREIGN KEY `test` (dish_id) REFERENCES test (id)
) ENGINE = INNODB ;
Run Code Online (Sandbox Code Playgroud)
这是尝试创建时收到的确切错误temp:
Error Code: 1215
Cannot add foreign key constraint
Run Code Online (Sandbox Code Playgroud)
在我看来,一切都井井有条——两个相关密钥的数据类型和签名是相同的;这些名字似乎是犹太洁食;到底是怎么回事?
我究竟做错了什么?为什么无法创建外键约束?
这是因为您正在尝试向临时表添加外键约束。
从手册:
外键关系涉及一个包含中心数据值的父表,以及一个具有相同值的子表指向其父表。FOREIGN KEY 子句在子表中指定。父表和子表必须使用相同的存储引擎。它们不能是临时表。
http://dev.mysql.com/doc/refman/5.5/en/create-table-foreign-keys.html
编辑:尝试使用永久表。有用。
DROP TABLE IF EXISTS `test`;
CREATE TABLE `test` (
`id` INT (11) NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`id`)
) ENGINE = INNODB ;
DROP TABLE IF EXISTS `temp`;
CREATE TABLE `temp` (
dish_id INT (11) NOT NULL,
user_id INT (11) NOT NULL,
UNIQUE KEY (dish_id, user_id),
FOREIGN KEY `test` (dish_id) REFERENCES test (id)
) ENGINE = INNODB ;
Run Code Online (Sandbox Code Playgroud)