初识Mysql存储过程
来源:互联网 发布:stussy淘宝哪家正 编辑:程序博客网 时间:2024/06/18 10:55
mysql存储过程简单介绍参见:http://blog.sina.com.cn/s/blog_52d20fbf0100ofd5.html
笔者使用的是SQLyog管理工具,具体的业务需求如下:
现有72万文章数据paper_class_title_word,有id,title,class,class2等字段,现需要将按照class2分组,每个组取1000个数据到新的表paper_class_title_word_1000中。
首先需要用到的第一个存储过程是:
DELIMITER //CREATE PROCEDURE Select_1000_row_to_new_talbe(IN Inclass2 VARCHAR(255),IN Cnt INT)BEGIN INSERT INTO paper_class_title_word_1000(old_id,title,class,class2) SELECT old_id,title,class,class2 FROM paper_class_title_word WHERE class2 = Inclass2 ORDER BY id LIMIT Cnt;END;//
参数Inclass2 是class2的值,Cnt是需要移动的数据个数。
注意:DELIMITER // 的意思是将//作为语句结束位置,如果不使用该语句,则会报错,因为mysql默认碰到“分号——;”就会去执行。
为了将每个类都执行相应的操作,则需要使用循环来完成,为了方便获取循环中的class2参数值,将72万文章数据进行组合并导入到一个新表中paper_class2_cnt。
INSERT INTO paper_class2_cnt(class2,cnt) SELECT class2,COUNT(class2) FROM paper_class_title_word GROUP BY class2 ORDER BY COUNT(class2) DESC
部分数据如下,
这样就可以利用i来循环 ,根据每个i来取class2的值。
于是有了第二个存储过程:
DELIMITER //CREATE PROCEDURE Select_1000_row_to_new_table_all()BEGIN DECLARE i INT; SET i = 0; LOOP_LABLE:LOOPSELECT class2 FROM paper_class2_cnt WHERE id = i INTO @tempClass;CALL Select_1000_row_to_new_talbe(@tempClass, 1000); SET i=i+1; IF i > 119 THEN LEAVE LOOP_LABLE; END IF; END LOOP;END;//
笔者目前还不知道有没有类似容器或者数据集之类的东西,也就是可以保存符合条件的所有的class2的值,那样就必使用id来取class2的值,直接遍历结果集就可以了。
通过本次尝试,感受到了mysql存储过程的强大,在之前很多这样的任务都是使用程序实现的,和存储过程比较起来,麻烦多了。
1 0
- 初识MySQL存储过程
- 初识MySQL存储过程
- 初识Mysql存储过程
- MySQL:初识存储过程
- 初识存储过程
- hibernate使用存储过程初识
- 【mysql】mysql存储过程
- MySQL存储过程详解 mysql 存储过程
- MySQL存储过程详解 mysql 存储过程
- MySQL存储过程详解 mysql 存储过程
- MySQL存储过程详解 mysql 存储过程
- MySQL存储过程详解 mysql 存储过程
- MySQL存储过程详解 mysql 存储过程
- MySQL存储过程详解 mysql 存储过程
- MySQL存储过程详解 mysql 存储过程
- MySQL存储过程详解 mysql 存储过程
- MySQL存储过程详解 mysql 存储过程
- MySQL存储过程详解 mysql 存储过程
- Directx11 6.15EXERCISES(给自己看的)
- 二维透视投影变换
- Hibernate Dao、Service 基类
- extern
- initWithNibName
- 初识Mysql存储过程
- Jmap相关
- 关于Xposed
- 兼容i6的三级菜单(不闪的)
- 关于maven的核心pom(项目对象模型)的一些理解
- php 支付宝的几个坑
- linux下opencv 安装配置
- tab切换
- iOS数组NSArray介绍