0

本のテーブルと音楽のテーブルがあります。これらのテーブルは両方とも、主キーとして Product_ID を持っています。Product_ID 列と type 列 (書籍の場合は 0、音楽の場合は 1) を持つ製品テーブルもあり、Product_Id 列と Type 列はテーブルの主キーです。phpMyAdmin では、これらの 2 つの列に下線が引かれ、表の SHOW COLUMNS には主キーとしてマークされた Type と Product_Id が表示されます。

私が抱えている問題は、トリガーにあります。2 つのトリガーがあり、異なるテーブルを処理するためのいくつかの違いがあります。たとえば、音楽トリガーは次のステートメントを実行します。

 INSERT INTO products 
 SET 
      Type=1, 
      Product_Id=NEW.Product_ID,
      Title=NEW.Album, 
      Price=0

book トリガーは同じですが、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 の行を削除するトリガーを忘れたようです。Books または Music のデータを更新する場合は、Products で対応する変更を行うトリガーも必要です。

ここにあなたの問題があります http://sqlfiddle.com/#!2/be9c93/1

これが私が修正した方法です http://sqlfiddle.com/#!2/2ff27/2

于 2012-11-23T05:45:21.053 に答える