1

我试图一次创建多个表(其中一些引用其他表)。

我想我匹配了数据类型并正确设置了主键/外键。但我只能看到“您不能添加外键约束”的错误。我认为引用的表可能是在其他表引用它之前创建的,所以我颠倒了顺序,结果是一样的。

最后,我尝试先创建和执行仅引用的表(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)
);
4

2 回答 2

0

您不能为不存在的表定义外键,因此CREATE TABLE按上述顺序执行操作将不起作用。如果您item_type先创建表,然后创建item具有外键 to 的表item_type,它应该可以工作。

于 2013-08-15T10:00:30.973 回答
0

数据库引擎分批执行sql代码,因此创建表的一个语句是一个批处理,但是在您的示例中,第一批引用了尚未执行的第二批,因此更改批处理的顺序并且它将起作用。

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;
于 2013-08-15T10:01:41.807 回答