0

我有一张书桌和一张音乐桌。这两个表都有一个 Product_ID 作为它们的主键。我还有一个产品表,其中有一个 Product_ID 列和一个类型列(0 代表书籍,1 代表音乐),其中 Product_Id 和类型列是表的主键。在 phpMyAdmin 中,这 2 列带有下划线,并且表的 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)
4

1 回答 1

1

您似乎忘记了删除 Products 中的行的触发器。如果您曾经更新图书或音乐中的数据,您还需要一个触发器来对产品进行相应的更改。

现在这是您的问题 http://sqlfiddle.com/#!2/be9c93/1

这是我修复它的方法 http://sqlfiddle.com/#!2/2ff27/2

于 2012-11-23T05:45:21.053 回答