我创建了一个名为"temp1"
的表 - 它有一个名为aa
的主键和其他一些字段。我还有一个名为temp2
的表。
我想将foreign key
添加到名称为cc
的<{1}}。
我在下面写了代码,但它有一些错误:
create table temp1 (
aa int,
primary key(aa)
);
create table temp2 (
bb int,
cc int,
primary key(bb),
foreign key(cc) references temp1
);
..但它有这个错误:
无法创建表'temp.temp2'
temp
是我的数据库名称。
Edit:
我将数据插入aa(temp1中的主键),但不会导入
cc(temp2中的外键)。
为什么?
我认为如果在主键中插入数据,它会自动插入
外键!!如果这是真的吗?答案 0 :(得分:5)
您还需要指定要链接的外部字段:
foreign key (cc) references temp1 (aa)
在create table语句中,或
alter table temp2 add foreign key (cc) references temp1 (aa)
之后。同样,你的表temp1的SQL是错误的 - 没有字段a
来创建主键 - 我猜你的问题只是一个错字。
答案 1 :(得分:1)
来自MySQL foreign key documentation:
如果MySQL从CREATE TABLE语句报告错误号1005,并且错误消息引用错误150,则表创建失败,因为未正确形成外键约束。
检查您的查询,这是正确的 - 您需要使用:
CREATE TABLE temp2 (
bb int,
cc int,
PRIMARY KEY (bb),
FOREIGN KEY (cc) REFERENCES temp1(aa)
);
在创建外键约束时,需要在父表中指定外键与之关联的列。 SQL不假设您需要主键列,因为可能还有其他列。
答案 2 :(得分:0)
您的代码是有效的标准SQL-92语法。
您可以使用在线Mimer SQL-92 Validator进行测试。
您可以通过阅读SQL-92规范,11.8“参照约束定义”,2b来验证这一点:
如果引用了表和列 没有指定参考列 列表,然后是表的描述符 引用表应包括a 指定的唯一约束
PRIMARY KEY
。
可悲的是,mySQL不符合SQL-92,似乎需要参考列列表。