我正在尝试添加一个将成为外键的新列。我已经能够使用两个单独的ALTER TABLE
命令添加列和外键约束:
ALTER TABLE one
ADD two_id integer;
ALTER TABLE one
ADD FOREIGN KEY (two_id) REFERENCES two(id);
有没有办法用一个ALTER TABLE命令而不是两个?我无法想出任何有效的东西。
答案 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);