0 0

mysql批量更新存储过程怎么写0

我要写个存储过程,传入记录数N。
然后查找出按积分排序的前N条记录,然后循环设置记录的排名=i.
请问能给个demo么。

2014年5月27日 15:37

4个答案 按时间排序 按投票排序

0 0

采纳的答案

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

2014年5月27日 17:42
0 0

drop PROCEDURE  if exists dorank;
delimiter //
CREATE PROCEDURE dorank(IN N INT)
BEGIN
	
  SET @i=0;
  PREPARE s1 FROM '
	  update tiezi as a
	  inner join (
		select @i := @i +1 as myrank, id, zan from tiezi order by zan desc limit ?
		) as b
	  on a.id=b.id
	  set a.rank = b.myrank
  ';
  
  set @a=N;
  EXECUTE s1 USING @a;
DEALLOCATE PREPARE s1;

END;
//
delimiter ;


mysql> select * from tiezi;
+----+------+------+
| id | zan  | rank |
+----+------+------+
|  1 |  100 |    0 |
|  2 |  300 |    0 |
|  3 |   50 |    0 |
+----+------+------+
3 rows in set (0.00 sec)

mysql> call dorank(2);
Query OK, 0 rows affected (0.00 sec)

mysql> select * from tiezi;
+----+------+------+
| id | zan  | rank |
+----+------+------+
|  1 |  100 |    2 |
|  2 |  300 |    1 |
|  3 |   50 |    0 |
+----+------+------+
3 rows in set (0.00 sec)

2014年5月27日 17:33
0 0

可以利用自定义变量(MySQL)

2014年5月27日 16:53
0 0

drop PROCEDURE if EXISTS dealData;

CREATE PROCEDURE dealData()
BEGIN

DECLARE totalCount INT(10);
        DECLARE i INT(10);
set totalCount =0; //记录数
        set i=1;//排名
SELECT count(1) into totalCount from 表 ;

while(totalCount>0) DO
update 表 set 列=i where...;
set totalCount = totalCount-1;
                set i = i +1;
end WHILE;
END;
CALL dealData();

2014年5月27日 16:00

相关推荐

    MySQL创建存储过程批量插入10万条数据

    MySQL创建存储过程批量插入10万条数据 存储过程 1、首先防止主键冲突,我们清空表。 TRUNCATE table A_student; 2、编写存储过程 delimiter ‘$’; CREATE PROCEDURE batchInsert(in args int) BEGIN declare i int ...

    kettle批量导出mysql存储过程

    6. **运行与验证**:导出完成后,用户可以使用命令行工具(如MySQL客户端或shell脚本)运行生成的`.source`文件,逐个执行存储过程的创建或更新。 总结来说,Kettle批量导出MySQL存储过程涉及到的关键知识点有:...

    根据excel数据批量新增或更新mysql的表

    本文将详细介绍如何使用Python编程语言结合Excel文件,批量新增或更新MySQL数据库中的数据。标题所指的"根据excel数据批量新增或更新mysql的表"是一个常见的需求,特别是在数据分析、数据导入导出或者自动化报表生成...

    mysql批量增加字段.txt

    MySQL批量对表增加指定字段,会快速实现批量字段的添加。写了2个存储存储过程,执行即可。方便快速!

    mysql触发器+存储过程

    MySQL数据库系统提供了强大的数据库管理功能,其中两个关键的特性是触发器(Triggers)和存储过程(Stored Procedures)。这两者都是数据库编程的重要组成部分,能够帮助用户实现更复杂的数据操作和业务逻辑。 首先...

    mysql批量建表

    利用mysql存储函数,方便快捷批量建立mysql数据库测试表

    MySQL实现创建存储过程并循环添加记录的方法

    在MySQL数据库中,存储过程是一种预编译的SQL语句集合,它可以封装一系列的操作,用于执行复杂的业务逻辑。创建存储过程并循环添加记录是数据库管理中的常见任务,尤其是在需要批量插入数据时。以下将详细解释如何在...

    mysql批量修改(字段)列类型

    MySQL存储过程,一键批量修改一个表内的多个列(字段)类型。例如从int转换成varchar

    mysql中文手册+mysql命令大全+mysql存储过程

    比如,你可以创建一个存储过程来批量插入数据,或者创建复杂的业务流程,如订单处理或库存管理。 这些资源合在一起,为MySQL的学习和实践提供了一个完整的学习路径。从基本的SQL语法和命令操作,到进阶的存储过程...

    MySQL存储过程完整版使用代码示例

    资源包中囊括了MySQL数据库中的存储过程的使用包含的基本结构及日常所使用到的基本函数的使用【包括java端调用存储过程,创建临时表,动态执行sql语句,过程的递归调用,指针循环取数,批量创建表删除表,树状结构的...

    kettle批量导出mysql建表语句

    在这个场景中,“kettle批量导出mysql建表语句”是一个关于如何使用Kettle来自动化地从MySQL数据库中提取建表语句,包括数据表和视图的创建语句,以便于备份或在其他环境中重建相同结构的过程。 首先,我们需要了解...

    MySQL存储过程.pdf

    MySQL存储过程 MySQL存储过程(Stored Procedure)是一种复杂的数据库对象,允许用户将多个SQL语句组合成一个单一的执行单元,以提高数据库的性能和可维护性。下面是 MySQL 存储过程的相关知识点: 存储过程的定义...

    MySQL存储过程.rar

    MySQL存储过程是数据库管理系统中的一种重要功能,它允许开发者预编译一系列的SQL语句,形成一个可重复执行的单元,极大地提高了数据库操作的效率和便捷性。在MySQL中,存储过程可以包含复杂的业务逻辑,比如条件...

    中文版MySQL5之存储过程技术手册

    MySQL5存储过程是数据库管理中的一个重要概念,它允许开发者封装一系列SQL语句并作为一个单一的程序执行。在本手册中,我们将深入探讨存储过程的概念、创建、调用、修改以及删除等各个方面,帮助读者掌握这一高效的...

    Java实现批量向mysql写入数据的方法

    mysql数据库是目前最流行的开源关系数据库管理系统,它提供了高效、稳定、安全的数据存储解决方案。 本文主要介绍了Java实现批量向mysql写入数据的方法,该方法涉及Java基于JDBC连接mysql数据库及写入数据的相关...

    JDBC调用MySQL5存储过程[文].pdf

    本文将详细讲解如何使用JDBC调用MySQL5的存储过程,包括存储过程的创建、JDBC调用过程以及处理输入输出参数。 首先,我们创建一个简单的MySQL5数据库表`user`,用于演示存储过程的插入操作: ```sql CREATE TABLE ...

    mysql存储过程优化

    MySQL存储过程优化是数据库性能调优的关键环节,尤其是在处理大量数据和复杂业务逻辑时。本文将探讨两个重要的优化策略:使用临时表代替游标以及巧建SUM索引来提升查询效率。 首先,我们来讨论“使用临时表代替游标...

    MySQL存储过程入门学习

    2. **批量处理**:利用存储过程结合循环结构,实现数据的批量处理,有效减少网络流量。 3. **确保数据安全**:通过限制外部应用程序对底层数据的直接访问,提高了数据的安全性和完整性。 #### 二、创建与调用存储...

    mysql批量修改表前缀

    例如,如果你的数据库中存在视图、存储过程或触发器,可能还需要更新其中引用的表名。此外,如果表前缀更改涉及跨数据库操作,那么SQL语句会有所不同,可能需要使用`USE`语句切换数据库。 总之,批量修改MySQL中的...

Global site tag (gtag.js) - Google Analytics