【存储过程】
一个存储过程就是一个可编程的函数, 它在数据库中保存
可以由一条或多条SQL语句组成
例子:
购物中点击了下单
删除购物车表某条记录
生成了一条订单记录
用户余额扣掉
商家余额加上
用户积分
...
定义一个存储过程
CREATE PROCEDURE proc1()
BEGIN
SELECT 1+1;
SELECT NOW();
SELECT LEFT('HAHA',2);
END
删除存储过程
DROP PROCEDURE proc1;
调用存储过程
CALL proc1();
用户变量
可以先在用户变量中保存值, 然后再引用它
这样就可以将值从一条语句传递到另一条语句
* 用户变量和连接有关
SET @x = 'hello';
SELECT @x;
SELECT 'world' INTO @y;
SELECT @y;
SET @z = 1+2+3;
SELECT @z;
查询的结果保存到x变量中:
SELECT (@x:=age) FROM student WHERE name = '张三';
SELECT @x;
SELECT * FROM student WHERE age = @x;
创建带参数的存储过程
参数类型
IN - 只能将参数的值传入过程, 在过程中的修改对变量没有影响, 就是个默认值
CREATE PROCEDURE proc2(IN p INT)
BEGIN
SELECT p;
SET p = 2;
SELECT p;
END
DROP PROCEDURE proc2;
SET @p = 1;
CALL proc2(@p);
SELECT @p;
结果:1,2,1
OUT - 参数的值传不进过程中, 但是在过程中对其修改的结果会影响变量的结果
CREATE PROCEDURE proc3(OUT p INT)
BEGIN
SELECT p;
SET p = 2;
SELECT p;
END
SET @p = 1;
CALL proc3(@p);
SELECT @p;
结果:null,2,2
INOUT - 既能传入, 对其进行的修改又能传出来
CREATE PROCEDURE proc4(INOUT p INT)
BEGIN
SELECT p;
SET p = 2;
SELECT p;
END
SET @p = 1;
CALL proc4(@p);
SELECT @p;
结果:1,2,2
【函数】
CREATE FUNCTION func1() RETURNS INT
BEGIN
RETURN 1;
END
函数必须放在查询语句中调用
SELECT func1();
已经写好的函数
SELECT NOW();
函数和存储过程的区别
1. 函数必须有返回值, 存储过程没有
2. 存储过程的参数可以是IN,OUT,INOUT; 函数的参数是IN类型的
使用函数和存储过程的好处
1. 可以实现较快的执行速度
2. 实现模块化编程
3. 可以使用控制流语句
4. 可以作为一种安全机制来使用
5. 减少网络流量