Ben*_*rge 22 oracle alter-table
将列添加到具有默认值且约束为非null的表时.在数据库处于负载状态时,最好是作为单个语句运行还是将其分解为多个步骤.
ALTER TABLE user ADD country VARCHAR2(4) DEFAULT 'GB' NOT NULL
Run Code Online (Sandbox Code Playgroud)
与
ALTER TABLE user ADD country VARCHAR2(2)
UPDATE user SET country = 'GB'
COMMIT
ALTER TABLE user MODIFY country DEFAULT 'GB' NOT NULL
Run Code Online (Sandbox Code Playgroud)
bit*_*ier 18
性能取决于您使用的Oracle版本.无论如何都会生成锁.
如果版本<= Oracle 11.1则#1与#2相同.反正它很慢.从Oracle 11.2开始,Oracle为第一个语句引入了一个很好的优化(一个命令完成所有操作).您无需更改命令 - Oracle只是表现不同.它仅将默认值存储在数据字典中,而不是更新每个物理行.
但我还要说,我在过去遇到了一些与此功能相关的错误(在Oracle 11.2.0.1中)
我认为这个问题在当前版本11.2.0.3中已得到修复,因此我建议您使用此功能.