Navicat : 制作一个视图,每次输入时可以更新一些字段
Navicat : Make a view and some field can be updated each time inputted
我有三个table
1. tbl_book
- id_book(PK)
- 书
- 数量
tbl_borrow_book
- id_borrow(PK)
- id_book
- qty_borrow
tbl_book_return
- id_return(PK)
- id_borrow
好的,问题来了。
我想做一个视图,当我在tbl_borrow_book中输入数据时,tbl_book中的数量会减少。
当我在 tbl_book_return 中输入数据与借来的同一本书时,tbl_book 中的数量将增加相同的数量。
先谢谢了...抱歉英语不好
虽然您将其标记为 JavaScript,但我猜您是在问 SQL 问题。所以我将用 SQL 解决方案
来回答它
您可以使用 mysql 触发器来实现您的目标。这是示例。
在您向 tbl_borrow_book
添加任何记录后,以下触发器将减少 tbl_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 语句可以合并为一个。如果我知道该怎么做,我会更新这个答案。
我有三个table 1. tbl_book - id_book(PK) - 书 - 数量
tbl_borrow_book
- id_borrow(PK)
- id_book
- qty_borrow
tbl_book_return
- id_return(PK)
- id_borrow
好的,问题来了。
我想做一个视图,当我在tbl_borrow_book中输入数据时,tbl_book中的数量会减少。 当我在 tbl_book_return 中输入数据与借来的同一本书时,tbl_book 中的数量将增加相同的数量。
先谢谢了...抱歉英语不好
虽然您将其标记为 JavaScript,但我猜您是在问 SQL 问题。所以我将用 SQL 解决方案
来回答它您可以使用 mysql 触发器来实现您的目标。这是示例。
在您向 tbl_borrow_book
添加任何记录后,以下触发器将减少 tbl_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 语句可以合并为一个。如果我知道该怎么做,我会更新这个答案。