Navicat :制作视图,每次输入时都可以更新某些字段



我有三个表1. tbl_book - id_book(PK) -书 -数量

  1. tbl_borrow_book

    • id_borrow (PK)
    • id_book
    • qty_borrow
  2. tbl_book_return

    • id_return (PK)
    • id_borrow

好的,这里有个问题。

我想做一个视图,当我输入数据时tbl_borrow_book那么tbl_book的数量会减少。当我用借来的同一本书tbl_book_return输入数据时,tbl_book的数量将增加相同的数量。

提前感谢...对不起,英语不好

虽然你把它标记为JavaScript,但我想你在问一个SQL问题。所以我将用SQL解决方案来回答它

您可以使用 mysql 触发器来实现您的目标。以下是示例。

以下触发器将在tbl_book将任何记录添加到tbl_borrow_book

减少数量:
CREATE TRIGGER `book_borrowed` AFTER INSERT ON `tbl_borrow_book` 
FOR EACH ROW
BEGIN
UPDATE `tbl_book` SET `qty` = `qty` - NEW.`qty_borrow` WHERE `id_book` = NEW.`id_book` LIMIT 1;
END; 

当有任何数据插入到tbl_book_return时,以下触发器将增加tbl_book中的书籍数量:

CREATE TRIGGER `book_returned` AFTER INSERT ON `tbl_book_return` 
FOR EACH ROW 
BEGIN
DECLARE number_of_book, book_id INT;
SET number_of_book = 
(SELECT
    `tbl_borrow_book`.`qty_borrow`
FROM 
    `tbl_borrow_book` 
INNER JOIN `tbl_book_return` ON `tbl_borrow_book`.`id_borrow` = `tbl_book_return`.`id_borrow` 
WHERE
    `tbl_borrow_book`.`id_borrow` = NEW.`id_borrow` LIMIT 1);
SET book_id = 
(SELECT
    `tbl_borrow_book`.`id_book`
FROM 
    `tbl_borrow_book` 
INNER JOIN `tbl_book_return` ON `tbl_borrow_book`.`id_borrow` = `tbl_book_return`.`id_borrow` 
WHERE
    `tbl_borrow_book`.`id_borrow` = NEW.`id_borrow` LIMIT 1);
UPDATE `tbl_book` SET `qty` = `qty` + number_of_book WHERE `id_book` = book_id;
END;

请注意,虽然第二个触发器有效,但它没有优化。两个 SELECT 语句可以合并为一个。如果我知道如何这样做,我会更新这个答案。

相关内容

  • 没有找到相关文章

最新更新