网络编程
位置:首页>> 网络编程>> 数据库>> 教你快速掌握 MySQL数据库中触发器的应用(2)

教你快速掌握 MySQL数据库中触发器的应用(2)

  发布时间:2008-12-03 15:33:00 

标签:MySQL,触发器,数据库

激活触发器后,开始对它进行测试。试着在data表格中插入几个记录:


mysql> INSERT INTO data (name) VALUES ('Sue'), ('Jane');

Query OK, 2 rows affected (0.00 sec)

Records: 2?Duplicates: 0?Warnings: 0


然后检查chars表格看触发器是否完成它该完成的任务:


mysql> SELECT * FROM chars;

+-------+

| count |

+-------+

| 7|

+-------+

1 row in set (0.00 sec)


如你所见,data表格中的INSERT命令激活触发器,它计算插入记录的字符数,并将结果存储在chars表格中。如果你往data表格中增加另外的记录,chars.count值也会相应增加。

触发器应用完毕后,可有DROP TRIGGER命令轻松删除它。


mysql> DROP TRIGGER t1;

Query OK, 0 rows affected (0.00 sec)


注意:理想情况下,你还需要一个倒转触发器,每当一个记录从源表格中删除时,它从字符总数中减去记录的字符数。这很容易做到,你可以把它当作练习来完成。提示:应用BEFORE DELETE ON子句是其中一种方法。

现在,我想建立一个审计记录来追踪对这个表格所做的改变。这个记录将反映表格的每项改变,并向用户说明由谁做出改变以及改变的时间。我需要建立一个新表格来存储这一信息(表格名:audit),如下所示。


mysql> CREATE TABLE audit (id INT(7),
 balance FLOAT, user VARCHAR(50)

NOT NULL, time TIMESTAMP NOT NULL);

Query OK, 0 rows affected (0.09 sec)


接下来,我将在accounts表格中定义一个触发器。


mysql> CREATE TRIGGER t1 AFTER UPDATEON accounts

FOR EACH ROW INSERT INTO audit (id, balance, user, time)

VALUES (OLD.id, NEW.balance, CURRENT_USER(), NOW());

Query OK, 0 rows affected (0.04 sec)


注释:accounts表格每经历一次UPDATE,触发器插入(INSERT)对应记录的id、新的余额、当前时间和登录audit表格的用户的名称。

0
投稿

猜你喜欢

手机版 网络编程 asp之家 www.aspxhome.com