Navicat:创建一个视图,每次输入时都可以更新一些字段

时间:2016-02-12 04:17:18

标签: javascript view dreamweaver mozilla 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
  3. 好的,这是问题。

    我想创建一个视图,当我在tbl_borrow_book中输入数据时,tbl_book中的qty将会减少。 当我在tbl_book_return中使用相同的借书输入数据时,tbl_book中的数量将增加相同的数量。

    感谢先进...抱歉英语不好

1 个答案:

答案 0 :(得分:1)

虽然您将其标记为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插入任何数据时,以下触发器会增加tbl_book_return中图书的数量:

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语句可以合并为一个。如果我知道怎么做,我会更新这个答案。

相关问题