Answers:
与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中,必须分两个步骤完成。
在MS-SQLServer中:
ALTER TABLE one
ADD two_id integer CONSTRAINT fk FOREIGN KEY (two_id) REFERENCES two(id)
在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);
2020更新
这是一个很老的问题,但是我看到人们仍然在回头。如果上述答案对您没有帮助,请确保您为新列使用的数据类型与其他表的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);
希望对您有所帮助
您可以像下面在SQL Server中那样进行操作
ALTER TABLE one
ADD two_id int foreign key
REFERENCES two(id)
PostgreSQL DLL添加FK列:
ALTER TABLE one
ADD two_id INTEGER REFERENCES two;
ALTER TABLE TableName
ADD NewColumnName INTEGER,
FOREIGN KEY(NewColumnName) REFERENCES [ForeignKey_TableName](Foreign_Key_Column)
试试这个:
ALTER TABLE product
ADD FOREIGN KEY (product_ID) REFERENCES product(product_ID);