首页 > 解决方案 > Delete From in delete after trigger 不从另一个表中删除

问题描述

我正在尝试创建一个 DELETE TRIGGER,以便当从表中删除一行时,只要它不在Bike另一个名为 in 的表中,它将删除另一个表中的行。如果它在表中,那么它将取消删除(如果可能的话,我对 sql 很陌生)。AvailableRentalRental

BEGIN
DELETE FROM Available 
Where old.bnumber = Available.bnumber;
END

现在我得到

1451: 无法删除或更新父行:外键约束失败 ( cecs535project. available, CONSTRAINT bnumberFOREIGN KEY ( bnumber) REFERENCES bike( bnumber))

bnumber 是 Available 中引用的外键Bike

任何帮助表示赞赏。

CREATE TABLE `Bike` (
  `bnumber` int NOT NULL,
  `make` varchar(64) DEFAULT NULL,
  `color` varchar(8) DEFAULT NULL,
  `year` int DEFAULT NULL,
  PRIMARY KEY (`bnumber`)
)

CREATE TABLE `Available` (
  `bnumber` int NOT NULL,
  `rack-id` int DEFAULT NULL,
  PRIMARY KEY (`bnumber`),
  KEY `bnumber_idx` (`rack-id`),
  KEY `bnumber_idx1` (`bnumber`),
  CONSTRAINT `bnumber` FOREIGN KEY (`bnumber`) REFERENCES `Bike` (`bnumber`),
  CONSTRAINT `rack-id` FOREIGN KEY (`rack-id`) REFERENCES `Rack` (`id`)
) 

CREATE TABLE `Rental` (
  `date` date NOT NULL,
  `time` time NOT NULL,
  `bnumber` int NOT NULL,
  `cust-id` int NOT NULL,
  `src` int DEFAULT NULL,
  PRIMARY KEY (`bnumber`,`cust-id`,`date`,`time`),
  KEY `bnumber_idx` (`bnumber`),
  KEY `cust-id_idx` (`cust-id`),
  KEY `src_idx` (`src`),
  CONSTRAINT `bike` FOREIGN KEY (`bnumber`) REFERENCES `Bike` (`bnumber`),
  CONSTRAINT `cust-id` FOREIGN KEY (`cust-id`) REFERENCES `Customer` (`id`),
  CONSTRAINT `src` FOREIGN KEY (`src`) REFERENCES `Rack` (`id`)
) 

标签: mysqlsql

解决方案


我不是您当前设计的忠实粉丝,我认为它可以简化。考虑只为所有自行车资产提供一个表,其中一列维护当前是否出租,例如

Bike
id | name  | type     | rented (bit)
1  | bike1 | road     | 1
2  | bike2 | mountain | 0
...

现在要记录是否租用自行车,您只需更新rented上面的位列。如果您想从库存中删除,如果自行车是借用的,请避免这样做,您可以使用:

DELETE
FROM Bike
WHERE rented = 0;  -- AND your other conditions here

推荐阅读