BEGIN
DECLARE s INT DEFAULT 0
DECLARE r_id bigint(10)
DECLARE report CURSOR FOR select distinct id as r_id FROM ReportHotLine
DECLARE CONTINUE HANDLER FOR NOT FOUND SET s=1
-- 打开游标
open report
-- 将游标中的值赋值给变量,注意:变量名不要和返回的列名同名,变量顺序要和sql结果列的顺序一致
fetch report into r_id
-- 当s不等于1,也就是未遍历完时,会一直循环
while s<>1 do
-- 执行业务逻辑
UPDATE wh_csyx . dy_pres30207800013_001_local a
JOIN ReportHotLine b ON a.gdId = b.ID
AND b.createtime = ( SELECT max( createtime ) FROM ReportHotLine WHERE ID = r_id )
SET blms = b.banliInfo where a.gdId =r_id
-- 将游标中的值再赋值给变量,供下次循环使用
fetch report into r_id
-- 当s等于1时表明遍历以完成,退出循环
end while
-- 关闭游标
close report
END
call init_reportUrl()
create procedure batchUpdate(in n int)begin
declare inParam int default n
declare i int default 1
declare id int
declare username varchar(255)
declare integral varchar(255)
declare ranking int
declare _resultSet cursor for select a.id, a.username,a.integral,a.ranking from user a order by a.integral desc limit inParam
open _resultSet
while i <= inParam do
fetch _resultSet into id, username, integral,ranking
update user a set a.ranking = i where a.id = id
set i = i +1
end while
close _resultSet
end
mysql> select * from user
+----+----------+----------+---------+
| id | username | integral | ranking |
+----+----------+----------+---------+
| 1 | abc | 1 | 0 |
| 2 | abc | 2 | 0 |
| 3 | abc | 3 | 0 |
| 4 | abc | 4 | 0 |
| 5 | abc | 5 | 0 |
| 6 | abc | 6 | 0 |
| 7 | abc | 7 | 0 |
| 8 | abc | 8 | 0 |
| 9 | abc | 9 | 0 |
| 10 | abc | 10 | 0 |
| 11 | abc | 11 | 0 |
| 12 | abc | 12 | 0 |
| 13 | abc | 13 | 0 |
| 14 | abc | 14 | 0 |
+----+----------+----------+---------+
14 rows in set
mysql> call batchUpdate(14)
Query OK, 1 row affected
mysql> select * from user
+----+----------+----------+---------+
| id | username | integral | ranking |
+----+----------+----------+---------+
| 1 | abc | 1 | 14 |
| 2 | abc | 2 | 13 |
| 3 | abc | 3 | 12 |
| 4 | abc | 4 | 11 |
| 5 | abc | 5 | 10 |
| 6 | abc | 6 | 9 |
| 7 | abc | 7 | 8 |
| 8 | abc | 8 | 7 |
| 9 | abc | 9 | 6 |
| 10 | abc | 10 | 5 |
| 11 | abc | 11 | 4 |
| 12 | abc | 12 | 3 |
| 13 | abc | 13 | 2 |
| 14 | abc | 14 | 1 |
+----+----------+----------+---------+
14 rows in set
mysql对一个列中的数据统一修改直接用update语句即可。工具:mysql 5.6
步骤:
1、mysql中有数据表student如下:
2、要将表中score都改成100,用如下语句:
1
update student set score=100
3、运行后结果(可以看到score都变成了100,更改成功):
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)