触发器和多列主键

时间:2012-11-23 05:28:27

标签: mysql triggers primary-key

我有一张书桌和一张音乐桌。这两个表都有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)

1 个答案:

答案 0 :(得分:1)

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

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

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