mysql的学习笔记(七)

1.自定义函数,函数可以返回任意类型的值,同样可接说这些类型的参数。

CREATE FUNCTION function_name
RETURNS
{STRING|INTER|REAL|DECIMAL}
routine_body

 函数体由合法的SQL语句构成。

函数体可以是简单的SELECT或INSERT语句。

函数体如果为复合结构使用BEGIN_END语句。

复合结构可以包含声明,循环,控制结构。

2.创建函数

如果开启了bin-log, 我们就必须为我们的function指定一个参数。

我们先不指定参数,解决办法

set global log_bin_trust_function_creators=TRUE;

 创建一个不带参的简单函数

CREATE FUNCTION f1() RETURNS VARCHAR(30)
RETURN NOW();

 现在运行,可得到现在时间

SELECT f1()

删除函数

DROP FUNCTION f1;

 创建带有参数的自定义函数

CREATE FUNCTION f2(num1 SMALLINT UNSIGNED,num2 SMALLINT UNSIGNED)
RETURNS FLOAT(10,2) UNSIGNED
RETURN (num1+num2)/2;

 复合结构函数体的自定义函数

CREATE FUNCTION f3(name VARCHAR(20)) RETURNS INT UNSIGNED 
BEGIN
INSERT Persons VALUES('A','B','C',name);
RETURN LAST_INSERT_ID();
END$$

 3.存储过程,SQL语句和控制语句的预编译集合。

增强SQL语句的功能和灵活,实现较快的执行速度,减少网络流量。

创建一个简单的不带参数存储过程

CREATE PROCEDURE sp1() SELECT VERSION();

 调用我们创建的存储过程

CALL sp1()

 有参数的存储过程

CREATE PROCEDURE sp2(IN uid INT UNSIGNED)
BEGIN
DELETE FROM tdb_goods WHERE id=uid;
END

 IN表示输入参数,向存储过程传递一个参数。必须在调用存储过程时指定。存储过程中修改该参数得值不能被返回。

CREATE PROCEDURE removeAndUser(IN p_id INT UNSIGNED,OUT userId INT UNSIGNED)
BEGIN
DELETE FROM tdb_goods WHERE id=p_id;
SELECT COUNT(goods_id) FROM tdb_goods INTO userId; 
END

 OUT该值可以在存储过程内被改变,并可返回

调用removeAndUser

CALL removeAndUser(50,@unms);

 @nums是全局变量,跟DECLARE不同,DECLARE是在BEGIN和END之间有效,为局部变量。

删除存储过程

DROP PROCEDURE removeAndUser;

 存储过程和自定义函数的区别

存储过程实现的功能复杂一些,而函数针对性更强。

存储过程可以返回多个值,函数只能有一个返回值。

存储过程一般独立执行,而函数可以作为其他SQL语句的组成部分来实现。

持续更新。。。

猜你喜欢

转载自www.cnblogs.com/dslx/p/9649239.html