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

我试图添加一个新列,它将是一个外键。我已经能够使用两个单独的 ALTER TABLE命令添加列和外键约束:

ALTER TABLE one
ADD two_id integer;


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

有没有办法用一个 ALTERTABLE 命令代替两个 ALTERTABLE 命令?我想不出任何有用的东西。

262755 次浏览

在 MS-SQLServer 中:

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

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

对于 SQLServer,它应该类似于

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

您可以像下面这样在 SQLServer 中进行操作

ALTER TABLE one
ADD two_id int foreign key
REFERENCES two(id)

神使:

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

微软 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);

添加 FK 列的 PostgreSQL DLL :

ALTER TABLE one
ADD two_id INTEGER REFERENCES two;

表名 添加新列名整数, FOREIGN KEY (NewColumnName) REFERENCES [ ForeignKey _ TableName ](FOREIGN _ KEY _ Column)

对于 DB2,语法是:

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

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);

希望能有所帮助

如果您还需要添加默认值,以防表中已经有一些行,那么添加 缺省 val

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

试试这个:

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

用于具有约束名称的 SQLServer

ALTER TABLE one
ADD two_id INT NOT NULL,
CONSTRAINT FK_name FOREIGN KEY (two_id) REFERENCES two(id);