mysql触发器关联表更新

数据库 piniu 1004浏览 0评论

触发器(trigger)是个特殊的存储过程,它的执行不是由程序调用,也不是手工启动,而是由事件来触发,比如当对一个表进行操作( insert,delete, update)时就会激活它执行。触发器经常用于加强数据的完整性约束和业务规则等。

触发器可以从 DBA_TRIGGERS ,USER_TRIGGERS 数据字典中查到。
触发器有一个非常好的特性就是:触发器可以禁止或回滚违反引用完整性的更改,从而取消所尝试的数据修改。

以下案例是网上投票功能表结构设计以及采用 触发器 完成投票计数。

mysql> create table voteItem   -- 投票箱
    -> (
    ->  id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    ->  title varchar(30),
    ->  ticketNumber int
    -> );
Query OK, 0 rows affected (0.09 sec)
 
mysql>
mysql> create table ticket(                ---- 票数
    ->  id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    ->  voteItemID INT references voteItem(id) ,
    ->  ip varchar(30)
    -> );
Query OK, 0 rows affected (0.09 sec)
 
mysql>
mysql> insert into voteItem values (null,'aaaaa',0);
Query OK, 1 row affected (0.03 sec)
 
mysql>
mysql> select * from voteItem;
+----+-------+--------------+
| id | title | ticketNumber |
+----+-------+--------------+
|  1 | aaaaa |            0 |
+----+-------+--------------+
1 row in set (0.00 sec)
 
mysql>
mysql> DELIMITER |
mysql>
mysql> CREATE TRIGGER testref AFTER INSERT ON ticket
    ->   FOR EACH ROW BEGIN
    ->          update voteItem set ticketNumber=ticketNumber+1 where id = new.v
oteItemID;
    ->   END;
    -> |
Query OK, 0 rows affected (0.09 sec)
 
mysql>
mysql> DELIMITER ;
mysql>
mysql> insert into ticket values (null,1,'127.0.0.1');
Query OK, 1 row affected (0.08 sec)
 
mysql> select * from ticket;
+----+------------+-----------+
| id | voteItemID | ip        |
+----+------------+-----------+
|  1 |          1 | 127.0.0.1 |
+----+------------+-----------+
1 row in set (0.00 sec)
 
mysql> select * from voteItem;
+----+-------+--------------+
| id | title | ticketNumber |
+----+-------+--------------+
|  1 | aaaaa |            1 |
+----+-------+--------------+
1 row in set (0.00 sec)

发表我的评论
取消评论
表情

Hi,您需要填写昵称和邮箱!

  • * 昵称:
  • * 邮箱: