首页 > 其他 > 详细

最小锁的情况添加 not null 约束

时间:2020-07-09 16:18:26      阅读:60      评论:0      收藏:0      [点我收藏+]

当大表字段添加 not? null 时,直接执行 alter column_name set not null, 数据库对表加的是?ACCESS EXCLUSIVE LOCK 锁,会阻塞读写,同时全表扫描检查是否所有记录满足 not null 条件。当表比较小或是使用频率不高时,可以使用这种方式,当表比较大,同时低频时间不是很明显时,会比较麻烦。

这时可以使用添加 not null 约束的方式来解决:

ALTER TABLE table_name ADD CONSTRAINT constraint_name CHECK (column IS NOT NULL) NOT VALID;
ALTER TABLE table_name VALIDATE CONSTRAINT constraint_name;

1、第一步是添加 not null 约束,但设置为 not valid 模式下,此时会跳过全表扫描,但仍然会后面的insert 和 update 有效,之所以设置约束为 not valid,因为直接添加约束添加的锁是?ACCESS EXCLUSIVE?lock,会阻塞读写操作。
2、执行第二步是校验旧有记录是否满足约束条件。已存在的数据,我往往已经做了更新,这一步是执行全表扫描,一般都会执行成功。

最小锁的情况添加 not null 约束

原文:https://www.cnblogs.com/xiaotengyi/p/13273871.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!