MariaDB更新满足指定条件的ID主键列 含WHILE的UPDATE语句不生效如何解决
MariaDB 批量更新ID字段的正确方案
核心问题:标准SQL的UPDATE语句不支持用WHILE关键字做行筛选条件,筛选满足更新条件的行需要使用WHERE子句。
基础场景直接更新写法
如果你的表数据量不大,没有锁表风险,直接执行以下语句即可实现「给glpi_tickets表中所有id大于2288的行的id字段加1000」的需求:
UPDATE glpi_tickets SET id = id + 1000 WHERE id > 2288;
前置校验建议
更新前建议先执行查询验证匹配的行是否符合预期,避免误改数据:
SELECT * FROM glpi_tickets WHERE id > 2288;
大数据量分批更新写法
如果表数据量极大,需要避免长时间锁表,可以用WHILE循环分批更新,需要将逻辑写在存储过程中,示例如下:
DELIMITER // CREATE PROCEDURE UpdateTicketIds() BEGIN -- 每次更新1000条,直到所有符合条件的行更新完成 WHILE EXISTS (SELECT 1 FROM glpi_tickets WHERE id > 2288) DO UPDATE glpi_tickets SET id = id + 1000 WHERE id > 2288 LIMIT 1000; END WHILE; END // DELIMITER ; -- 调用存储过程执行更新 CALL UpdateTicketIds();
内容的提问来源于stack exchange,提问作者Victor Hugo Gaspar Machowski
相关产品推荐
相关产品推荐

