NodeJS 创建MySQL触发器,以便在布尔值集合为true时将布尔值设置为true

ht4b089n  于 2023-02-08  发布在  Node.js
关注(0)|答案(1)|浏览(131)

我正在node.js中创建一个使用MySQL作为数据库的库存管理应用程序。我有一个弱实体“rental_item”,用于保存特定租赁中的项目。问题是租赁可能不会一次全部返回,因此我需要一种方法,仅当所有“item_returned”实体为真时,才将租赁表中的布尔值“rental_returned”标记为真。
下面是我的表结构:

CREATE TABLE `rental` (
  `rental_id` int NOT NULL AUTO_INCREMENT,
  `renter_id` int NOT NULL,
  `date_in` date NOT NULL,
  `date_out` date NOT NULL,
  `sig_path` varchar(50) NOT NULL,
  `doc_path` varchar(50) NOT NULL,
  `col_name` varchar(50) NOT NULL,
  `col_path` varchar(50) NOT NULL,
  `cost` decimal(15,2) NOT NULL,
  `rental_returned` tinyint(1) NOT NULL DEFAULT '0',
  PRIMARY KEY (`rental_id`),
  UNIQUE KEY `doc_path` (`doc_path`),
  UNIQUE KEY `col_path` (`col_path`),
  UNIQUE KEY `sig_path` (`sig_path`),
  KEY `renter_key` (`renter_id`),
  CONSTRAINT `renter_key` FOREIGN KEY (`renter_id`) REFERENCES `renter` (`renter_id`)
)

CREATE TABLE `rental_item` (
  `rental_id` int NOT NULL,
  `i_ID` varchar(20) NOT NULL,
  `item_returned` tinyint(1) NOT NULL DEFAULT '0',
  KEY `rental_key` (`rental_id`),
  KEY `rental_item_key` (`i_ID`),
  CONSTRAINT `rental_item_key` FOREIGN KEY (`i_ID`) REFERENCES `item` (`i_ID`),
  CONSTRAINT `rental_key` FOREIGN KEY (`rental_id`) REFERENCES `rental` (`rental_id`) ON DELETE CASCADE
)

我现在通过mysql 2 node.js模块来做这个,只是检查一个给定的rental_id的所有值。然后我发现了一些触发器,认为这个方法可能会更好。我摆弄了一些像这样的东西,比如带表连接的触发器,但是我无法理解如何获得从rental_item更新的条目的rental_id。然后检查具有该ID的租赁项目中的所有项目是否具有返回的项目= 1,最后更新租赁表以显示所有项目/完整的租赁已经被返回。
我知道这应该是一个更新后的租金项目触发器,但不知道如何处理所需的条件或循环。

g52tjvyc

g52tjvyc1#

使用NEW.rental_id获取已更新行的ID。

CREATE TRIGGER rental_returned AFTER UPDATE ON rental_item
FOR EACH ROW
    UPDATE rental
    SET rental_returned = (
        NOT EXISTS (
            SELECT *
            FROM rental_item
            WHERE rental_id = NEW.rental_id
            AND item_returned = 0))
    WHERE rental_id = NEW.rental_id

相关问题