我有一张书 table 和一张音乐 table 。这两个表都以 Product_ID 作为主键。我还有一个产品表,其中包含 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)
最佳答案
您似乎忘记了删除产品中行的触发器。如果您更新了图书或音乐中的数据,您还需要一个触发器来对产品进行相应的更改。
这是你现在的问题 http://sqlfiddle.com/#!2/be9c93/1
这是我修复它的方法 http://sqlfiddle.com/#!2/2ff27/2
关于mysql - 触发器和多列主键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13523548/