暂无图片
oracle加列+default DDL是否会有锁?
我来答
分享
暂无图片 匿名用户
oracle加列+default DDL是否会有锁?

alter table table_name add col_a number(10) dafault 1 not null;

oracle,上述加列 有default的SQL,大表执行,会有行锁吗?会影响其他生产DML么?

我来答
添加附件
收藏
分享
问题补充
4条回答
默认
最新
薛晓刚

不会锁。

直接加在数据字典上千万级都是毫秒完成。

暂无图片 评论
暂无图片 有用 0
打赏 0
佳佳
2022-01-10
测过了,11g,有default的DDL,会锁表,select都会阻塞。没有default的DDL毫秒级。
DarkAthena

这个问题上次好像有人问过,而且还有了争议

https://www.modb.pro/issue/11242

不过我有做实验,结论是dml事务会引起加字段事务被阻塞,但反过来却不会,而且默认值如果是表达式的话,在某些场景下可能会和你想要的不一样

暂无图片 评论
暂无图片 有用 0
打赏 0
shxke

不会锁,default值会记录在数据字典中!!

暂无图片 评论
暂无图片 有用 0
打赏 0
佳佳
2022-01-10
测过了,11g,有default的DDL,会锁表,select都会阻塞。没有default的DDL毫秒级。
肖杰

看这个问题争论很大~~~~ 4000W的表测试(12C)

SQL> desc creditinfo_part;
 Name                                                                                                              Null?    Type
 --------------------------------------------- -------- ----------------------------------------------------------------------------
 CI_EMAIL                                                                                                          NOT NULL NVARCHAR2(100)
 CI_TEL                                                                                                                     NVARCHAR2(50)
 CI_FIRSTNAME                                                                                                               NVARCHAR2(50)
 CI_LASTNAME                                                                                                                NVARCHAR2(50)
 CI_COUNTRY                                                                                                                 NVARCHAR2(100)
 USERID                                                                                                            NOT NULL NUMBER

SQL> select count(*) from creditinfo_part;

  COUNT(*)
----------
  43343240

Elapsed: 00:00:01.32

SQL> alter table creditinfo_part add col1 number default 1 not null;

Table altered.

Elapsed: 00:00:00.04

SQL> alter table creditinfo_part add col2 number default 1;

Table altered.

Elapsed: 00:00:00.02
SQL> alter table creditinfo_part add col3 number;

Table altered.

Elapsed: 00:00:00.01

复制

加不加defaul,not null都是毫秒级

暂无图片 评论
暂无图片 有用 0
打赏 0
回答交流
Markdown


请输入正文
提交
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~