deterministic mysql_mysql中的过程和函数

本文详细介绍了MySQL中创建、调用、查看、修改和删除存储过程与函数的步骤,强调了`DETERMINISTIC`选项对于优化器的影响。通过示例展示了如何创建和使用这些过程和函数,并提到它们的复用性、高效性和安全性优势。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 创建存储过程和函数

创建存储过程和函数的create语法规范如下:

CREATE

[DEFINER = { user | CURRENT_USER }] ##很多时候不需要特别声明

PROCEDURE sp_name ([proc_parameter[,...]])

[characteristic ...] routine_body

CREATE

[DEFINER = { user | CURRENT_USER }]

FUNCTION sp_name ([func_parameter[,...]]) ##输入参数

RETURNS type ## 声明返回值

[characteristic ...] routine_body

proc_parameter:

[ IN | OUT | INOUT ] param_name type ##声明输入输出参数

func_parameter:

param_name type ##输入参数,由于其输出参与已经在return中声明,不需要再指定

type:

Any valid MySQL data type

characteristic:

COMMENT 'string'

| LANGUAGE SQL

| [NOT] DETERMINISTIC ##默认为NOT DTERMINISTIC

| { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }

| SQL SECURITY { DEFINER | INVOKER }

routine_body:

Valid SQL routine statement

如果没有声明[NOT] DETERMINISTIC选项,则mysql默认的选项为NOT DETERMINISTIC,意味着mysql针对DETERMINISTIC的优化器不会开启。因此这个选项需要特别注意的写上。

但是仅有create语句是不够的,一般创建过程和函数有一下3个步骤:

a 修改delimiter

b create语句+begin...end语句 作为存储过程和函数的主体部分

c 恢复原有的delimiter

如 官方文档中创建存储过程的实例:

mysql> delimiter //

mysql> CREATE PROCEDURE simpleproc (OUT param1 INT)

-> BEGIN

-> SELECT COUNT(*) INTO param1 FROM t;

-> END//

Query OK, 0 rows affected (0.00 sec)

mysql> delimiter ;

创建函数的示例:

mysql> delimiter //

mysql> CREATE FUNCTION hello (s CHAR(20))

mysql> RETURNS CHAR(50) DETERMINISTIC

-> RETURN CONCAT('Hello, ',s,'!');

Query OK, 0 rows affected (0.00 sec)

mysql> delimiter ;

2 调用方法

CALL sp_name([parameter[,...]])

CALL sp_name[()]

3 查看状态

SHOW {PROCEDURE | FUNCTION} STATUS [LIKE 'pattern']

或者:

SHOW CREATE {PROCEDURE | FUNCTION} sp_name

或者从information_schema.Routines表中查看

SELECT * FROM information_schema.Routines WHERE ROUTINE_NAME=' sp_name ' ;

4 修改

ALTER {PROCEDURE | FUNCTION} sp_name [characteristic ...]

5 删除

DROP {PROCEDURE | FUNCTION} [IF EXISTS] sp_name

6 过程和函数的好处

可以参见博文利用mysql的存储过程比单独执行mysql的优势在哪里?好处有什么?

简单说起来主要是:可复用,高效率,省流量,更安全。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值