当前位置: 首页 > news >正文

mysql存储过程和函数

学习链接

mysql存储过程和函数

《跟老吕学MySQL》【MySQL进阶·过程化编程】6.2 LOOP

示例1

-- 先创建一个表,再创建一个函数,再创建一个存储过程。
/*创建一个表
*/
drop table if EXISTS user;
create table user(id int(10) not null auto_increment,user_name varchar(100) COMMENT '用户姓名',user_pwd varchar(50) COMMENT '用户密码',verify varchar(12) COMMENT '验证码',PRIMARY KEY(id)
) ENGINE = INNODB auto_increment = 1 DEFAULT CHARSET = utf8 COMMENT = '测试使用的user表'; /*创建一个生成verify密码的函数
*/
DROP FUNCTION IF EXISTS RANDOM_PASSWORD;
CREATE FUNCTION RANDOM_PASSWORD (psdLength int(10))
RETURNS VARCHAR(255)
BEGIN
-- 声明一堆变量形成变量池
DECLARE UPPER_CASE VARCHAR(26) DEFAULT 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
DECLARE NUMBERS VARCHAR(10) DEFAULT '0123456789';
-- 字符长度
DECLARE STR_LENGTH INT DEFAULT 0;
-- 未知变量
DECLARE i INT DEFAULT 0;
DECLARE random int DEFAULT 1;
DECLARE RANDOM_CHARACTER CHAR(1) default ' ';
-- 返回的密码的变量
DECLARE PASSWORD_RETURNED VARCHAR(255) DEFAULT '';
-- 得到长度
SET STR_LENGTH = psdLength;
-- 循环次数为传入的字符长度,生成字符长度等同于传入的长度。
WHILE i < STR_LENGTH DOif i % 2 = 0 THEN	SELECT FLOOR(1 + (RAND() * 24)) into random;SET RANDOM_CHARACTER = SUBSTR(UPPER_CASE, random + 1, 1);else SELECT FLOOR(1 + (RAND() * 8)) into random;SET RANDOM_CHARACTER = SUBSTR(NUMBERS, random + 1, 1);end if;SET PASSWORD_RETURNED = CONCAT(PASSWORD_RETURNED, RANDOM_CHARACTER);SET i = i + 1;
END WHILE;
RETURN PASSWORD_RETURNED;
END/*创建一个存储过程
*/
drop PROCEDURE IF EXISTS insert_thousand_data;
create PROCEDURE insert_thousand_data()
BEGINDECLARE PASS VARCHAR(10) DEFAULT '123456';select count(*) into @tnum from user; -- 将表的数据量赋值给变量add_loop:loop  -- 创建循环add_loopif @tnum < 1000 THEN  -- 判断表中是否小于1000条数据select RANDOM_PASSWORD(6) into PASS;INSERT into USER(user_name,user_pwd,verify) VALUES( CONCAT("user",@tnum+1) , '123456' , PASS);set @tnum = @tnum+1;elseleave add_loop;  -- 不满足条件后就跳出循环end if;  -- 必须结束ifend loop add_loop;  -- 必须结束循环select count(*) from user;select * from user;  -- 打印出插入数据后的表的数据
END/*运行*/
call insert_thousand_data();

示例2

-- 数据都是固定的,虽说使用了随机,这个随机太固定了。这样搞是不想使用其他手段,单靠一句sql语句来搞。当然能使用java写个循环就更好了
-- 搞这个循环插入只是为了看看在大量数据的情况下各个sql语句的执行效率-- 如果该名字存储过程已存在,则删除
DROP PROCEDURE IF EXISTS proc_initData1;
-- 创建
CREATE PROCEDURE proc_initData1 () 
BEGIN-- 声明一堆变量DECLARE i INT DEFAULT 0;DECLAREuid VARCHAR ( 255 ) DEFAULT 0; DECLAREcount DECIMAL(20,8) DEFAULT 0;DECLAREop INT DEFAULT 0;DECLAREage INT DEFAULT 0;DECLAREed varchar(255) DEFAULT '0';DECLAREsize varchar(255) DEFAULT '0';DECLAREstart varchar(255) DEFAULT '0';DECLAREopen varchar(255) DEFAULT '0';DECLAREx_name varchar(255) DEFAULT '0';DECLAREs_name varchar(255) DEFAULT '0';DECLAREv_name varchar(255) DEFAULT '0';DECLAREperiod varchar(255) DEFAULT '0';DECLARExhold varchar(255) DEFAULT '0';-- 开启事务START TRANSACTION;-- do while 循环WHILEi <= 10000 DO-- 将变量赋值SELECTCONCAT( '1', CEILING( RAND() * 9000000000+1000000000 ) ) INTO uid;SELECTFLOOR( 18 + ( RAND() * 9 ) ) INTO age;SELECTROUND( ( 10 + ( RAND() * 1001 ) ), 8 ) INTO count;select ROUND( RAND() * 10 , 0 ) INTO op;  selectconcat(left('qwertyuioadhncndhs',round(rand()*10,0)) ,         right('qwertyuioadhncndhs',round(rand()*10,0))) into ed;selectconcat(left('1574524147474',round(rand()*10,0)) , right('8785452521754',round(rand()*10,0))) into size;selectconcat(left('whoiekdjane',round(rand()*10,0)) , right('atlefjehsnhf',round(rand()*10,0))) into start;selectconcat(left('qwertyuioadhncndhs',round(rand()*10,0)) , right('qwertyuioadhncndhs',round(rand()*10,0))) into open;selectconcat(left('ereresdfswsdf',round(rand()*10,0)) , right('cvdfwsdfweef',round(rand()*10,0))) into x_name;selectconcat(left('sdfcxvxcsdfesfdsfe',round(rand()*10,0)) , right('dgdfgdfgdfgsdfsdf',round(rand()*10,0))) into s_name;selectconcat(left('qwertyuioadhncndhs',round(rand()*10,0)) , right('ertertertedgdfgd',round(rand()*10,0))) into v_name;selectconcat(left('ertertsdfwesdf',round(rand()*10,0)) , right('ertersdfcxvgrg',round(rand()*10,0))) into period;selectconcat(left('reggergdfgsdfwe',round(rand()*10,0)) , right('ertfgdsdfserg',round(rand()*10,0))) into xhold;-- 实际的插入操作INSERT INTO user3 ( uid, age, count,op, status ,ed,size,start,open,x_name,s_name,v_name,period,xhold ) VALUES(uid, age, count,op, 1,ed,size,start,open,x_name,s_name,v_name,period,xhold);-- 条件自增长SET i = i + 1;-- 结束循环END WHILE;-- 提交COMMIT;END -- 可以先执行到这里,下面的调用可以单独运行-- 调用
CALL proc_initData1();
http://www.dtcms.com/a/533933.html

相关文章:

  • 青海省高等级公路建设管局网站免费windows10云主机下载
  • 西安市建网站给单位做网站需要多少钱
  • 网站建设实践鉴定铜川泰士公馆建设网站
  • 电子商务网站有哪些内容上海网站开发团队
  • 长春电商网站建设wordpress js上传图片
  • 中国工商注册网官网淄博网站建设优化珍云
  • 营销型网站建设怎么做营销网站建设温州哪里有网站优化
  • 构建稳定数据管道:淘宝商品详情 API 的接入、监控与错误处理
  • Redis下载安装教程与使用,以及基础知识的应用
  • 哪个网站可以做视频外链企业网站建设的一般原则
  • 网站 盈利自己做个网站要多少钱
  • Gorm(十)计数 / 存在性
  • SAP 维护视图变式(Maintenance View Variants)
  • 苏州建设公司网站上海的公司地址
  • 景安网站备案要多久免费网址导航网站建设
  • 杨浦区建设小学网站首页WordPress有意思的代码特效
  • STM32F103C8T6_SPI完整教程
  • 使用蓝图组件
  • 哈尔滨网站建设培训班技术网站模版
  • 网站服务器和直播服务器一样吗深圳网站设计官网
  • 大型网站如何做别名夏津建设局网站
  • 20-Java-面向对象-static
  • 株洲网站建设优化网站建设方案书含合同
  • 网站页面设计稿做网站构架
  • 2019/12 JLPT听力原文 问题四
  • 宁海县城镇建设局网站怎么做论坛社区网站
  • 垡头做网站的公司室内设计接单网站
  • 郑州区块链数字钱包网站开发过程西宁设计网站
  • WordPress全站展示建网站一般多少钱
  • 自己做的网站发布详细步骤深圳网站设计报价