版本:Mysql5.0
数据库:Test
表:voteItem(id,title,ticketNumber),主键:id,自增长整型。title:投票项标题。ticketNumber:获得投票数。
表:ticket(id,voteItemID,ip),主键:id,自增长整型。voteItemID:外键到表voteItem的主键。ip:进行投票的IP地址。
需求:在插入数据到ticket表的时候,插入数据项关联的外键项的'ticketNumber'值能自增。
也就是出现一张投票时,投票项的获得投票数自己能发现这个事件,并进行投票数自增。不知道描述是否清楚,请大家帮忙。
数据库:Test
表:voteItem(id,title,ticketNumber),主键:id,自增长整型。title:投票项标题。ticketNumber:获得投票数。
表:ticket(id,voteItemID,ip),主键:id,自增长整型。voteItemID:外键到表voteItem的主键。ip:进行投票的IP地址。
需求:在插入数据到ticket表的时候,插入数据项关联的外键项的'ticketNumber'值能自增。
也就是出现一张投票时,投票项的获得投票数自己能发现这个事件,并进行投票数自增。不知道描述是否清楚,请大家帮忙。
解决方案 »
- mysql中如何查询指定日期是否在一个日期区间中。
- 求 mysql数据库,离职人员处理解决办法
- postgresql里有没有相当于mysql的``的东西
- WIN2000下如何配置MYSQL启动参数?
- 怎样完成这样的排序?
- 在局域网内的mysql server,我明明已经给root用户(其他用户也一样)增加了密码了的,
- (请高手笑纳100分)mysql装上去了以后怎么来配置它阿?
- VB中ADODC.Recordset.Addnew方法的使用!!?????????
- 关于主键 varchar的问题
- 用三台服务器(CentOS 6.4)搭建MySql Cluster 7.3.5的问题
- 用户登录的问题,很新手的问题
- java.sql.SQLException: Parameter index out of range (1 > number of parameters, ?
voteItem表中有数据
id,title,ticketNumber
1,"title",0
在向表ticket插入数据
voteItemID,ip
1,"127.0.0.1"
时,由于插入的数据的外键是1,此时,voteItem表的ticketNumber能自增1.
TRIGGER:
UPDATE voteItem SET ticketNumber=ticketNumber+1 WHERE ID=NEW.voteItemID
DELIMITER |CREATE TRIGGER testref AFTER INSERT ON ticket
FOR EACH ROW BEGIN
update voteItem set ticketNumber=ticketNumber+1 where id = new.voteItemID;
END;
|DELIMITER ;
-> (
-> 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)
不如把表voteItem中的这个计数ticketNumber取消,直接通过查询来得到投票数。mysql> insert into voteItem values (null,'bbbbb',0);
Query OK, 1 row affected (0.06 sec)mysql> select v.id,v.title,count(t.id)
-> from voteItem v left join ticket t on v.id=t.voteItemID
-> group by v.id,v.title;
+----+-------+-------------+
| id | title | count(t.id) |
+----+-------+-------------+
| 1 | aaaaa | 1 |
| 2 | bbbbb | 0 |
+----+-------+-------------+
2 rows in set (0.00 sec)