2012-09-04 178 views
0

我創建了一個tickets表,該表包含所有內容的ID,以便它們都可以是唯一的。 tickets表插入新數據BEFORE插入其他表上。我需要將在tickets表中生成的ID一舉放入其他表中。插入插入到另一個表中的值

下面是它的運行方式;

  1. 查詢來將數據插入到reftable1
  2. 觸發器插入件和一個自動在tickets
  3. ID遞增ID從插回到table1以及來自所述第一查詢中的數據的門票。
  4. 此後還會繼續,但這是排序。

這是我到目前爲止。

delimiter | 

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

END; 
| 

delimiter ; 

回答

2

我建議你重新考慮你的編號方案:現在,你是雙聯:該tickets表通過ref指的是細節,細節表通過其IDtickets表。

這不是一個好主意:想想以後對其中一個表的更新,會使這個雙向鏈接失去同步:要麼你不允許這樣做,這會導致第二個數字毫無意義,或者你允許它,在這種情況下,你根據您使用JOIN的哪個字段,結果會有不同的結果。

您應該選擇帶有一個主表的編號方案 - 我個人會簡單地放棄將tickets.ID鏈接回到詳細信息表的要求。

編輯

看來,這是我的一部分作爲ref字段的含義的誤解 - 由其他評論來看,我並不孤單與此有關。

如果ref場攜帶的唯一參考類型的信息,你有一個容易的選擇:在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; 

這將detail-table ID存儲在tickets表中。

+0

聽這個。最初的問題是一個非常荒謬的數據庫設計的例子。 –

+0

我明白這一點,略。如何將'tickets'中的單個行鏈接到另一個表中的詳細信息? –

+0

@EugenRieck我現在的想法是,ref只是指代ID的用途。我猜測這是一個愚蠢的做法。我應該怎麼做? –