先决条件——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)
如上结果表明,只要插入数据,图书副本就会从系统中的图书模式中扣除。