151

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

ALTER TABLE one
ADD two_id integer;

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

有没有办法用一个 ALTER TABLE 命令而不是两个来做到这一点?我想不出任何可行的方法。

4

12 回答 12

211

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

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 中,必须分两步完成。

于 2013-07-15T01:59:48.917 回答
96

在 MS-SQLServer 中:

ALTER TABLE one
ADD two_id integer CONSTRAINT fk FOREIGN KEY (two_id) REFERENCES two(id)
于 2013-07-15T01:57:13.923 回答
17

对于 SQL Server,它应该类似于

ALTER TABLE one
ADD two_id integer constraint fk foreign key references two(id)
于 2015-02-17T22:14:45.303 回答
15

MS SQL 服务器中:

使用用户定义的外键名

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);
于 2017-09-12T15:40:53.467 回答
5

甲骨文中:

ALTER TABLE one ADD two_id INTEGER CONSTRAINT Fk_two_id REFERENCES two(id);
于 2017-07-18T13:19:35.743 回答
4

2020 更新

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

就我而言,我使用的是 Laravel,并且我对我的所有 id 都使用“无符号整数”,因为没有负 id LOL 的意义。

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

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

我希望它有帮助

于 2018-09-25T12:18:59.490 回答
2

PostgreSQL DLL添加一个 FK 列:

ALTER TABLE one
ADD two_id INTEGER REFERENCES two;
于 2018-01-09T04:47:45.423 回答
2

对于 DB2,语法是:

ALTER TABLE one ADD two_id INTEGER FOREIGN KEY (two_id) REFERENCES two (id);
于 2018-05-30T13:53:34.823 回答
1

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

于 2018-02-08T18:49:02.427 回答
0

您可以在 SQL Server 中执行以下操作

ALTER TABLE one
ADD two_id int foreign key
REFERENCES two(id)
于 2016-01-15T17:40:37.413 回答
0

如果您还需要添加默认值以防表中已有一些行,请添加DEFAULT val

ALTER TABLE one
ADD two_id int DEFAULT 123,
FOREIGN KEY(two_id) REFERENCES two(id);
于 2019-07-25T13:53:59.470 回答
0

尝试这个:

ALTER TABLE product
ADD FOREIGN KEY (product_ID) REFERENCES product(product_ID);
于 2019-12-28T01:04:38.753 回答