2011-03-31 109 views
1

我有以下兩個表在MySQL數據庫:MySQL的觸發器來更新另一個表

Bookings 
BookingID | ClientID | SeatID 

SeatAvailability 
SeatAvailabilityID | BookingID | ShowID | Available 

他們正在SeatID/SeatAvailabilityID鏈接。 我試圖編寫一個觸發器,每次在預訂中插入一行時都更新SeatAvailability表。觸發器應該將SeatAvailability.Available更改爲0,並且還將同樣SeatAvailabilityID的SeatAvailability中的BookingID從預訂輸入到SeatID中的BookingID字段中。

我已經寫了這個觸發器,MySql接受它,但是在插入 時出錯「錯誤1054:'where子句'中的未知列'cinemax.bookings.SeatID'。

DELIMITER $$ 

USE `cinemax`$$ 

CREATE 
DEFINER=`root`@`localhost` 
TRIGGER `cinemax`.`update_available` 
AFTER INSERT ON `cinemax`.`bookings` 
FOR EACH ROW 
UPDATE cinemax.seatavailability 
SET cinemax.seatavailability.Availabe=0, cinemax.seatavailability.BookingID=cinemax.bookings.BookingID 
WHERE cinemax.bookings.SeatID=cinemax.seatavailability.SeatAvailabilityID$$ 
+1

您應該使用'AFTER INSERT'而不是'AFTER UPDATE' – Nishant 2011-03-31 15:10:12

回答

0

這幾個月的晚,但我還是決定整體轉讓之前移交給它一個快速射擊。與此同時,我轉向了Postgres,因爲它似乎提供了更多的功能(雖然不像用戶友好)。我首先要創建一個觸發器功能:

CREATE OR REPLACE FUNCTION updateseatavailable() 
RETURNS trigger AS 
$BODY$ 
BEGIN 

      IF (TG_OP = 'INSERT') THEN 
       UPDATE "SeatAvailability" 
      SET "Available"='FALSE' AND "BookingID"=NEW."BookingID" WHERE "SeatAvailabilityID"=NEW."SeatID"; 

      ELSIF (TG_OP = 'DELETE') THEN 
      UPDATE "SeatAvailability" 
      SET "Available"='TRUE' WHERE "SeatAvailabilityID"=OLD."SeatID"; 

      END IF; 

      RETURN NEW; 
     END; 
    $BODY$ 
     LANGUAGE plpgsql VOLATILE 

,然後簡單地調用函數/程序從觸發器:

CREATE TRIGGER UpdateSeatAvailable 
AFTER INSERT OR DELETE ON "Bookings" 
FOR EACH ROW 
EXECUTE PROCEDURE updateSeatAvailable(); 

我是不是能夠得到BookingID在SeatAvailability更新一些原因(在插入沒有發生和刪除我有一個錯誤告訴我可用不能爲空,即使我改變了預訂ID),所以我省略了在postgres中,並用Java實現它。這不是最好的方式,但總比沒有好。

我決定發佈我的解決方案,以防萬一有人遇到類似的問題,並且在這個問題上遇到困難。

1

嘗試

AFTER INSERT ON `cinemax`.`bookings` 

,而不是

AFTER UPDATE ON `cinemax`.`bookings` 
+0

現在嘗試插入新行時出現以下錯誤「Unknown列'cinemax.bookings.SeatID'in'where子句'」 – Matt 2011-03-31 15:20:18

+0

預訂確實有SeatID,我只是在我的問題中將它稱爲SeatAvailabilityID,以避免混淆。我編輯了這個問題,以便它完全像數據庫。 感謝您的幫助。你絕對正確的INSERT ON而不是UPDATE ON。 – Matt 2011-03-31 16:10:26

+0

@Kentz查詢出現問題 - 很可能是查詢中的列名錯誤。嘗試獨立運行查詢。 – Nishant 2011-03-31 16:16:09

相關問題