我试图一次创建多个表(其中一些表引用其他表)。
我认为我匹配数据类型并正确设置主键/外键。但我只能看到一个错误 '你不能添加外键约束'。我认为引用的表可能会在其他表引用之前在第一个表上创建,所以我颠倒了顺序,结果是相同的。
最后,我尝试首先创建并执行引用的表(item_type),然后再引用表(item),然后......它工作了!
但是,我想知道这些代码是否可以一次执行。
以下是代码.. (只显示两个表格,使其变得简单..)
CREATE TABLE item (
i_id SMALLINT unsigned NOT NULL AUTO_INCREMENT,
i_name VARCHAR(30) NOT NULL,
t_id SMALLINT unsigned NOT NULL,
PRIMARY KEY (i_id),
FOREIGN KEY (t_id) REFERENCES item_type(t_id)
) ENGINE=INNODB;
CREATE TABLE item_type (
t_id SMALLINT unsigned NOT NULL AUTO_INCREMENT,
t_name VARCHAR(20) NOT NULL,
PRIMARY KEY(t_id)
);
答案 0 :(得分:0)
您无法为不存在的表定义外键,因此按上述顺序执行CREATE TABLE
操作不起作用。如果首先创建item_type
表,然后使用item
的外键创建item_type
表,它应该可以正常工作。
答案 1 :(得分:0)
数据库引擎批量执行sql代码,因此一个crate表是一个批处理的语句,但在你的例子中,第一批引用第二批尚未执行的批处理,因此改变批处理的顺序,它将起作用。
CREATE TABLE item_type (
t_id SMALLINT unsigned NOT NULL AUTO_INCREMENT,
t_name VARCHAR(20) NOT NULL,
PRIMARY KEY(t_id)
);
CREATE TABLE item (
i_id SMALLINT unsigned NOT NULL AUTO_INCREMENT,
i_name VARCHAR(30) NOT NULL,
t_id SMALLINT unsigned NOT NULL,
PRIMARY KEY (i_id),
FOREIGN KEY (t_id) REFERENCES item_type(t_id)
) ENGINE=INNODB;