2011-09-01 36 views
1

我一直在閱讀更多關於MySQL中的意見(不是我的強項),但我現在想知道是否有人有一個例子,如何將一行插入到由多個表組成的視圖中,超類型和子類型的關係?是否可以在包含多個表的常見自動增量主鍵的視圖中插入「行」?

例如,政黨模式「的層次結構,顯示僱主的角色和工作人員:

 party 
    _ _ | _ _ 
    |   | 
employer staff 

爲其表(簡體):

party        employer    staff 
-------------------------------- --------------------- ----------------- 
party_ID INT auto_increment (PK) party_ID INT (FK)  party_ID INT (FK) 
party_name VARCHAR    tax_reference VARHCAR job_title VARCHAR 
etc...       etc...     etc... 

我知道我可以創建一個視圖只處理相關關係:

CREATE VIEW staff_view AS SELECT party.party_ID, etc... FROM party INNER JOIN staff 

當我添加一個員工的成員,我想創建一個記錄在派對錶中,然後在職員表中引用自動增量party_ID。我看不到如何在一個語句執行插入,像:

INSERT INTO staff_view (party_name, job_title, etc...) VALUES ('John Doe', 'CEO', etc) 

我知道我可以編程達致這,但我希望有一種方法可以直接在數據庫中做到這一點,並保持引用完整性。你將如何處理這個問題?

(MySQL文檔:http://dev.mysql.com/doc/refman/5.1/en/view-updatability.html

+0

除非您只指定1個源表中的字段,否則無法插入多表視圖。我能想到的只用一個查詢來完成插入操作的唯一方法就是編寫一個存儲過程。 –

+0

@Sam,你有沒有例子說明你如何使用存儲過程來做到這一點? – boatingcow

回答

0

也許你可以用插入trigger解決問題了嗎?

+0

嗨flob - 你有什麼可以實現這個目標的指針?如果在插入聲明之前爲工作人員定義了觸發器,那麼如何爲工作人員同時發送工作人員的值? – boatingcow

+0

在觸發器中,您可以插入到派對錶中,然後使用LAST_INSERT_ID()獲取下一個插入的外鍵值。如果你在一次交易中這樣做,它將在其他會話中「同時」。 http://dev.mysql.com/doc/refman/5.0/en/example-auto-increment.html – flob

+0

嗨,我已經標記了這個問題作爲答案,因爲從技術上講,我不能直接詢問,所以觸發方法是最合適的。 – boatingcow

相關問題