1、建立存储过程
方式一:

mysql中存储过程属于函数一栏中,点击新建函数会有让你选择是存储过程还是函数

wKiom1XRpkawYTWLAADGx5FV-nc861.jpg

接下来是存储过程中设置的参数:

IN 输入参数:表示该参数的值必须在调用存储过程时指定,在存储过程中修改该参数的值不能被返回,为默认值

OUT 输出参数:该值可在存储过程内部被改变,并可返回

INOUT 输入输出参数:调用时指定,并且可被改变和返回

spacer.gif

接下来就在BEGINEND中填写需要的sql语句,和平时使用的相同spacer.gif 

保存后存储在函数下,执行时可以直接运行,查看结果。

注:当没有参数或者只有IN输入参数时,可以直接在存储过程中进行运行查看结果,否则可以通过写查询语句,进行查询,例如:

spacer.gif

 

 

方式二:还可以直接在查询中写存储过程,并执行。

2、存储过程的简单实例

(1)IN的使用

BEGIN

#Routine body goes here...

   select * from book WHERE studentid=stuid;

   set stuid=2;

   select * from book WHERE id=stuid;

END

  BEGINEND中可以写多个sql语句,对应多个运行结果。

spacer.gif

 

结果二:

spacer.gif

 

  即使参数值被修改,也不影响输出的结果。

(2)OUT的使用

    存储过程:

   BEGIN

#Routine body goes here...

 SELECT bookName,max(id) from book WHERE book.studentid=stuid GROUP BY bookname ORDER BY id DESC;

SET max=1;

SELECT max;

END

  执行语句:

SET @max=0,@stuid=1;

CALL outtest(@max,@stuid)

  参数:OUT `max` int,IN `stuid` int

因为max为输出参数,只能输出,所以如果max不在存储过程中进行复制的话,会输出NULL,但是一旦赋值,就会输出赋值之后的数据。

(3)INOUT的使用

  

spacer.gif

spacer.gif

 

    

3、存储过程学习

(1)SELECT  ..INTO.. 可以把查询的字段赋值给输出字段

     例如:SELECT COUNT(*) INTO param1 FROM t;

(2)删除:

      DROP PROCEDURE  IF  EXISTS存储过程名

(3)变量的使用:if-then -else

BEGIN

#Routine body goes here...

 DECLARE var int;

 SELECT COUNT(*) from book;

 SELECT num;

 SET num=9;

 SELECT num;

 SET var=num+1;

 if var=10 THEN

 update book set studentid=var WHERE id=1;

 ELSE

SELECT var;

 END IF;

END

注:DECLARE var int;语句要写在最上面

(4)条件语句:(case

Case如下:

 

BEGIN

#Routine body goes here...

DECLARE var int;

set var=casetest+1;

 CASE var

  WHEN var=0 THEN

INSERT INTO book(bookName,studentid) VALUES("yuwen",2);

when 1 THEN

    INSERT INTO book(bookName,studentid) VALUES("yuwen",1);

  when 2 THEN

INSERT INTO book(bookName,studentid) VALUES("yuwen",0);

 END CASE;

END

        

(5)循环语句

BEGIN

#Routine body goes here...

 DECLARE var int;

 SET var=1;

 WHILE var<6 DO

 INSERT into book(bookName,studentid) VALUES("shuxue1",var);

 SET var=var+1;

 END WHILE;

END

(6)

4、其他操作

(1)查看所有存储过程:

 SHOW PROCEDURE STATUS

(2)Mysql数据库关于常见的时间函数:

日期时间类

  ADDTIME (date2 ,time_interval ) //time_interval加到date2
CURRENT_DATE ( ) //当前日期
CURRENT_TIME ( ) //当前时间
CURRENT_TIMESTAMP ( ) //当前时间戳
DATE (datetime ) //返回datetime的日期部分
DATE_ADD (date2 , INTERVAL d_value d_type ) //date2中加上日期或时间
DATE_FORMAT (datetime ,FormatCodes ) //使用formatcodes格式显示datetime
DATE_SUB (date2 , INTERVAL d_value d_type ) //date2上减去一个时间
DATEDIFF (date1 ,date2 ) //两个日期差
DAY (date ) //返回日期的天
DAYOFWEEK (date ) //星期(1-7) ,1为星期天
DAYOFYEAR (date ) //一年中的第几天
EXTRACT (interval_name FROM date ) //date中提取日期的指定部分
NOW ( ) //当前时间
  WEEK (date_time [,start_of_week ]) //第几周
  YEAR (datetime ) //年份
  DAYOFMONTH(datetime) //月的第几天
  HOUR(datetime) //小时
  LAST_DAY(date) //date的月的最后日期
  MICROSECOND(datetime) //微秒
  MONTH(datetime) //
  MINUTE(datetime) //分返回符号,正负或0
  SQRT(number2) //开平方