日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql after 不起作用_我的MySQL触发器不起作用,语法简单,不复杂

發布時間:2025/3/15 数据库 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql after 不起作用_我的MySQL触发器不起作用,语法简单,不复杂 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

我的MySQL觸發器不起作用,語法簡單,不復雜

我不知道為什么我的觸發器不工作,查詢工作時手動使用它,但是當我想通過觸發器更新它不起作用。 有人可以幫我知道為什么嗎?

這是我的觸發器:

CREATE TRIGGER `upd_PTS` AFTER UPDATE ON `pos_table` FOR EACH ROW BEGIN IF (NEW.played_games <> OLD.played_games) THEN update pos_table set PTS=((NEW.won_games*2)+(NEW.tie_games*1)); END IF; END

簡單來說,這是一個體育賽事,當統計人員捕捉到比賽的分數時,他會自動添加一個playing_game,并且分別取得了勝利,平局或者丟失的比賽,所以當他改變了play_games時,我的觸發器應該會自動執行,并且必須改變PTS專欄。 但它不工作。

另外,當我手動編輯plays_games列,我得到這個錯誤:“不能更新存儲的函數/觸發器中的表pos_table,因為它已經被調用這個存儲的函數/觸發器的語句使用”。

存儲的函數或觸發器不能修改調用該函數或觸發器的語句(用于讀取或寫入)的表。

來自: 存儲的程序限制 。

一般情況下,在插入時觸發一個觸發器,如果??要更改正在插入的值,可以使用BEFORE INSERTtypes的觸發器,并更改NEW

也注意到下面的聲明不是你想要的。

update pos_table set PTS=((NEW.won_games*2)+(NEW.tie_games*1));

它更新整個表,而我認為你只是試圖更新一個特定的行。 無論如何,這是一個簡單的計算,所以你并不需要存儲這個列。 您可以輕松地計算顯示時間的值,并使您的代碼變得更簡單+避免觸發器的問題。

這段代碼觸發自己。 無盡的循環或堆棧溢出….

正如@ e4c5所提到的,即使你的觸發器可以更新同一個表(不行),你的UPDATE也會影響表的所有行,而不僅僅是當前正在更新的單行。

如果你想要一個觸發器改變正在更新的行的值,你可以使用SET :

CREATE TRIGGER `upd_PTS` BEFORE UPDATE ON `pos_table` FOR EACH ROW BEGIN IF (NEW.played_games <> OLD.played_games) THEN SET NEW.PTS = NEW.won_games*2 + NEW.tie_games*1; END IF; END

另請注意,您不能更改導致觸發器運行的行中的值,除非您在BEFORE觸發器中執行此操作。

總結

以上是生活随笔為你收集整理的mysql after 不起作用_我的MySQL触发器不起作用,语法简单,不复杂的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。