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