在Lend表上创建一个DELETE触发器tr3,当从Lend表中删除一条借阅记录(即归还一本书)后,将Reader表中该读者的已借数量减1,同时将Book表中该图书的库存量加1。 然后激活触发器进行验证
时间: 2024-03-19 14:45:55 浏览: 25
以下是在Lend表上创建的DELETE触发器tr3的代码:
```
CREATE TRIGGER tr3
ON Lend
AFTER DELETE
AS
BEGIN
DECLARE @reader_id INT, @book_id INT
SELECT @reader_id = inserted.reader_id, @book_id = inserted.book_id
FROM deleted
INNER JOIN inserted ON deleted.lend_id = inserted.lend_id
UPDATE Reader
SET borrowed_count = borrowed_count - 1
WHERE reader_id = @reader_id
UPDATE Book
SET stock = stock + 1
WHERE book_id = @book_id
END
```
该触发器会在执行DELETE 操作时自动触发,将相应读者的已借数量减1,同时将相应书籍的库存量加1。在验证前,请确保该触发器已经与Lend表关联。
激活触发器的方法如下:
```
ALTER TRIGGER tr3 ON Lend ENABLE;
```
当你从Lend表中删除一条借阅记录时,该触发器会自动执行并更新相应的Reader表和Book表。
相关问题
在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表中的记录时触发,不会在插入或更新操作时触发。
、在Lend表上创建一个DELETE触发器tr3,当从Lend表中删除一条借阅记录(即归还一本书)后,将Reader表中该读者的已借数量减1,同时将Book表中该图书的库存量加1。 然后激活触发器进行验证
下面是对应的 SQL 代码:
```
CREATE TRIGGER tr3
ON Lend
FOR DELETE
AS
BEGIN
DECLARE @reader_id INT
DECLARE @book_id INT
SELECT @reader_id = ReaderID, @book_id = BookID
FROM deleted
UPDATE Reader
SET BorrowedCount = BorrowedCount - 1
WHERE ReaderID = @reader_id
UPDATE Book
SET Stock = Stock + 1
WHERE BookID = @book_id
END
```
在上面的代码中,我们创建了一个名为 `tr3` 的触发器,它在 `Lend` 表上进行了 DELETE 操作时触发。在触发器中,我们首先从 `deleted` 表中获取被删除的借阅记录的 `ReaderID` 和 `BookID`,然后分别更新 `Reader` 表和 `Book` 表中对应的记录。
具体地,我们将读者已借数量减1,将图书库存量加1。这样做可以保证数据的一致性,防止出现不合理的借阅记录和库存量。
为了验证触发器的正确性,我们可以在 `Lend` 表中删除一条借阅记录,然后检查 `Reader` 表和 `Book` 表中对应的记录是否正确更新。