一, 语法 -摘自mysql5.6手册
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
type:
Any valid MySQL data type
characteristic:
COMMENT ‘string’
| LANGUAGE SQL
| [NOT] DETERMINISTIC
| { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }
| SQL SECURITY { DEFINER | INVOKER }
routine_body:
Valid SQL routine statement
二, 实例
mysql>delimiter //
drop procedure if exsits articles_procedure;
create procedure articles_procedure(in articlesId int ,in titles varchar(50))
begin
declare ids int;
declare content varchar(50);
set ids = articlesId;
set content = titles;
update article set title = content where id = ids;
end//
delimiter ;
剖析:
- delimiter // 表示 把mysql的分隔符换成 //
- drop 语句, 判断名称是articles_procedure的触发器是否存在,存在即删除
- create 语句, 创建 触发器, 名称是articles_procedure ,参数一 articlesId,类型是int,参数二 titles , 类型是 varchar(50)
- IN, OUT或INOUT 固定语法, 详情请看-摘自mysql5.6手册 , 我理解的不深
- begin , end 中间为 主题
- declare 定义变量,
- set 给变量赋值 ,如果set 的变量前面有@符号表示这个变量是一个会话变量。否则是一个局部变量。
- delimiter ; mysql分隔符重新定义为 ‘;’