>데이터 베이스 >MySQL 튜토리얼 >mysql触发器过程_MySQL

mysql触发器过程_MySQL

WBOY
WBOY원래의
2016-06-01 13:08:141253검색

1、触发器:

CREATE TRIGGER trigger_name trigger_time trigger_event ON tbl_name FOR EACH ROW trigger_stmt
其中trigger_name标识触发器名称,用户自行指定;trigger_time标识触发时机,用before和after替换;trigger_event标识触发事件,用insert,updat e和delete替换;bl_name标识建立触发器的表名,即在哪张表上建立触发器;trigger_stmt是触发器程序体;触发器程序可以使用begin和end作为开始和结束,中间包含多条语句;

有几个状态对像和几张伟表:

insert : NEW

update : NEW OLD

delete : OLD

status : 表示是否有新数据和老数据

2、过程中

1.mysql> DELIMITER //
2.mysql> CREATE PROCEDURE proc1(OUT s int)
3.-> BEGIN
4.-> SELECT COUNT(*) INTO s FROM user;
5.-> END
6.-> //
7.mysql> DELIMITER ;
MySQL存储过程的参数用在存储过程的定义,共有三种参数类型,IN,OUT,INOUT,形式如:

CREATE PROCEDURE([[IN |OUT |INOUT ] 参数名 数据类形...])

IN 输入参数:表示该参数的值必须在调用存储过程时指定,在存储过程中修改该参数的值不能被返回,为默认值

OUT 输出参数:该值可在存储过程内部被改变,并可返回

INOUT 输入输出参数:调用时指定,并且可被改变和返回

Ⅰ. IN参数例子

创建:

1.mysql > DELIMITER //
2.mysql > CREATE PROCEDURE demo_in_parameter(IN p_in int)
3.-> BEGIN
4.-> SELECT p_in;
5.-> SET p_in=2;
6.-> SELECT p_in;
7.-> END;
8.-> //
9.mysql > DELIMITER ;

执行结果:

1.mysql > SET @p_in=1;
2.mysql > CALL demo_in_parameter(@p_in);
3.+------+
4.| p_in |
5.+------+
6.| 1 |
7.+------+
8.
9.+------+
10.| p_in |
11.+------+
12.| 2 |
13.+------+
14.
15.mysql> SELECT @p_in;
16.+-------+
17.| @p_in |
18.+-------+
19.| 1 |
20.+-------+

以上可以看出,p_in虽然在存储过程中被修改,但并不影响@p_id的值

Ⅱ.OUT参数例子

创建:

1.mysql > DELIMITER //
2.mysql > CREATE PROCEDURE demo_out_parameter(OUT p_out int)
3.-> BEGIN
4.-> SELECT p_out;
5.-> SET p_out=2;
6.-> SELECT p_out;
7.-> END;
8.-> //
9.mysql > DELIMITER ;

执行结果:

1.mysql > SET @p_out=1;
2.mysql > CALL sp_demo_out_parameter(@p_out);
3.+-------+
4.| p_out |
5.+-------+
6.| NULL |
7.+-------+
8.
9.+-------+
10.| p_out |
11.+-------+
12.| 2 |
13.+-------+
14.
15.mysql> SELECT @p_out;
16.+-------+
17.| p_out |
18.+-------+
19.| 2 |
20.+-------+

Ⅲ. INOUT参数例子

创建:

1.mysql > DELIMITER //
2.mysql > CREATE PROCEDURE demo_inout_parameter(INOUT p_inout int)
3.-> BEGIN
4.-> SELECT p_inout;
5.-> SET p_inout=2;
6.-> SELECT p_inout;
7.-> END;
8.-> //
9.mysql > DELIMITER ;

执行结果:
1.mysql > SET @p_inout=1;
2.mysql > CALL demo_inout_parameter(@p_inout) ;
3.+---------+
4.| p_inout |
5.+---------+
6.| 1 |
7.+---------+
8.
9.+---------+
10.| p_inout |
11.+---------+
12.| 2 |
13.+---------+
14.
15.mysql > SELECT @p_inout;
16.+----------+
17.| @p_inout |
18.+----------+
19.| 2 |
20.+----------+

(4). 变量

Ⅰ. 变量定义

DECLARE variable_name [,variable_name...] datatype [DEFAULT value];

其中,datatype为MySQL的数据类型,如:int, float, date, varchar(length)

例如:

1.DECLARE l_int int unsigned default 4000000;
2.DECLARE l_numeric number(8,2) DEFAULT 9.95;
3.DECLARE l_date date DEFAULT '1999-12-31';
4.DECLARE l_datetime datetime DEFAULT '1999-12-31 23:59:59';
5.DECLARE l_varchar varchar(255) DEFAULT 'This will not be padded';

Ⅱ. 变量赋值

SET 变量名 = 表达式值 [,variable_name = expression ...]

Ⅲ. 用户变量

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.