当前位置:   article > 正文

mysql分区情况下,如何对历史数据更新而不引起表锁_全表update 不锁表

全表update 不锁表

由于业务需要增加字段并对历史数据进行更新,但更新旧数据的操作不能引起锁表行为。如果采用索引方式,一般是会引起行锁,影响不大,但是如果update条件中不包含索引,则会引起锁表。下面看下表分区后对于锁的特点。

1.建表语句,按时间分月进行分区(to_days函数得到是从0年开始到现在的天数)

  1. CREATE table a (
  2. id BIGINT(20) not null auto_increment,
  3. version SMALLINT(6),
  4. ctime datetime,
  5. PRIMARY KEY (id,ctime) using BTREE
  6. ) ENGINE=INNODB
  7. PARTITION by RANGE (TO_DAYS(ctime))
  8. (PARTITION p201904 VALUES less than (737545) ENGINE=INNODB,
  9. PARTITION p201905 VALUES less than (737576) ENGINE=INNODB);
  1. INSERT INTO `a` (`version`, `ctime`) VALUES (1, '2019-4-10 11:47:29');
  2. INSERT INTO `a` (`version`, `ctime`) VALUES (2, '2019-4-19 14:40:25');
  3. INSERT INTO `a` (`version`, `ctime`) VALUES (3, '2019-5-23 11:47:39');
  4. INSERT INTO `a` (`version`, `ctime`) VALUES (4, '2019-5-23 14:40:41');

2.测试情况1:按照分区条件更新

打开两个命令窗口进行测试,测试语句如下,窗口1输入update语句先不commit,窗口2进行update并commit成功,说明没有产生锁表

3.测试情况2:直接指定更新某个区

打开两个命令窗口进行测试,测试语句如下,窗口1输入update语句先不commit,窗口2进行update并commit成功,说明没有产生锁表

 

结论:当查询条件命中分区或者直接指定分区进行更新时,不会引起表锁。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/505141
推荐阅读
相关标签
  

闽ICP备14008679号