MySQL 8 可以使用以下两种方式实现批量 update 不锁表:

  1. 使用多个单独的 update 语句

将大的 update 操作拆分成多个小的 update 操作,每个操作只更新一小部分数据,这样可以降低锁定的数据量,减少锁表的可能性。例如,可以使用以下语句进行批量更新:

UPDATE table SET col1 = val1 WHERE id >= 1 AND id <= 1000;
UPDATE table SET col1 = val2 WHERE id >= 1001 AND id <= 2000;
UPDATE table SET col1 = val3 WHERE id >= 2001 AND id <= 3000;
  1. 使用可重复读隔离级别

在 MySQL 8 中,可重复读隔离级别下的 update 操作不会锁定整张表,而是只锁定需要更新的行。因此,可以将事务的隔离级别设置为可重复读,并使用单个 update 语句进行批量更新。例如:

SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
START TRANSACTION;
UPDATE table SET col1 = val1 WHERE id >= 1 AND id <= 1000;
UPDATE table SET col1 = val2 WHERE id >= 1001 AND id <= 2000;
UPDATE table SET col1 = val3 WHERE id >= 2001 AND id <= 3000;
COMMIT;

注意:使用可重复读隔离级别可能会导致出现幻读问题,因此需要谨慎使用。

mysql8 如何实现批量update 不锁表

原文地址: https://www.cveoy.top/t/topic/8qL 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录