MySQL创建存储过程的语法_mysql存储过程学习笔记--创建语法

存储过程创建语法:

CREATE PROCEDURE procedure_name ([parameter[,...])

[LANGUAGE SQL]

[ [NOT] DETERMINISTIC ]

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

[SQL SECURITY {DEFINER|INVOKER} ]

[COMMENT comment_string]

procedure_statements

可用SHOW PROCEDURE STATUS 或 SHOW CREATE PROCEDURE 来查看存储过程信息

另,系统表INFORMATION_SCHEMA.ROUTINES也包含了存储过程的一些信息

同样地,函数也可以使用同样方式查看(SHOW FUNCTION STATUS)

函数的创建

CREATE FUNCTION function_name (parameter[,...])

RETURNS datatype

[LANGUAGE SQL]

[ [NOT] DETERMINISTIC ]

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

[ SQL SECURITY {DEFINER|INVOKER} ]

[ COMMENT comment_string ]

语句体

函数与存储过程基本一样,其区别主要有:

1、  要使用RETURNS指定返回类型

2、  函数必须返回值,且在语句体中使用RETURN返回(注意:指定返回类型用RETURNS,返回值用RETURN)

3、  参数不区分IN,OUT,全部为IN类形

例:

CREATE FUNCTION cust_status(in_status CHAR(1))

RETURNS VARCHAR(20)

BEGIN

DECLARE long_status VARCHAR(20);

IF in_status = 'O' THEN        SET long_status='Overdue';

ELSEIF in_status = 'U' THEN    SET long_status='Up to date';

ELSEIF in_status = 'N' THEN    SET long_status='New';

END IF;

RETURN(long_status);

END;

调用:

SELECT cust_status('O');

触发器CREATE [DEFINER={user|CURRENT_USER}] TRIGGER trigger_name

{BEFORE|AFTER} {UPDATE|INSERT|DELETE}

ON table_name

FOR EACH ROW

trigger_statements

意义:当对表table_name执行update,insert,delete操作之前(before)或之后(after)时触发语句trigger_statements操作

例:

mysql> CREATE TRIGGER account_balance_au

AFTER UPDATE ON account_balance FOR EACH ROW

BEGIN

DECLARE dummy INT;

IF NEW.balance<0 THEN

SET NEW.balance=NULL;

END IF;

END

上述触发器表示:当更新表account_balance之后,如果更新的值balance小于0,则将它改为NULL,

注:如果为OLD.balance则表示更新前的原值

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值