在MySQL表中指定约束

时间:2012-11-09 07:30:43

标签: mysql foreign-keys constraints

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

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

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'作为主键的表。

2 个答案:

答案 0 :(得分:0)

结果将是相同的。所以,没有差异。

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

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

答案 1 :(得分:0)

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

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