2013-08-23 77 views
4

我想用國家代碼和新的id這是一個自動增量值更新我的表中的列。MySQL插入之前插入更新列與新的自動增量編號

BEGIN 
SET new.key = concat(new.countryCode,new.id); 
END 

countryCode工作正常,但id始終是空白。我怎樣才能實現這樣的事情? id來自autoincrement列。

我知道它不工作,因爲它是在插入後生成的。那麼我該如何做這樣的事情呢?

+0

爲什麼不只是創建一個返回該連接值的視圖?沒有真正的需要存儲這個。 –

+0

我需要在其他地方使用的價值。我只在這裏使用了2個值。還有更多將被連接。 – Norman

回答

4

AUTO_INCREMENT只有在插入後設置

如果您需要訪問那個值,您只能在一個AFTER INSERT觸發器中。但是,你不能修改列值在AFTER UPDATE觸發...

此外,你不能在你的AFTER INSERT觸發作爲(http://dev.mysql.com/doc/refman/5.0/en/stored-program-restrictions.html)表進行更新:

在一個存儲的函數或觸發器,則不允許修改調用該函數或觸發器的 語句已被使用(用於讀取或寫入)的表格 。


這裏唯一合理的解決方案是創建一個存儲過程來更新表,調整相關的列在一個事務中「模仿」你原子INSERT語句。


話雖這麼說,你的具體情況,在key列是多餘的,因爲該列在同一行的其他兩列的僅僅是串聯。

鑑於它的名字,你不是在尋找一種方法來創建一個複合密鑰嗎?類似的東西:

ALTER TABLE tbl ADD UNIQUE KEY (countryCode, id); 
+0

如果我以後也更改它,則會出現以下錯誤:'/ * SQL錯誤(1362):在觸發器* /'後不允許更新NEW行。我使用HeidiSql來做到這一點。 – Norman

+0

@Norman據我所知,沒有辦法通過使用觸發器來實現你想要的。我編輯了我的答案以提供一些替代解決方案。 –

+0

我嘗試了你建議的'ALTER TABLE'。那什麼也沒做...... – Norman