mysql 通过存储过程批量更新数据(注意操作用户需要有mysql的创建临时表权限)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_20086125/article/details/78760290
delimiter $$


# 删除 已有的 存储过程 
DROP PROCEDURE IF EXISTS update_user_account_method;  
# 创建新的存储过程 
CREATE PROCEDURE update_user_account_method()




-- 批量更新HIK+手机号
BEGIN


# 批量更新sx_为xs_
UPDATE sys_user  t
SET  t.account = REPLACE (t.account,'sx_','xs_'); 




# 创建临时表
 -- 不存在则创建临时表
 create temporary table if not exists tmp(id bigint(20) primary key,ac varchar(20) not null) ;
 -- 使用前先清空临时表
 truncate table tmp;  


# 查询HIK的账户数
SET @num=(SELECT COUNT(1) FROM sys_user WHERE  account like concat('%','HIK','%'));






# HIK的账户数大于0则执行
 if @num>0 then
 insert into tmp(id,ac) 
             SELECT user_id,random_num
             FROM (
                   SELECT user_id,concat('xs_',FLOOR(RAND()*50000000 + 50000000)) AS random_num  
                   FROM sys_user WHERE account like concat('%','HIK','%')
                  ) AS ss
             WHERE random_num NOT IN (SELECT account FROM sys_user);
 end if;
 


# 根据临时表更新表格对应的字段
UPDATE sys_user ,  tmp
  SET    sys_user.account = tmp.ac
  WHERE  sys_user.user_id = tmp.id;


# 使用后删除临时表
 drop table tmp;  


END $$
delimiter ;




# 执行存储过程
CALL update_user_account_method;






# 删除 已有的 存储过程 
DROP PROCEDURE  update_user_account_method;

猜你喜欢

转载自blog.csdn.net/qq_20086125/article/details/78760290
今日推荐