我正在尝试添加一个将成为外键的新列.我已经能够使用两个单独的ALTER TABLE命令添加列和外键约束:
ALTER TABLE one
ADD two_id integer;
ALTER TABLE one
ADD FOREIGN KEY (two_id) REFERENCES two(id);
Run Code Online (Sandbox Code Playgroud)
有没有办法用一个ALTER TABLE命令而不是两个?我无法想出任何有效的东西.
Jon*_*ler 172
与SQL相关的问题一样,它取决于DBMS.某些DBMS允许您组合以逗号分隔的ALTER表操作.例如...
Informix语法:
ALTER TABLE one
ADD two_id INTEGER,
ADD CONSTRAINT FOREIGN KEY(two_id) REFERENCES two(id);
Run Code Online (Sandbox Code Playgroud)
IBM DB2 LUW的语法类似,重复关键字ADD但是(如果我正确读取图表)不需要使用逗号分隔添加的项目.
Microsoft SQL Server语法:
ALTER TABLE one
ADD two_id INTEGER,
FOREIGN KEY(two_id) REFERENCES two(id);
Run Code Online (Sandbox Code Playgroud)
其他一些不允许您组合这样的ALTER TABLE操作.标准SQL仅允许ALTER TABLE语句中的单个操作,因此在标准SQL中,必须分两步完成.
小智 70
在MS-SQLServer中:
ALTER TABLE one
ADD two_id integer CONSTRAINT fk FOREIGN KEY (two_id) REFERENCES two(id)
Run Code Online (Sandbox Code Playgroud)
jau*_*sel 16
对于SQL Server,它应该是这样的
ALTER TABLE one
ADD two_id integer constraint fk foreign key references two(id)
Run Code Online (Sandbox Code Playgroud)
小智 6
在MS SQL SERVER中:
用户定义的外键名称
ALTER TABLE tableName
ADD columnName dataType,
CONSTRAINT fkName FOREIGN KEY(fkColumnName)
REFERENCES pkTableName(pkTableColumnName);
Run Code Online (Sandbox Code Playgroud)
没有用户定义的外键名称
ALTER TABLE tableName
ADD columnName dataType,
FOREIGN KEY(fkColumnName) REFERENCES pkTableName(pkTableColumnName);
Run Code Online (Sandbox Code Playgroud)
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);
Run Code Online (Sandbox Code Playgroud)
我希望它有帮助
在甲骨文中:
ALTER TABLE one ADD two_id INTEGER CONSTRAINT Fk_two_id REFERENCES two(id);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
169093 次 |
| 最近记录: |