【MySQL】存储过程Demo
在 MySQL 中,存在函数和存储过程,他们两种相似⼜有些不同,函数有返回值⽽存储过程没有返回值。
当我们有批量插⼊数据的需求时,可以使⽤函数+存储过程完成插⼊数据的随机性,下⾯写⼀个⼩demo,模拟两张表,插⼊1000条随机数据。
创建两张表,⼀张部门表,⼀张员⼯表。
函数
接下来我们写两个函数,⼀个⽣成随机字符串,⼀个⽣成随机数字。
len函数的使用方法python这⾥要说⼀下的是,我们通过
DELIMITER $$
把 mysql 原本的结束符改成了 $$,是为了防⽌多⾏被默认的 ;结束符提交。
DELIMITER $$
CREATE FUNCTION rand_string(n INT)RETURNS VARCHAR(255)
BEGIN
DECLARE chars_str VARCHAR(100)DEFAULT'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
DECLARE return_str VARCHAR(255)DEFAULT'';
DECLARE i INT DEFAULT0;
WHILE i < n DO
SET return_str = CONCAT(return_str,SUBSTRING(chars_str,FLOOR(1+ RAND()*52),1));
SET i = i +1;
END WHILE;
RETURN return_str;
END $$
DELIMITER $$
CREATE FUNCTION rand_num()RETURNS INT(5)
BEGIN
相对路径改成绝对路径DECLARE i INT DEFAULT0;
SET i = FLOOR(0+ RAND()*10);
RETURN i;
END $$
存储过程
编写批量插⼊ emp 表数据的存储过程
DELIMITER $$
蜂王胎能治卵巢早衰吗CREATE PROCEDURE insert_emp(IN START INT(10),IN max_num INT(10))
BEGIN
DECLARE i INT DEFAULT0;
培训班招生海报SET autocommit =0;
REPEAT命名管道和匿名管道的区别
SET i = i +1;
INSERT INTO emp(empno, ename, job, mgr, hiredate, sal, comm, deptno)VALUES((START+ i), rand_string(6),'SALE',001, CURDATE(),1000,500, ran d_num());
UNTIL i = max_num
END REPEAT;
COMMIT;
END $$
编写批量插⼊ dept 表数据的存储过程
DELIMITER $$
CREATE PROCEDURE insert_dept(IN START INT(10),IN max_num INT(10))
BEGIN
DECLARE i INT DEFAULT0;
SET autocommit =0;
REPEAT
SET i = i +1;
INSERT INTO dept(deptno, dname, loc)VALUES((START+ i), rand_string(6), rand_string(8));
UNTIL i = max_num
END REPEAT;
COMMIT;
END $$
接下来就只要调⽤存储过程就ok啦!!
DELIMITER;
CALL insert_dept(1,10);
DELIMITER;
mysql查看所有存储过程
CALL insert_emp(1,1000);

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。