0

ticketsすべてを一意にできるように、すべてのIDを保持するテーブルを作成しました。テーブルは、他のticketsテーブルに挿入する前に、新しいデータとともに挿入されます。テーブルで生成されたIDをtickets一挙に他のテーブルに配置する必要があります。

実行方法は次のとおりです。

  1. データを挿入するクエリtable1
  2. の挿入refと自動インクリメントされたIDのトリガーtickets
  3. ID挿入されたチケットtable1と最初のクエリのデータから。
  4. この後、さらに進んでいきますが、それは分類されています。

これが私がこれまでに持っているものです。

delimiter |

CREATE TRIGGER status_ref BEFORE INSERT ON status
FOR EACH ROW BEGIN
 INSERT INTO tickets SET ref = S;

 END;
|

delimiter ;
4

1 に答える 1

2

番号付けスキームを再考することをお勧めします。現在、二重リンクしています。ticketsテーブルは、を介して詳細を参照しref、詳細テーブルは、をtickets介してテーブルを参照しますID

これは良い考えではありません。テーブルの1つを後で更新して、この二重リンクの同期を解除することを考えてください。2番目の数値を完全に無意味にすることを許可しないか、許可します。この場合、異なる結果になります。に使用するフィールドに応じた結果JOIN

tickets.ID主要なテーブルが1つある番号付けスキームを選択する必要があります。個人的には、詳細テーブルにリンクするための要件を削除するだけです。

編集

これは、refフィールドの意味についての私の部分の誤解だったようです-他のコメントから判断すると、私はこれだけではありませんでした。

refフィールドに参照のタイプに関する情報のみが含まれている場合は、簡単なオプションがあります。テーブルに追加のフィールドrefIDを作成しtickets、詳細テーブルの(自動インクリメント)IDフィールドを格納します。あなたは次のようなものが必要になります

ALTER TABLE tickets ADD COLUMN refID INT NOT NULL;

-- the following only if you not already have it
ALTER TABLE status ADD COLUMN ID INT AUTO_INCREMENT PRIMARY KEY;

CREATE TRIGGER status_ref BEFORE INSERT ON status
FOR EACH ROW BEGIN
 INSERT INTO tickets SET ref = S, refID=NEW.ID;
END;

これにより、詳細テーブルIDがテーブルに格納されticketsます。

于 2012-09-04T21:54:24.730 に答える