MySQL存储过程

MySQL存储过程

一.什么是存储过程

存储过程是在大型数据库系统中,一组为了完成特定功能的sql语句集,存储在数据库中。经过第一次编译后再次调用不需要再次编译,用户通过指定存储过程的名字和参数来执行它。

二.存储过程的优点

  1. 存储过程只在创造时编译,以后每次执行存储过程都不需要再重新进行编译,而一般的sql语句每执行一次就需要编译一次,所有存储过程可以提高数据库的执行速度。
  2. 当对数据库进行复杂操作时,可将此复杂操作用存储过程进行封装,与数据库提供的事物处理结合一起使用。
  3. 存储过程可以重复使用,减少开发人员的工作量。
  4. 安全性高,可指定特定用户对指定的存储过程的使用权。

三.创建存储过程

基本语法:

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);
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章