【发布时间】:2014-10-22 22:23:33
【问题描述】:
我在使用 2 张桌子时遇到问题。
我刚刚使用以下 SQL 代码创建了一个名为“ejemplar”的表:
CREATE TABLE ejemplar
(
id_revista INT NOT NULL,
id_ejemplar INT NOT NULL,
id_art INT NOT NULL,
fecha_ejem VARCHAR (30),
precio_ejem decimal,
num_pag_ejem INT,
PRIMARY KEY (id_revista,id_ejemplar,id_art),
FOREIGN KEY (id_revista) REFERENCES revista (id_rev)
)
我想使用以下 SQL 代码创建一个名为“ejem_art”的表:
CREATE TABLE ejem_art(
id_rev INT NOT NULL,
id_ejem INT NOT NULL,
id_art INT NOT NULL,
num_pag INT,
PRIMARY KEY (id_rev,id_ejem,id_art),
FOREIGN KEY (id_rev) REFERENCES revista (id_rev),
FOREIGN KEY (id_ejem) REFERENCES ejemplar (id_ejemplar),
FOREIGN KEY (id_art) REFERENCES articulo (id_art)
);
DBMS 是 MySQL,如您所见,我在两个表的 PK 和 FK 字段中都有相同类型的数据。
当我在创建表“ejemplar”后尝试运行第二个 SQL 代码时,MySQL 显示了著名的 errno: 150,它与不同类型的数据甚至不同的引擎而不是 InnoDB 相关。
我已确保两件事都正确(相同的数据类型和相同的引擎),但我仍然无法运行第二个代码。
希望您能帮我解决这个问题,因为我不想仅仅因为这个错误而制作“Alter Table”。
提前致谢!
【问题讨论】:
-
你检查过其他外键吗?确保问题不是来自另一个键。
-
如果你重新创建一个被删除的表,它必须有一个符合引用它的外键约束的定义。如前所述,它必须具有正确的列名和类型,并且必须在引用的键上具有索引。如果这些不满足,MySQL 返回错误号 1005 并在错误消息中引用错误 150。我没有在引用的键上看到索引。
-
是的。其他FK都不错。问题仅在于这两个表
-
很抱歉,我该怎么办?正如你所看到的,我首先创建了表“ejemplar”,然后创建了表“ejem_art”。再次感谢!