1、建立存储过程方式一:
mysql中存储过程属于函数一栏中,点击新建函数会有让你选择是存储过程还是函数
接下来是存储过程中设置的参数:
IN 输入参数:表示该参数的值必须在调用存储过程时指定,在存储过程中修改该参数的值不能被返回,为默认值
OUT 输出参数:该值可在存储过程内部被改变,并可返回
INOUT 输入输出参数:调用时指定,并且可被改变和返回
接下来就在BEGIN和END中填写需要的sql语句,和平时使用的相同
保存后存储在函数下,执行时可以直接运行,查看结果。
注:当没有参数或者只有IN输入参数时,可以直接在存储过程中进行运行查看结果,否则可以通过写查询语句,进行查询,例如:
方式二:还可以直接在查询中写存储过程,并执行。
2、存储过程的简单实例
(1)IN的使用
BEGIN
#Routine body goes here...
select * from book WHERE studentid=stuid;
set stuid=2;
select * from book WHERE id=stuid;
END
BEGIN与END中可以写多个sql语句,对应多个运行结果。
结果二:
即使参数值被修改,也不影响输出的结果。
(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的使用
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加到date2CURRENT_DATE ( ) //当前日期CURRENT_TIME ( ) //当前时间CURRENT_TIMESTAMP ( ) //当前时间戳DATE (datetime ) //返回datetime的日期部分DATE_ADD (date2 , INTERVAL d_value d_type ) //在date2中加上日期或时间DATE_FORMAT (datetime ,FormatCodes ) //使用formatcodes格式显示datetimeDATE_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) //分返回符号,正负或0SQRT(number2) //开平方