外键关系在mysql中不起作用

xuo3flqw  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(442)

这里我为我的sql做外键关系,我有3个表
产品
画廊
提供
在这里 product 表是主表和 gallery , offer 表是子表,现在我试图删除主表条目,但它没有发生,我得到一个错误,如
无法删除或更新父行:外键约束失败

CREATE TABLE `product` (
 `productId` int(11) NOT NULL AUTO_INCREMENT,
 `name` varchar(100) COLLATE utf16_bin NOT NULL,
 `price` decimal(10,0) NOT NULL,
 `regOn` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
 PRIMARY KEY (`productId`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf16 COLLATE=utf16_bin

CREATE TABLE `offer` (
 `offerId` int(11) NOT NULL AUTO_INCREMENT,
 `productId` int(11) NOT NULL,
 `offerpercentage` text COLLATE utf16_bin NOT NULL,
 PRIMARY KEY (`offerId`),
 KEY `productId` (`productId`),
 CONSTRAINT `offer_ibfk_1` FOREIGN KEY (`productId`) REFERENCES `product` (`productId`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf16 COLLATE=utf16_bin

CREATE TABLE `gallery` (
 `galleryId` int(11) NOT NULL AUTO_INCREMENT,
 `productId` int(11) NOT NULL,
 `galleryName` text COLLATE utf16_bin NOT NULL,
 PRIMARY KEY (`galleryId`),
 KEY `productId` (`productId`),
 CONSTRAINT `gallery_ibfk_1` FOREIGN KEY (`productId`) REFERENCES `product` (`productId`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf16 COLLATE=utf16_bin

预期产量

Suppose I am deleting master table entry means i have to delete all child tables entry also
8fsztsew

8fsztsew1#

你需要申请 ON DELETE CASCADE 外键引用。

CREATE TABLE `product` (
 `productId` int(11) NOT NULL AUTO_INCREMENT,
 `name` varchar(100) COLLATE utf16_bin NOT NULL,
 `price` decimal(10,0) NOT NULL,
 `regOn` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
 PRIMARY KEY (`productId`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf16 COLLATE=utf16_bin

CREATE TABLE `offer` (
 `offerId` int(11) NOT NULL AUTO_INCREMENT,
 `productId` int(11) NOT NULL,
 `offerpercentage` text COLLATE utf16_bin NOT NULL,
 PRIMARY KEY (`offerId`),
 KEY `productId` (`productId`),
 CONSTRAINT `offer_ibfk_1` FOREIGN KEY (`productId`) REFERENCES `product` (`productId`) ON DELETE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf16 COLLATE=utf16_bin

CREATE TABLE `gallery` (
 `galleryId` int(11) NOT NULL AUTO_INCREMENT,
 `productId` int(11) NOT NULL,
 `galleryName` text COLLATE utf16_bin NOT NULL,
 PRIMARY KEY (`galleryId`),
 KEY `productId` (`productId`),
 CONSTRAINT `gallery_ibfk_1` FOREIGN KEY (`productId`) REFERENCES `product` (`productId`) ON DELETE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf16 COLLATE=utf16_bin

这告诉mysql,当父级被删除时,删除引用的子级。

相关问题