创建函数

因为我们平时经常需要创建不同日期的数据,以模拟的场景,覆盖更多的用例,所以这里写了一个返回随机日期的demo。大家可以自行扩展。

DROP FUNCTION IF EXISTS milan_get_rand_time;
CREATE FUNCTION milan_get_rand_time(type VARCHAR(50)) RETURNS VARCHAR(20)
BEGIN
DECLARE _day INT DEFAULT (FLOOR(RAND() * 60)); -- 随机天数 60天以内随机天数
DECLARE _hour INT DEFAULT (FLOOR(RAND() * 24)); -- 随机小时
DECLARE _minute INT DEFAULT (FLOOR(RAND() * 60));-- 随机分
DECLARE _second INT DEFAULT (FLOOR(RAND() * 60));-- 随机秒
DECLARE _myday VARCHAR(20);
IF type = 'before' THEN
set _day =_day;
ELSEIF type='after' THEN
SET _day =-1*_day;
ELSE
SET _day=0;
END IF; SET _myday = DATE_FORMAT(DATE_SUB(NOW(),INTERVAL _day DAY) ,'%Y-%m-%d'); -- 获取一个随机的日期
-- SET _myday = DATE_SUB(CURRENT_DATE(),INTERVAL _day DAY); -- 获取一个随机的日期
SET _myday = CONCAT(_myday,' ',LPAD(_hour,2,0),':',LPAD(_minute,2,0),':',LPAD(_second,2,0)); -- 在这个日期上加上时分秒
RETURN _myday;
END

调用

SELECT milan_get_rand_time('after');  -- 返回 2018-03-02 22:07:14
SELECT milan_get_rand_time('before'); -- 2018-02-02 03:17:10 -- 补位函数
-- 向前补位
select LPAD(1,3,0); --
-- 向后补位
select RPAD(1,3,0); --

 创建存储过程

每次获取一条随机数据,插入到表中。用select。。。into。语句。因为milan_table的game_id是主键,为了防止重复写入报错,所以用了ignore忽略错误。

DROP PROCEDURE IF EXISTS milan_test;
CREATE PROCEDURE milan_test(in add_count int,OUT data_count INT) -- in 入参 out 出参
BEGIN
DECLARE _game_id BIGINT;
DECLARE _game_name VARCHAR(50);
-- DELETE FROM milan_table;
WHILE add_count > 0 DO
SELECT game_id,game_name INTO _game_id,_game_name from t_game ORDER BY RAND() LIMIT 1;
INSERT IGNORE INTO milan_table VALUES (_game_id,_game_name,milan_get_rand_time('before'));
SET add_count=add_count-1;
END WHILE;
SET data_count =(select count(*) from milan_table);
SELECT * from milan_table;
end -- 调用:
SET @count =NULL;
CALL milan_test(5,@count);
SELECT @count;

根据游标写入:

DROP PROCEDURE if EXISTS curtest;
CREATE PROCEDURE curtest()
BEGIN
DECLARE _uid INT;
DECLARE _account VARCHAR(20);
DECLARE done INT DEFAULT FALSE;
-- 遍历数据结束标志
DECLARE cur CURSOR FOR SELECT uid,account FROM tmm_tmp_testaccount ;
-- 将结束标志绑定到游标
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
OPEN cur;
read_loop: LOOP
FETCH cur INTO _uid,_account;
IF done THEN
LEAVE read_loop;
END IF;
UPDATE tmm_tmp_testaccount set `desc` = NULL where uid =_uid;
END LOOP;
CLOSE cur;
END
跳出存储过程,相当于return语句:
label:BEGIN
DECLARE _uid int DEFAULT (select uid from tmm_tmp_testaccount where flag =_flag limit 1);
IF ISNULL(_uid) THEN
leave label;
END IF;
END

临时表

DROP PROCEDURE if EXISTS temp_table;
CREATE PROCEDURE temp_table()
BEGIN
DROP TABLE if EXISTS temp_table;
CREATE TEMPORARY TABLE temp_table(
uid INT NULL,
n VARCHAR(10) NULL
);
INSERT INTO temp_table (uid,n) VALUES ('','milan1');
INSERT INTO temp_table (uid,n) VALUES ('','milan2');
select * from temp_table;
END

MYSQL 存储过程、函数、临时表、游标的更多相关文章

  1. MySQL中函数、游标、事件、视图

    MySQL中函数.游标.事件.视图基本应用举例(代码) MySQL中function用户自定义函数c,fun,fun是面向过程的实现方式只能传入参数,或不传入参数,不能传出参数,必有返回值函数中是不能 ...

  2. MySQL 存储过程 函数 routine 权限

    MySQL 存储过程 函数 routine 权限 Table of Contents 1. mysql存储过程/函数权限 1.1. 相关对象操作权限检查 1.2. 执行权限 1 mysql存储过程/函 ...

  3. mysql 存储过程中使用游标中使用临时表可以替代数组效果

    mysql不支持数组.但有时候需要组合几张表的数据,在存储过程中,经过比较复杂的运算获取结果直接输出给调用方,比如符合条件的几张表的某些字段的组合计算,mysql临时表可以解决这个问题.临时表:只有在 ...

  4. mysql 存储过程 函数 触发器

    mysql存储过程与函数 存储过程下载  demo mysql> delimiter // -- 这里//为修改默认分隔符: mysql> CREATE PROCEDURE simplep ...

  5. 菜鸟使用MySQL存储过程and临时表,供新手参考,请高手斧正

    因为公司最近的一个项目,第一次用到了MySQL(5.10版本),之前听传说MySQL很厉害的样子,因为开源而神奇,但是现在用起来, 感觉并不好啊!我知道是我水平太down,呜呜呜,请各路神仙略施小技, ...

  6. MySQL存储过程和临时表

    MySQL创建存储过程 MySQL中,创建存储过程的基本形式如下: CREATE PROCEDURE sp_name ([proc_parameter[,...]]) [characteristic ...

  7. MySQL中函数、游标、事件、视图基本应用举例(代码)

    MySQL中function用户自定义函数c,fun,fun是面向过程的实现方式只能传入参数,或不传入参数,不能传出参数,必有返回值函数中是不能有create table drop table之类的语 ...

  8. mysql存储过程中使用游标

    用户变量一般以@开头,作用于全局范围 局部变量需用 declare 定义格式为 declare 变量名 数据类型 [default value]; mysql 数据类型有 int ,float,dat ...

  9. MySql存储过程—7、游标(Cursor)

    |字号 订阅 1.游标的作用及属性 游标的作用就是用于对查询数据库所返回的记录进行遍历,以便进行相应的操作:游标有下面这些属性: a.游标是只读的,也就是不能更新它: b.游标是不能滚动的,也就是只能 ...

  10. Paip.断点调试MYSQL存储过程跟函数的解决方案大法

    Paip.断点调试MYSQL存储过程跟函数的解决方案大法 作者Attilax ,  EMAIL:1466519819@qq.com  来源:attilax的专栏 地址:http://blog.csdn ...

随机推荐

  1. consul dns 转发配置

    测试使用dnsmasq.  优势:可以方便的进行应该编码,进行动态域名解析,容错处理.   因为consul 默认的dns 为127.0.0.1 8600  所以配置如下:  文件目录: /etc/d ...

  2. php系统函数-----数组函数

  3. ubuntu12.04LTS安装以及卸载 QT4.8.6和QT creator2.5.2

    鉴于,下载QT5.5安装,编译总是有问题,可能是配置不正确. 于是按照论坛的一些资料,就换回QT4版本,具体实施步骤如下: 在qt官网http://download.qt.io/archive/ 下的 ...

  4. Eclipse与IDEA快捷键对比

    from:http://blog.csdn.net/dc_726/article/details/9531281 花了一天时间熟悉IDEA的各种操作,将各种快捷键都试了一下,感觉很是不错!于是就整理了 ...

  5. autoreconf报错LC_ALL和LANGUAGE未设置

    报错提示: merlin@ubuntu:/opt/smbshared/projects/x86test/openvpn/openvpn-release-2.4$ autoreconf -i -v -f ...

  6. php 运行模式

    1.php最常见的五种运行模式. CGI 通用网关接口 FastCGI 常驻内存的CGI CLI 命令行 Web模块  Apache等Web服务器 模块的形式加载php进程 ISAPI 已经不用了 2 ...

  7. java代码啊==indexOf()方法返回字符第一次出现的位置

    package com.s.x; public class Wang { public static void main(String[] args) { if ("woaini" ...

  8. 《Hadoop技术内幕》读书笔记——Task运行过程分析

    本文是董西成的Hadoop技术内幕一书的读书章节总结. 第八章 Task运行过程分析 所有Task需要周期性地向TaskTracker汇报最新进度和计数器值,而这正是由Reporter组件实现的,其中 ...

  9. JPype:实现在python中调用JAVA

    一.JPype简述 1.JPype是什么? JPype是一个能够让 python 代码方便地调用 Java 代码的工具,从而克服了 python 在某些领域(如服务器端编程)中的不足. 2.JPype ...

  10. jaxp使用笔记

    XML文件的解析技术有DOM和SAX方式,在Android中还有pull解析方式,这里不再讨论 DOM解析的方式和js中的DOM操作是一致的,DOM解析一次将文档加载入内存建立树型模型,但是如果XML ...