优势: 1.存储过程只在创造时进行编译,以后每次执行存储过程都不需再重新编译,而一般SQL语句每执行一次就编译一次,所以使用存储过程可提高数据库执行速度,效率要比T-SQL语句高。
查询数据库中的存储过程和函数
select `name` from mysql.proc where db = 'xx' and `type` = 'PROCEDURE' //存储过程
select `name` from mysql.proc where db = 'xx' and `type` = 'FUNCTION' //函数
show procedure status; //存储过程
show function status; //函数
位置:
删除存储过程
例如删除PROC_SEINFO存储过程的SQL语句如下
DROP PROCEDURE PROC_SEINFO
例如,删除多个存储过程proc10、proc20和proc30
DROP PROCEDURE proc10, proc20, proc30
例如,删除存储过程组procs(其中包含存储过程proc1、proc2、proc3)
DROP PROCEDURE procs
教程
https://www.runoob.com/w3cnote/mysql-stored-procedure.html
https://www.cnblogs.com/geaozhang/p/6797357.html
蔡工给的例子
-- 创建存储过程(查询的)
DELIMITER $ (注意要加这个才能创建成功)
CREATE PROCEDURE pro_test()
BEGIN
-- 可以写多个sql语句;
SELECT * FROM employee;
END $
(默认情况下,存储过程和默认数据库相关联,如果想指定存储过程创建在某个特定的数据库下,那么在过程名前面加数据库名做前缀,如 比lucax库创建函数pro_test() lucax.pro_test())
-- 执行存储过程(先执行上面的保存执行的语句,再执行这句)
CALL pro_test();
----带输入参数的
DELIMITER $
CREATE PROCEDURE pro_test7(IN `p_playerno` VARCHAR(20))
BEGIN
SELECT * from ii WHERE name=p_playerno;
END$
-- 执行存储过程(先执行上面的保存执行的语句,再执行这句)
CALL pro_test("123");
输入类型:
IN p_playerno INTEGER 数字
IN `p_playerno` VARCHAR(20) 字符
函数内赋值语法
set p_playerno=2;
sql执行赋值语法
set @p_playerno=2;
CALL pro_test(@p_playerno);
循环语法
DELIMITER $
CREATE PROCEDURE proc4()
begin
declare var int;
set var=0;
while var<6 do
insert into t values(var);
set var=var+1;
end while;
end;
传2个参数的写法
CREATE PROCEDURE CGthert(IN p_playerno INTEGER,IN p_playerno2 INTEGER)
begin
while p_playerno < p_playerno2 do
insert into t values(p_playerno);
set p_playerno=p_playerno+1;
end while;
end;