mysql8 如何实现批量update 不锁表
MySQL 8 可以使用以下两种方式实现批量 update 不锁表:
- 使用多个单独的 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;
- 使用可重复读隔离级别
在 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;
注意:使用可重复读隔离级别可能会导致出现幻读问题,因此需要谨慎使用。
原文地址: https://www.cveoy.top/t/topic/8qL 著作权归作者所有。请勿转载和采集!