mysql - 对表中包含2800万条记录的每条记录的列进行更新

时间:2014-03-31 01:36:55

标签: mysql

我有一个表格,其中有一列包含这样的值 - [“12”]。该表中有2800万条记录。当我执行下面的操作时,它会花费很长时间,最终只会出错。我收到此消息 - “第1行错误1206(HY000):锁定总数超过锁定表大小”

这是更新声明:

update table set category_ids = REPLACE(REPLACE(category_ids,'"]',''),'["','');

基本上,只是尝试从该列中的值中删除[“和”]。

有更有效/更好的方法吗?

1 个答案:

答案 0 :(得分:1)

我没有测试过这个,只是猜测。

选择有限行进行更新,然后进行更新。

select * from my_table where col like '[%]' limit 0, 100000 for update;
update my_table set col=replace(.... where ... limit 100000;

在下一次迭代中你可以试试

select * from my_table where col like '[%]' limit 100001, 100000 for update;
update my_table set col=replace(.... where ... limit 100000;

这种做法可以控制允许的锁数。