一、存储过程
1、语法
create procedure name([IN |OUT |INOUT ] 参数名 数据类形)
begin
......
end;
IN:输入参数:表示该参数的值必须在调用存储过程时指定,在存储过程中修改该参数的值不能被返回
OUT:输出参数:该值可在存储过程内部被改变,并可返回
INOUT:输入输出参数:调用时指定,并且可被改变和返回
2、优缺点:
缺点:
(1) 较应用程序代码,存储过程的代码效率稍微要差些
(2)给数据库增加额外压力,其扩展性比应用程序差
(3)安全性:可能会有安全隐患,比如说加密信息,如果将加密算法放在应用程序,那么攻击需要将数据库和应用程序都击破才能获得数据,如果全部都放在数据库,则只要攻破数据库,那么数据将会泄露
优点:
(1)节省带宽和网络延迟
(2)存储过程能实现较快的执行速度
(3)存储过程增强了SQL语言的功能和灵活性
3、存储过程的变量
(1)定义局部变量
DECLARE variable_name [,variable_name...] datatype [DEFAULT value];
(2)赋值
SET 变量名 = 表达式值 [,variable_name = expression ...]
(3)用户变量
用户变量名一般以@开头
例子:
mysql > CREATE PROCEDURE GreetWorld( ) SELECT CONCAT(@greeting,' World');
mysql > SET @greeting='Hello';
mysql > CALL GreetWorld( );
4、控制语句
(1)if then else endif
->if parameter=0 then
-> update t set s1=s1+1;
-> else
-> update t set s1=s1+2;
-> end if;
(2)case var
when then
when then
else
end case
例子:
-> case var
-> when 0 then
-> insert into t values(17);
-> when 1 then
-> insert into t values(18);
-> else
-> insert into t values(19);
-> end case;
-> end;
(3)while ···· end while:
4、一些基本命令
SHOW CREATE PROCEDURE 数据库.存储过程名;
二、触发器
1、语法
create trigger triggerName
after/before insert/update/delete on 表名
for each row #这句话在mysql是固定的
begin
sql语句;
end;
2、优缺点
(1)问题难以排查
(2)可能导致死锁和锁等待
(3)更新不一定是原子性的
三、游标
1、游标只能在存储过程中使用
2、语法
- create procedure test2()
- declare o int 0;
- begin
- declare cursorTest cursor
- for
- select *
- from allIntersection;
- open cursorTest;
- fetch cursorTest into o;
- close cursorTest;
- end;