mysql after insert_mysql触发器Before和After的区别

Before与After区别:before:

(insert、update)可以对new进行修

改。

after不能对new进行修

改。

两者都不能修改old数

据。

触发器,顾名思义,就是当执行某

个事件的时候触发另一个事件的执

行!这个触发的时间分为BEFORE

和AFTER两种,分别有 before

insert,before update,before

delete和after insert,after

update,after delete 这六种情况

以下的文章主要向大家讲述的是

MySQL触发器的实际使用详细说明

与实际案例分析,同时本文也列举

了一些在MySQL触发器的实际式操

作中的代码,以下就是文章的详细

内容介绍,望大家借鉴。原文地

址: http://database.51cto.com/

art/201005/200671.htm

FOR EACH ROW 子句通知触发器

每隔一行执行一次动作,而不是对

整个表,在触发器中我们经常会用

到NEW 和OLD 这两个关键字,在这

里我还是先解释下这两个字的意

思!其中 NEW 是指刚刚插入到数据

库的数据表中的一个域,也可以理

解为对象(object)的意思。比如

在一个insert触发器中我用到了

NEW那他的意思就是说,要使用刚

刚插入到数据表的某个值,要使用

具体的某一个值的话需要这样子

写:NEW.字段名

(NEW.username )这样子就获取

到了刚刚插入到数据表中的一个字

段的值!! OLD ,OLD是在delete

触发器中有用的,意思是说我要删

除一条数据,但是在触发器中要用

到之前的那个数据,那么我就可以

通过OLD来获取了!比如我删除了

一条数据,里面包含一个email,

现在我在触发器的内部sql中要用就

可以这样子写: OLD.email !

对于INSERT语句, 只有NEW是合法

的;对于DELETE语句,只有OLD才

合法;而UPDATE语句可以在

和NEW以及OLD同时使用 。

下面举例说明:

mysql> select * from t1;

+----+------+

| id | name |

+----+------+

| 1 | aa |

+----+------+

1 row in set (0.00 sec)

mysql> select * from t2;

Empty set (0.00 sec)

before触发器代码:

DELIMITER $$

USE `test`$$

DROP TRIGGER /*!50032 IF

EXISTS */ `t1_before`$$

CREATE

/*!50017 DEFINER =

'admin'@'%' */

TRIGGER `t1_before` BEFORE

UPDATE ON `t1`

FOR EACH ROW

BEGIN

set NEW.id=NEW.id+11;

set NEW.name=UPPER

(NEW.name);

INSERT INTO t2 VALUES

(NEW.id,NEW.name);

END$$

DELIMITER ;

mysql> update t1 set name='bbs'

where id=1;

Query OK, 1 row affected (0.00

sec)

Rows matched: 1 Changed: 1

Warnings: 0

mysql> select * from t1;

+----+------+

| id | name |

+----+------+

| 12 | BBS |

+----+------+

1 row in set (0.00 sec)

mysql> select * from t2;

+----+------+

| id | name |

+----+------+

| 12 | BBS |

+----+------+

1 row in set (0.00 sec)

NEW值,已经被修改。

===========================

===========================

==================

after触发器代码:

DELIMITER $$

USE `test`$$

DROP TRIGGER /*!50032 IF

EXISTS */ `t1_after`$$

CREATE

/*!50017 DEFINER =

'admin'@'%' */

TRIGGER `t1_after`

AFTERUPDATE ON `t1`

FOR EACH ROW

BEGIN

set NEW.id=NEW.id+11;

set NEW.name=UPPER

(NEW.name);

INSERT INTO t2 VALUES

(NEW.id,NEW.name);

END$$

DELIMITER ;

把before触发器删除,在重新建立

触发器的时候会报错,报错信息如

下:

由于是after触发器,不能对NEW值

修改,所以报错。

所以,after触发器就改成了如下:

DELIMITER $$

USE `test`$$

DROP TRIGGER /*!50032 IF

EXISTS */ `t1_after`$$

CREATE

/*!50017 DEFINER =

'admin'@'%' */

TRIGGER `t1_after` AFTER

UPDATE ON `t1`

FOR EACH ROW

BEGIN

-- set NEW.id=NEW.id+11;

-- set NEW.name=UPPER

(NEW.name);

INSERT INTO t2 VALUES

(OLD.id,OLD.name);

END$$

DELIMITER ;

mysql> select * from t1;

+----+------+

| id | name |

+----+------+

| 1 | aa |

+----+------+

1 row in set (0.00 sec)

mysql> select * from t2;

Empty set (0.00 sec)

mysql> update t1 set name='bbs'

where id=1;

Query OK, 1 row affected (0.00

sec)

Rows matched: 1 Changed: 1

Warnings: 0

mysql> select * from t1;

+----+------+

| id | name |

+----+------+

| 1 | bbs |

+----+------+

1 row in set (0.00 sec)

mysql> select * from t2;

+----+------+

| id | name |

+----+------+

| 1 | aa |

+----+------+

1 row in set (0.00 sec)

参考:

http://topic.csdn.net/

u/20090531/13/

faf9fbb4-2a16-4da8-a54b-

e1cd2cf55548.html

http://blog.xhbin.com/

archives/155

http://farmeryxb.iteye.com/

blog/332643

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值