我有一张书桌和一张音乐桌。这两个表都有Product_ID作为主键。我还有一个product表,其中包含Product_ID列和类型列(0表示书籍,1表示音乐),其中Product_Id和Type列是表的主键。在phpMyAdmin中,这两列用下划线标出,表格的SHOW COLUMNS显示Type和Product_Id标记为主键。
我遇到的问题是我的触发器。有2个触发器,处理不同的表有几个不同之处。例如,音乐触发器执行以下语句:
INSERT INTO products
SET
Type=1,
Product_Id=NEW.Product_ID,
Title=NEW.Album,
Price=0
书籍触发器是相同的,除了type = 0和NEW.Album被NEW.Title替换。当我现在正在运行INSERT查询时,在插入和删除一些数据后,我得到一个重复的主键错误。问题是MySQL数据库只读取Product_ID列作为主键,因此当它尝试在那里插入副本时,即使它在Type列中的值不同,它也会发出此错误。我在这里难过。
产品表
Product_Id int(11) - PK
Title int(11)
Price double
Type int(11) - PK
NewBool tinyint(1)
音乐表
Product_ID int(11) - PK
Artist varchar(32)
Album varchar(32)
Genre varchar(32)
Year int(11)
Length double
Rating double
NumRatings int(11)
Studio varchar(64)
书籍表
Product_ID int(11) - PK
ISBN bigint(20)
Title text
Author text
Year int(11)
Genre text
Pages int(11)
Publisher text
Edition int(11)
Rating double
NumRatings int(11)
答案 0 :(得分:1)
您好像忘记了删除Products中的行的触发器。如果您更新了书籍或音乐中的数据,则还需要一个触发器来对产品进行相应的更改。
现在是你的问题 http://sqlfiddle.com/#!2/be9c93/1
以下是我修复它的方法 http://sqlfiddle.com/#!2/2ff27/2