首页 > 解决方案 > 关于“外键约束失败”异常

问题描述

假设我有这两张桌子:

CREATE TABLE `tblsuppliers` (
  `supplierID` int(11) NOT NULL AUTO_INCREMENT,
  `supplierName` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
  `phoneNumber` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `emailAddress` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `physicalAddress` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  PRIMARY KEY (`supplierID`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;


CREATE TABLE `tblorders` (
  `orderID` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL,
  `supplierID` int(11) NOT NULL,
  `productID` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
  `dateOrdered` date DEFAULT NULL,
  `dateArriving` date DEFAULT NULL,
  `isJob` bit(1) NOT NULL,
  `username` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL,
  `quantity` decimal(10,0) NOT NULL,
  `hasArrived` bit(1) DEFAULT NULL,
  PRIMARY KEY (`orderID`),
  KEY `tblorders_FK_1` (`username`),
  KEY `tblorders_FK_2` (`productID`),
  KEY `tblorders_FK` (`supplierID`),
  CONSTRAINT `tblorders_FK` FOREIGN KEY (`supplierID`) REFERENCES `tblsuppliers` (`supplierID`) ON UPDATE CASCADE,
  CONSTRAINT `tblorders_FK_1` FOREIGN KEY (`username`) REFERENCES `tblusers` (`username`) ON UPDATE CASCADE,
  CONSTRAINT `tblorders_FK_2` FOREIGN KEY (`productID`) REFERENCES `tblproducts` (`productID`) ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

我希望能够删除供应商,但将他们的记录保留在订单中,截至目前,我无法做到,我得到了那个例外。过去几天我一直在这里寻找解决方案,但到目前为止,我只发现约束是相反的

我很确定我错过了一个基本概念,而且我知道这种类型的问题在这里被问了很多次,但是从解释中,我知道我做错了什么,只是不知道是什么。如果我能解释它是什么,我将不胜感激。谢谢

标签: mysql

解决方案


推荐阅读