📜  SQL 触发器 |图书管理数据库

📅  最后修改于: 2021-09-09 11:58:27             🧑  作者: Mango

先决条件——SQL触发器|学生数据库
例如,给定图书馆图书管理数据库模式和学生数据库模式。在这些数据库中,如果任何学生从图书馆借书,那么该指定书的数量应该减少。为此,

假设有一些数据的模式,

mysql> select * from book_det; 
+-----+-------------+--------+ 
| bid | btitle      | copies | 
+-----+-------------+--------+ 
|   1 | Java        |     10 | 
|   2 | C++         |      5 | 
|   3 | MySql       |     10 | 
|   4 | Oracle DBMS |      5 | 
+-----+-------------+--------+ 
4 rows in set (0.00 sec) 

mysql> select * from book_issue; 
+------+------+--------+ 
| bid  | sid  | btitle | 
+------+------+--------+ 
1 row in set (0.00 sec)

为了实现这样的过程,如果系统将数据插入到 book_issue 数据库中,触发器应该自动调用并将副本属性减 1,以便可以保持正确的图书跟踪。

系统触发——

create trigger book_copies_deducts 
after INSERT 
on book_issue 
for each row 
update book_det set copies = copies - 1 where bid = new.bid; 

以上触发器,每当在 book_issue 数据库中执行插入操作时都会被激活,它将更新 book_det 模式设置副本,以当前书籍 id(bid) 的 1 递减。

结果 –

mysql> insert into book_issue values(1, 100, "Java");
Query OK, 1 row affected (0.09 sec) 

mysql> select * from book_det; 
+-----+-------------+--------+ 
| bid | btitle      | copies | 
+-----+-------------+--------+ 
|   1 | Java        |      9 | 
|   2 | C++         |      5 | 
|   3 | MySql       |     10 | 
|   4 | Oracle DBMS |      5 | 
+-----+-------------+--------+ 
4 rows in set (0.00 sec) 

mysql> select * from book_issue; 
+------+------+--------+ 
| bid  | sid  | btitle | 
+------+------+--------+ 
|    1 |  100 | Java   | 
+------+------+--------+ 
1 row in set (0.00 sec)

如上结果表明,只要插入数据,图书副本就会从系统中的图书模式中扣除。