我正在尝试添加一个将成为外键的新列。我已经能够使用两个单独的ALTER TABLE
命令添加列和外键约束:
ALTER TABLE one
ADD two_id integer;
ALTER TABLE one
ADD FOREIGN KEY (two_id) REFERENCES two(id);
有没有办法用一个 ALTER TABLE 命令而不是两个来做到这一点?我想不出任何可行的方法。
我正在尝试添加一个将成为外键的新列。我已经能够使用两个单独的ALTER TABLE
命令添加列和外键约束:
ALTER TABLE one
ADD two_id integer;
ALTER TABLE one
ADD FOREIGN KEY (two_id) REFERENCES two(id);
有没有办法用一个 ALTER TABLE 命令而不是两个来做到这一点?我想不出任何可行的方法。
与 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 中,必须分两步完成。
在 MS-SQLServer 中:
ALTER TABLE one
ADD two_id integer CONSTRAINT fk FOREIGN KEY (two_id) REFERENCES two(id)
对于 SQL Server,它应该类似于
ALTER TABLE one
ADD two_id integer constraint fk foreign key references two(id)
在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);
在甲骨文中:
ALTER TABLE one ADD two_id INTEGER CONSTRAINT Fk_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);
我希望它有帮助
PostgreSQL DLL添加一个 FK 列:
ALTER TABLE one
ADD two_id INTEGER REFERENCES two;
对于 DB2,语法是:
ALTER TABLE one ADD two_id INTEGER FOREIGN KEY (two_id) REFERENCES two (id);
ALTER TABLE TableName
ADD NewColumnName INTEGER,
FOREIGN KEY(NewColumnName) REFERENCES [ForeignKey_TableName](Foreign_Key_Column)
您可以在 SQL Server 中执行以下操作
ALTER TABLE one
ADD two_id int foreign key
REFERENCES two(id)
如果您还需要添加默认值以防表中已有一些行,请添加DEFAULT 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);