搜尋

首頁  >  問答  >  主體

更新觸發器之前的MySql和SQL設定不同表/列的更新無法更新儲存函數/觸發器中的表

我有一個連接表,它與 n:m 關係的 2 個表(A 和 C)連接。連接表 (B) 也保存了一些資訊。

A ----- B ------ C

在表 A 中,我有一個 when_modified 列,如果有任何更改,我總是希望保持最新狀態。這應該包括表 B 上的變更。

所以我在表 B 上有一個更新前觸發器,其中包含以下查詢

UPDATE A SET when_modified = NOW() WHERE id = NEW.id;

問題是,如果我現在執行更新查詢(在 B 上進行聯接),我會收到以下錯誤

無法更新儲存函數/觸發器中的表“A”,因為它已被呼叫此儲存函數/觸發器的語句使用。

Update B vv JOIN A v on vv.id = v.id SET vv.block = 1 WHERE v.status = 'finished'

P粉677684876P粉677684876518 天前625

全部回覆(1)我來回復

  • P粉950128819

    P粉9501288192023-09-15 09:46:17

    您需要重寫 UPDATE 語句。

    您無法在觸發器中進行更新,否則可能會發生這種情況。無限循環

    但是簡單的改變就會產生同樣的效果

    CREATE TABLE A (id int, status  varchar(10), when_modified  datetime)
    INSERT INTO A VALUES (1,'finished',now())
    CREATE TABLE B (id int, block int)
    INSERT INTO B VALUES(1,0)
    Update B vv JOIN A  v on vv.id = v.id SET vv.block = 1, v.when_modified = NOW()  WHERE v.status = 'finished'
    SELECT * FROM A
    id 狀態 when_modified
    1 完成 2023-05-15 20:31:15
    SELECT * FROM B
    id 區塊
    1 1

    小提琴

    回覆
    0
  • 取消回覆