创建一个触发器,使得读者借阅某本图书时,图书表中该图书的在馆数量减一
时间: 2024-03-17 09:47:52 浏览: 225
可以使用下面的SQL语句创建一个触发器,在读者借阅某本图书时,自动将该图书的在馆数量减一:
```
CREATE TRIGGER update_book_count
AFTER INSERT ON borrow
FOR EACH ROW
BEGIN
UPDATE book SET count = count - 1 WHERE book_id = NEW.book_id;
END;
```
其中,update_book_count为触发器的名称,AFTER INSERT ON borrow表示在borrow表插入数据后触发,FOR EACH ROW表示对于插入的每一条记录都执行触发器中的操作。在触发器的操作中,使用UPDATE语句将book表中对应图书的在馆数量减一,其中NEW.book_id表示插入borrow表中的book_id字段的值。
相关问题
存储函数 (1)创建一个存储数,返回图书表中所有图书的金额总和。 (2)创建个存储,定读者姓名,判断其类别,若是学生,则返回其可借天数。 程 不是则返回“-1”。 下 3.触发器 (1)创建触发器,在读者表中删除某读者记录的同时将借阅表中与该读者有关的借阅据全部删除。 (2)创建触发器,实现当向借阅表插入一行数据时,将库存表中该条码的图书的库存态改为“借出”。 (3)创建触发器,实现若修改借阅表中借阅状态为“已还”,则同时修改库存表中库有
答:
(1) 存储函数1:
```sql
CREATE FUNCTION get_total_book_price()
RETURNS FLOAT
BEGIN
DECLARE total_price FLOAT;
SELECT SUM(price) INTO total_price FROM book;
RETURN total_price;
END;
```
(2) 存储函数2:
```sql
CREATE FUNCTION get_borrow_days(reader_name VARCHAR(50))
RETURNS INT
BEGIN
DECLARE borrow_days INT;
SELECT IFNULL(student_borrow_days, -1) INTO borrow_days FROM reader WHERE name = reader_name;
RETURN borrow_days;
END;
```
(1) 触发器1:
```sql
CREATE TRIGGER delete_reader_trigger
AFTER DELETE ON reader
FOR EACH ROW
BEGIN
DELETE FROM borrow WHERE reader_id = OLD.id;
END;
```
(2) 触发器2:
```sql
CREATE TRIGGER borrow_book_trigger
AFTER INSERT ON borrow
FOR EACH ROW
BEGIN
UPDATE stock SET state = '借出' WHERE book_id = NEW.book_id;
END;
```
(3) 触发器3:
```sql
CREATE TRIGGER return_book_trigger
AFTER UPDATE ON borrow
FOR EACH ROW
BEGIN
IF NEW.state = '已还' THEN
UPDATE stock SET state = '在库' WHERE book_id = NEW.book_id;
END IF;
END;
```
在Lend表上创建一个DELETE触发器tr3,当从Lend表中删除一条借阅记录(即归还一本书)后,将Reader表中该读者的已借数量减1,同时将Book表中该图书的库存量加1。
以下是在Lend表上创建DELETE触发器tr3的示例代码,实现删除一条借阅记录后更新Reader表和Book表的操作:
```
CREATE TRIGGER tr3
ON Lend
FOR DELETE
AS
BEGIN
DECLARE @readerId INT
DECLARE @bookId INT
SELECT @readerId = ReaderId, @bookId = BookId FROM deleted
UPDATE Reader
SET BorrowedCount = BorrowedCount - 1
WHERE ReaderId = @readerId
UPDATE Book
SET Stock = Stock + 1
WHERE BookId = @bookId
END
```
该触发器假设Lend表中的每条记录都包含ReaderId和BookId这两个外键字段,分别指向Reader表和Book表中对应的记录。当从Lend表中删除一条记录时,该触发器会先从被删除的记录中获取ReaderId和BookId,然后分别更新Reader表和Book表中对应记录的BorrowedCount和Stock字段。请注意,该触发器只会在删除Lend表中的记录时触发,不会在插入或更新操作时触发。
阅读全文