MySQL存储过程
一.什么是存储过程
存储过程是在大型数据库系统中,一组为了完成特定功能的sql语句集,存储在数据库中。经过第一次编译后再次调用不需要再次编译,用户通过指定存储过程的名字和参数来执行它。
二.存储过程的优点
- 存储过程只在创造时编译,以后每次执行存储过程都不需要再重新进行编译,而一般的sql语句每执行一次就需要编译一次,所有存储过程可以提高数据库的执行速度。
- 当对数据库进行复杂操作时,可将此复杂操作用存储过程进行封装,与数据库提供的事物处理结合一起使用。
- 存储过程可以重复使用,减少开发人员的工作量。
- 安全性高,可指定特定用户对指定的存储过程的使用权。
三.创建存储过程
基本语法:
create procedure 存储过程名(参数,参数....)
begin
// 代码
end$
存储过程中的参数分为输入参数(in),输出参数(out)和输入输出参数(inout),默认是输入参数。如果存储过程中只有一条语句begin和end可以省略。
例1:查询表中数据一条语句
create procedure p1()
begin
select * from t_user;
end
调用存储过程:
call p1();
例2:输入一个值如果大于等于22则查询大于22岁的用户,不然就查询小于22岁的用户
create procedure p2(age int(10))
begin
if age >= 22 then
select * from t_user t where t.age >= 22;
else
select * from t_user t where t.age < 22;
end if;
end
调用存储过程:
call p2(10);
四.带有输入和输出的存储过程
创建存储过程:
create procedure p3(in n int , out res int)
begin
set res = n*n;
end
调用存储过程:
set @res = 0;call p3(10,@res);select @res;
结果:
五.删除存储过程
drop procedure [if exists ]存储过程名
六.向表中插入1000万条数据做压力测试
1.新建一张bigdata表,里面只有一个number字段
create table bigdata(number int);
2.创建一个存储过程向表中插数据
DELIMITER $$
CREATE PROCEDURE insert_bigdata (IN startnum INT, IN num INT)
BEGIN
DECLARE i INT DEFAULT 0 ;
SET autocommit = 0 ;
REPEAT
SET i = i + 1 ;
INSERT INTO bigdata (number)VALUES(startnum + i) ;
UNTIL i = num
END REPEAT ;
COMMIT ;
END $$
3.调用存储过程向表中插数据
call insert_bigdata(100,500000);