触发器:当执行某个事件的时候触发另一个事件的执行。触发的时间分为before和after,分别有以下六种:before insert,before update,before delete和after insert,after update,after delete。
FOR EACH ROW 子句通知触发器每隔一行执行一次动作,而不是对整个表,在触发器中我们经常会用到NEW和OLD这两个关键字!其中NEW是指刚刚插入到数据库的数据表中的一个域,也可以理解为对象(object)的意思。比如在一个insert触发器中我用到了NEW那他的意思就是说,要使用刚刚插入到数据表的某个值,要使用具体的某一个值的话需要这样子写:NEW.字段名(NEW.username)这样子就获取到了刚刚插入到数据表中的一个字段的值!OLD是在delete触发器中有用的,意思是说我要删除一条数据,但是在触发器中要用到之前的那个数据,那么我就可以通过OLD来获取了!比如我删除了一条数据,里面包含一个email,现在我在触发器的内部sql中要用就可以这样子写:OLD.email!
对于INSERT语句, 只有NEW是合法的;对于DELETE语句,只有OLD才合法;而UPDATE语句可以在
和NEW以及OLD同时使用。
下面举例说明:
before触发器代码:
TRIGGER 触发器名称 BEFORE UPDATE ON 表名A
FOR EACH ROW
BEGIN
set NEW.id=NEW.id+11;
set NEW.name=UPPER(NEW.name);
INSERT INTO 表名B VALUES (NEW.id,NEW.name);
END
mysql> update A set name=’bbs’ where id=1;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> select * from A;
+—-+——+
| id | name |
+—-+——+
| 12 | BBS |
+—-+——+
1 row in set (0.00 sec)
mysql> select * from B;
+—-+——+
| id | name |
+—-+——+
| 12 | BBS |
+—-+——+
1 row in set (0.00 sec)
NEW值,已经被修改。
========================================================================
after触发器代码:
TRIGGER 触发器名称 AFTER UPDATE ON A
FOR EACH ROW
BEGIN
set NEW.id=NEW.id+11;
set NEW.name=UPPER(NEW.name);
INSERT INTO B VALUES (NEW.id,NEW.name);
END
把before触发器删除,在重新建立触发器的时候会报错,报错信息如下:由于是after触发器,不能对NEW值修改,所以报错。
所以,after触发器就改成了如下:
TRIGGER 触发器名称 AFTER UPDATE ON A
FOR EACH ROW
BEGIN
— set NEW.id=NEW.id+11; 这是注释的语句
— set NEW.name=UPPER(NEW.name); 这是注释的语句
INSERT INTO B VALUES (OLD.id,OLD.name);
END
mysql> select * from A;
+—-+——+
| id | name |
+—-+——+
| 1 | aa |
+—-+——+
1 row in set (0.00 sec)
mysql> select * from B;
Empty set (0.00 sec)
mysql> update A set name=’bbs’ where id=1;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> select * from A;
+—-+——+
| id | name |
+—-+——+
| 1 | bbs |
+—-+——+
1 row in set (0.00 sec)
mysql> select * from B;
+—-+——+
| id | name |
+—-+——+
| 1 | aa |
+—-+——+
1 row in set (0.00 sec)
After Update 将数据更新完后,触发。更新新表的数据来自未更新前的那条语句。
参考网站:
1、http://www.cnblogs.com/zzwlovegfj/archive/2012/07/04/2576989.html
2、http://www.cnblogs.com/zzwlovegfj/archive/2012/07/05/2578574.html
你还是先了解一下九龙城寨的相关信息再来说吧