0

我正在为我的系统设计数据库。有很多外键约束。

我想知道是否可以得到一些建议,是否应该执行以下哪一项:

1)在表创建过程中指定约束,即

CREATE TABLE IF NOT EXISTS abc
    (
    keyword VARCHAR(20) NOT NULL,
    id INT UNSIGNED NOT NULL,
    FOREIGN KEY (id) REFERENCES xyz(id) ON DELETE CASCADE ON UPDATE CASCADE
    )ENGINE=InnoDB;

2)创建没有FK约束的表并稍后“更改”表,即,

CREATE TABLE IF NOT EXISTS abc
    (
    keyword VARCHAR(20) NOT NULL,
    id INT UNSIGNED NOT NULL,
    )ENGINE=InnoDB;
ALTER TABLE abc ADD CONSTRAINT fk_constraint FOREIGN KEY (id) REFERENCES xyz(id)
ON DELETE CASCADE ON UPDATE CASCADE;

表 xyz 只是另一个以 'id' 作为主键的表。

4

2 回答 2

0

您可以立即创建 FK。但这并不总是可能的,因为它们可以以循环方式相互引用。此外,您可能希望稍后使用 FK 添加列。

一次添加它可能会稍微快一些,因为 MySQL 必须为某些更改验证和重建表结构(尽管我不确定添加 FK 是其中之一)。但是这个过程在空表上会相当快,所以当你添加 FK 时并不重要。

于 2012-11-09T07:36:08.843 回答
0

结果将是相同的。所以,没有区别。

如果我创建新数据库,我会在一个语句中创建表及其外键。脚本会更好看。但在这种情况下,父表必须在子表之前创建。

如果您不想在创建表时考虑依赖关系,您可以在脚本开头以随机顺序创建表,然后使用 ALTER TABLE 添加外键。

于 2012-11-09T07:35:48.640 回答