在一个命令中添加具有外键约束的新列

时间:2013-07-15 01:43:16

标签: sql

我正在尝试添加一个将成为外键的新列。我已经能够使用两个单独的ALTER TABLE命令添加列和外键约束:

    ALTER TABLE one
    ADD two_id integer;

    ALTER TABLE one
    ADD FOREIGN KEY (two_id) REFERENCES two(id);

有没有办法用一个ALTER TABLE命令而不是两个?我无法想出任何有效的东西。

12 个答案:

答案 0 :(得分:146)

与SQL相关的问题一样,它取决于DBMS。某些DBMS允许您组合以逗号分隔的ALTER表操作。例如......

Informix语法:

ALTER TABLE one
    ADD two_id INTEGER,
    ADD CONSTRAINT FOREIGN KEY(two_id) REFERENCES two(id);

IBM DB2 LUW的语法类似,重复关键字ADD但是(如果我正确阅读了图表)不需要使用逗号分隔添加的项目。

Microsoft SQL Server语法:

ALTER TABLE one
    ADD two_id INTEGER,
    FOREIGN KEY(two_id) REFERENCES two(id);

其他一些人不允许你像这样组合ALTER TABLE操作。标准SQL只允许ALTER TABLE语句中的单个操作,因此在标准SQL中,它必须分两步完成。

答案 1 :(得分:62)

在MS-SQLServer中:

ALTER TABLE one
ADD two_id integer CONSTRAINT fk FOREIGN KEY (two_id) REFERENCES two(id)

答案 2 :(得分:15)

对于SQL Server,它应该类似于

ALTER TABLE one
ADD two_id integer constraint fk foreign key references two(id)

答案 3 :(得分:5)

MS SQL SERVER中:

使用用户定义的外键名称

ALTER TABLE tableName
ADD columnName dataType,
CONSTRAINT fkName FOREIGN KEY(fkColumnName) 
   REFERENCES pkTableName(pkTableColumnName);

没有用户定义的外键名称

ALTER TABLE tableName
ADD columnName dataType,
FOREIGN KEY(fkColumnName) REFERENCES pkTableName(pkTableColumnName);

答案 4 :(得分:3)

Oracle中:

ALTER TABLE one ADD two_id INTEGER CONSTRAINT Fk_two_id REFERENCES two(id);

答案 5 :(得分:1)

您可以在SQL Server

中执行以下操作
ALTER TABLE one
ADD two_id int foreign key
REFERENCES two(id)

答案 6 :(得分:1)

PostgreSQL DLL添加FK列:

ALTER TABLE one
ADD two_id INTEGER REFERENCES two;

答案 7 :(得分:1)

ALTER TABLE TableName ADD NewColumnName INTEGER, FOREIGN KEY(NewColumnName) REFERENCES [ForeignKey_TableName](Foreign_Key_Column)

答案 8 :(得分:1)

对于DB2,语法为:

PUT

答案 9 :(得分:0)

2018更新

这是一个很老的问题,但是我看到人们仍然在回头。如果上述答案对您没有帮助,请确保您为新列使用的数据类型与其他表的ID相同。

在我的情况下,我使用的是Laravel,我对所有ID都使用“无符号整数”,因为没有负ID大声笑了。

为此,原始SQL查询将如下更改:

ALTER TABLE `table_name`
ADD `column_name` INTEGER UNSIGNED,
ADD CONSTRAINT constrain_name FOREIGN KEY(column_name) REFERENCES foreign_table_name(id);

我希望对您有帮助

答案 10 :(得分:0)

如果表中已经有一些行,如果还需要添加默认值,则添加 DEFAULT val

ALTER TABLE one
ADD two_id int DEFAULT 123,
FOREIGN KEY(two_id) REFERENCES two(id);

答案 11 :(得分:0)

尝试一下:

ALTER TABLE product
ADD FOREIGN KEY (product_ID) REFERENCES product(product_ID);