背景
今天线上碰到一个问题,现场进行了两个服务器的迁移,数据库也进行了合并,导致表adm_dev的REGIST_PROXY_PORT字段出现重复数据(暂时
不考虑表结构设计问题),现在需要把此重复的数据修改
** 一 使用mysql自带的语法实现**
UPDATE mytable SET
myfield = CASE id
WHEN 1 THEN ‘value’
WHEN 2 THEN ‘value’
WHEN 3 THEN ‘value’
END
WHERE id IN (1,2,3)
由于case when语法的原因,解决大批量数据就需要超级长的sql,不适合我的场
二 使用存储过程,和游标实现
create procedure pa() — 创建存储过程
BEGIN
DECLARE deviceCode varchar(50); — 定义变量
DECLARE proxyPort int ; — 定义变量
DECLARE My_Cursor CURSOR FOR (SELECT device_code FROM dss.adm_dev where id in(1,2,3)); — 创建游标并且给游标赋值
OPEN My_Cursor; — 打开游标
FETCH NEXT FROM My_Cursor INTO deviceCode; — 取游标的第一行数据赋值给deviceCode变量
set proxyPort = 99; — proxyPort变量初始化
www:loop — 循环进行修改
UPDATE dss.adm_dev SET REGIST_PROXY_PORT = proxyPort WHERE device_code = deviceCode;
set proxyPort = proxyPort+1;
FETCH NEXT FROM My_Cursor INTO deviceCode;
end loop; — 循环结束
CLOSE My_Cursor; — 关闭游标
END;
call pa(); — 调用存储过程