所以,我有2张桌子。
一个是books
,其中包含以下字段。
accno
(入藏号),name
(图书名称),status
(已发布/未发布)
其次是total
,其中包含以下字段。
name
(图书名称),count
(books
表格中未发布的图书数量
我有一个在books表中添加书籍的表单,默认状态为“Not Issued”。 我还有一个发行书籍的表格,即它将状态更改为“已发布”。 我有一个表格可以退还书籍,即它将状态更改回“未发布”。
我正在寻找一个触发器,每次更新total
表时都会更新books
表中的计数。 Count是书籍表中可用的书籍数量(未发布),不同的书籍(书籍名称)不同。
我对触发器完全不熟悉。我看起来很棒,但我似乎无法想办法实现这一点。
感谢任何帮助。谢谢。
答案 0 :(得分:0)
看起来像是一个库存系统,所以每次新图书进入图书馆时,您都会将库存编号存储到total
表格中,当针对accnum
发出图书时,库存会减少一个然后它返回它增加了一个。
在这种情况下,以下触发器应该完成工作
delimiter //
create trigger book_available after update on books
for each row
begin
if new.status = 'Issued' then
update total set `count` = `count` - 1 where name = new.book_name ;
else
update total set `count` = `count` + 1 where name = new.book_name ;
end if ;
delimiter ;
这是一个测试用例
mysql> select * from books ;
+--------+-----------+------------+
| accnum | book_name | status |
+--------+-----------+------------+
| 1 | AA | Not Issued |
| 2 | AA | Issued |
| 3 | BB | Not Issued |
+--------+-----------+------------+
3 rows in set (0.00 sec)
mysql> select * from total ;
+------+-------+
| name | count |
+------+-------+
| AA | 20 |
| BB | 30 |
+------+-------+
2 rows in set (0.00 sec)
mysql> delimiter //
mysql> create trigger book_available after update on books
-> for each row
-> begin
-> if new.status = 'Issued' then
-> update total set `count` = `count` - 1 where name = new.book_name ;
-> else
-> update total set `count` = `count` + 1 where name = new.book_name ;
-> end if ;
-> end ;//
Query OK, 0 rows affected (0.13 sec)
mysql> delimiter ;
mysql> update books set status = 'Issued' where accnum = 1 ;
Query OK, 1 row affected (0.08 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> select * from total ;
+------+-------+
| name | count |
+------+-------+
| AA | 19 |
| BB | 30 |
+------+-------+
2 rows in set (0.00 sec)
mysql> update books set status = 'Not Issued' where accnum = 1 ;
Query OK, 1 row affected (0.04 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> select * from total ;
+------+-------+
| name | count |
+------+-------+
| AA | 20 |
| BB | 30 |
+------+-------+
2 rows in set (0.00 sec)