我正在为我的系统设计数据库。有很多外键约束。
我想知道我是否可以得到一些建议,我是否应该做以下哪一项:
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'作为主键的表。
答案 0 :(得分:0)
结果将是相同的。所以,没有差异。
如果我创建新数据库,我会在一个语句中创建表及其外键。该脚本看起来会更好。但在这种情况下,必须在子表之前创建父表。
如果您不想在创建表时考虑依赖关系,可以在脚本开头以随机顺序创建表,然后使用ALTER TABLE添加外键。
答案 1 :(得分:0)
您可以立即创建FK。但这并不总是可行的,因为它们可以循环方式相互引用。此外,您可能希望稍后使用FK添加列。
一次添加它可能会稍快一些,因为MySQL必须验证并重建表结构以进行一些更改(尽管我不确定添加FK是其中之一)。但是这个过程在空表上会相当快,所以添加FK时并不重要。