2011-03-31 75 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

相关问题