MySQL 批量Dll操作(转)

概述

本章节介绍使用游标来批量进行表操作,包括批量添加索引、批量添加字段等。如果对存储过程、变量定义、预处理还不是很熟悉先阅读我前面写过的关于这三个概念的文章,只有先了解了这三个概念才能更好的理解这篇文章。

MySQL变量和条件:http://www.cnblogs.com/chenmh/p/5203429.html

PREPARE 预处理语句:http://www.cnblogs.com/chenmh/articles/5308085.html

MySQL存储过程和函数:http://www.cnblogs.com/chenmh/p/5201473.html

正文

光标声明

声明光标

DECLARE cursor_name CURSOR FOR select_statement

这个语句声明一个光标。也可以在子程序中定义多个光标,但是一个块中的每一个光标必须有唯一的名字。

注意:SELECT语句不能有INTO子句。

打开光标

OPEN cursor_name

这个语句打开先前声明的光标。

前进光标

FETCH cursor_name INTO var_name [, var_name] ...

这个语句用指定的打开光标读取下一行(如果有下一行的话),并且前进光标指针。

关闭光标

CLOSE cursor_name

这个语句关闭先前打开的光标。

批量添加索引

共享一个批量添加索引的游标,当一个库中有上百张表结构一样但是名称不一样的表,这个时候批量操作就变得简单了。

#删除创建存储过程DROP PROCEDURE IF EXISTS FountTable;
DELIMITER $$
CREATE PROCEDURE FountTable()
BEGIN
    DECLARE TableName varchar(64);     #声明游标
    DECLARE cur_FountTable CURSOR FOR SELECT TABLE_NAME FROM information_schema.TABLES WHERE TABLE_SCHEMA=‘front‘ AND TABLE_NAME LIKE ‘student%‘;
    DECLARE EXIT HANDLER FOR not found CLOSE cur_FountTable;
    #打开游标
    OPEN cur_FountTable;
    REPEAT
         FETCH cur_FountTable INTO TableName;
         #定义预处理
         SET @SQLSTR1 = CONCAT(‘create index Flag on ‘,‘`‘,TableName,‘`‘,‘ (Flag); ‘);
         SET @SQLSTR2 = CONCAT(‘create index State on ‘,‘`‘,TableName,‘`‘,‘ (State); ‘);
         SET @SQLSTR3 = CONCAT(‘create index upload on ‘,‘`‘,TableName,‘`‘,‘ (upload); ‘);
         SET @SQLSTR4 = CONCAT(‘create index ccFlag on ‘,‘`‘,TableName,‘`‘,‘ (lockFlag); ‘);
         SET @SQLSTR5 = CONCAT(‘create index comes on ‘,‘`‘,TableName,‘`‘,‘ (comes); ‘);
         ###SET @SQLSTR=CONCAT(@SQLSTR1,@SQLSTR2,@SQLSTR3,@SQLSTR4,@SQLSTR5 );
         PREPARE STMT1 FROM @SQLSTR1;
         PREPARE STMT2 FROM @SQLSTR2;
         PREPARE STMT3 FROM @SQLSTR3;
         PREPARE STMT4 FROM @SQLSTR4;
         PREPARE STMT5 FROM @SQLSTR5;
         EXECUTE STMT1;
         EXECUTE STMT2;
         EXECUTE STMT3;
         EXECUTE STMT4;
         EXECUTE STMT5;
         DEALLOCATE PREPARE STMT1;
         DEALLOCATE PREPARE STMT2;
         DEALLOCATE PREPARE STMT3;
         DEALLOCATE PREPARE STMT4;
         DEALLOCATE PREPARE STMT5;
        # SELECT @SQLSTR;

    UNTIL 0 END REPEAT;
    #关闭游标
    CLOSE cur_FountTable;

END $$
DELIMITER ;

CALL FountTable();

这里有几个细节:

  • 在声明游标的时候记得修改自己需要查询的条件
  • 在预处理这里也需要改成对应的字段
  • 在定义条件变量的时候这里我使用的是EXIT就是遇到错误就中断,当然也可以使用CONTINUE 。

注意:由于mysql在存储过程当中无法将查询出来的变量名直接作为表名来用,所以这里要用到动态拼接SQL的方法,但是通常的SET CONCAT的方法并不管用,所以这里就使用了PREPARE来进行预编译。

总结

批量处理虽然有时候能提高工作的效率,但是带来的潜在危险也是挺大了,所以在执行之前必须要非常有把握你执行的语句对数据的影响,否则在生成环境就非常危险了

http://www.cnblogs.com/chenmh/p/5308146.html

时间: 2024-10-11 06:30:44

MySQL 批量Dll操作(转)的相关文章

.NET 使用 MySql.Data.dll 动态库操作MySql的帮助类--MySqlHelper

.NET 使用 MySql.Data.dll 动态库操作MySql的帮助类--MySqlHelper 参考示例代码,如下所示: /// <summary> /// MySql 数据库操作类 /// </summary> public class MySqlHelper { #region MysqlConnection private static MySql.Data.MySqlClient.MySqlConnection _mysqlConnection; /// <su

mysql 批量更新与批量更新多条记录的不同值实现方法

在mysql中批量更新我们可能使用update,replace into来操作,下面来给各位详细介绍mysql 批量更新与性能吧! mysql更新语句很简单,更新一条数据的某个字段,一般这样写: 复制代码代码如下: UPDATE mytable SET myfield = 'value' WHERE other_field = 'other_value'; 如果更新同一字段为同一个值,mysql也很简单,修改下where即可: 复制代码代码如下: UPDATE mytable SET myfie

MySQL表更新操作

1.  使用insert语句向表插入一条新记录,语法是:insert into 表名 [(字段列表)] values(值列表). 2.  使用set 语句更新操作与字符集,例如setcharacter_set_client =latin1\gbk\utf8; 3.  使用delete语句删除表记录,例如delete from 表名 where 条件表达式: 4.  使用insert语句可以一次性地向表中批量插入多条记录,语句是:insert  into 表名 [(字段名)]values (值列表

mysql批量插入数据

review代码发现,同事mysql批量插入数据的实现方法是,用for循环遍历,将列表每个数据单次插入.相当于批量插入N条数据,进行了n次的数据库连接和插入操作. 底层有批量插入的方法,但是会有问题,所以已经停用,看下面实现是,取到一个数据库连接,来处理后面所有的插入操作.若这个列表ops所有的sql语句执行的数据库都是同一个的话,就没什么问题,若里面存在散库的情况,只要跟第一个不在同一个库的,都会执行失败. public void insertBatch(List<OpBatchUpdate>

各种数据库的批量插入操作_Oracle

最近工作中需要优化以前各种的Excel批量导入功能,目前将能优化的方面做个记录. 选用技术: 目前.Net可以访问Oracle常用的Dll,有三种: 微软自带的 System.Data.OracleClient Oracle 公司提供的 Oracle.DataAccess System.Data.OleDb  通过比对以后,使用第二种,其原因如下: 访问数据库方式 优点 缺点 System.Data.OracleClient 操作简单,无论32,64直接引用即可使用 微软在4.0之后不会对其更新

php笔记08:数据库编程---使用php的MySQL扩展库操作MySQL数据库

1.使用php的MySQL扩展库操作MySQL数据库: php有3种方式操作MySQL数据库 (1)mysql扩展库 (2)mysqli扩展库 (3)pdo   mysql扩展库与mysql数据库区别 ? php设计者封装了一些方法去操作mysql数据库,这些方法集中起来形成了mysql扩展库.mysql数据库存放数据.     2.使用php的MySQL扩展库操作MySQL数据库案例: (1)环境搭建:启用MySQL数据库,在php.ini文件中配置使用MySQL数据库,          

MyBatis魔法堂:各数据库的批量Update操作

一.前言   MyBatis的update元素的用法与insert元素基本相同,因此本篇不打算重复了.本篇仅记录批量update操作的sql语句,懂得SQL语句,那么MyBatis部分的操作就简单了. 注意:下列批量更新语句都是作为一个事务整体执行,要不全部成功,要不全部回滚. 二.MSSQL的SQL语句 WITH R AS( SELECT 'John' as name, 18 as age, 42 as id UNION ALL SELECT 'Mary' as name, 20 as age

mysql 批量更新

bs_user 表,我们叫他 bu表, 字段user_id,len_id, think_wellUser 表,我们简称为tw表,中的user_id ,len_id 其中tw表的user_id 是bu表user_id的子集.bu表的len_id有乱码,tw表len_id没有乱码, 需求是将bu乱码的len_id,更新 采用如下sql语句, update bs_user,think_wellUserset bs_user.len_id=think_wellUser.len_idwhere bs_us

C#调用MySQL数据库(使用MySql.Data.dll连接)mysql-connector-net-6.10.4.msi

下载地址:http://dev.mysql.com/downloads/connector/net/ 安装指导 1.安装:mysql-connector-net-6.10.4.msi 其下载地址:http://dev.mysql.com/downloads/connector/net/ 在Windows10 操作系统安装mysql-connector-net-6.10.4.msi 默认是安装在C盘: 安装完后在应用工程中引用组件MySql.Data.dll. 然后在应用工程中引用组件:MySql