2016年9月15日 星期四

關於 mysql #1442 cannot update table "xxx" in Store function/trigger .....

MySQL 裡有在使用 Stored Function/Trigger 的,大概都會碰到過 #1422 這個Error.

今天記錄一下我的狀況:

我寫了一個 Procedure ,其中有一段

UPDATE table1 SET  field1=....., field2=....., WHERE .....
其中一個 field = (SELECT mem_id FROM members WHERE xxxx=xxxxx)

這裡呼叫了 members 這個 table,
而 UPDATE 的 table1 裡面的 Trigger,又有一段
UPDATE members SET xxx=xxxxx......

所以,此時,就產生了 #1422的Error!

也就是說,我在一個 UPDATE Statement 中呼叫了members 的 SELECT ,而在 該UPDATE中又啟動 trigger 又去 UPDATE members ,

而 #1422 的基本錯誤就是:不能在 自己的 trigger 中又要去 update自己!

一般而言,這是 對自己的 table

而我上述的例子,不是自己的 table, 而是有引用到的 另一個 table。我一直在自己的table中找不到錯誤,後來經朋友幫忙看,才發現是 用到的另一個table members的問題!

記錄在這裡,留給自己參考,如果剛好有緣者,也請參考之。

沒有留言:

張貼留言

如何判斷現在FORM是在 insert mode? 還是 update mode?

只要用  if (empty({primary_key})) 就可以知道是否為新增模式了。 如果 {promary_key} 是空白的,那麼就是在新增模式;反之,就是更新模式。 以上。