MySQL问题..一次创建和引用表

时间:2013-08-15 09:57:00

标签: mysql

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

我认为我匹配数据类型并正确设置主键/外键。但我只能看到一个错误 '你不能添加外键约束'。我认为引用的表可能会在其他表引用之前在第一个表上创建,所以我颠倒了顺序,结果是相同的。

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

2 个答案:

答案 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;