2016-02-14 2 views
0

Я создаю триггер, который предотвратит бронирование полета, если этот рейс уже ушел, и у меня проблемы. Я получаю сообщение об ошибке 1109, и я не уверен, могу ли я присоединиться к таблицам в триггере. Это то, что таблицы выглядят следующим образом:MySQL, создающий триггер с двумя таблицами

Bookings стол:

create table Bookings 
(
bookingNumber int not null auto_increment, 
timeOfBooking datetime not null, 
paymentType bit, -- 1: credit card. 0: debet card(cash) 
cardIssuedBy varchar(35), 
cardholdersName varchar(55), 
flightCode int not null, 
classID int default 3, 
returnFLight boolean default true, 
constraint booking_PK primary key(bookingNumber), 
constraint booking_flight_FK foreign key(flightCode) references lights(flightCode), 
    constraint booking_class_FK foreign key(classID) references Classes(classID) 
); 

Авиабилеты таблица:

create table Flights 
(
flightCode int not null auto_increment, 
flightDate date not null, 
flightNumber char(5) not null, 
aircraftID char(6) not null, 
flightTime time, 
constraint flightPK primary key(flightCode), 
constraint flight_data_UQ unique(flightDate,flightNumber,aircraftID), 
constraint flight_flightschedule_FK foreign key(flightNumber) references FlightSchedules(flightNumber), 
constraint flight_aircraft_FK foreign key(aircraftID) references Aircrafts(aircraftID) 
); 

И, наконец, мой код;

drop trigger if exists check_flightGone; 
delimiter $$ 
create trigger check_flightGone 
before insert on bookings 
for each row 
begin 
    declare msg varchar(255); 
    if (new.timeOfBooking > Flights.flightDate) then -- eat bananas. 
     set msg = concat('The flight you have requested has left you, much like everything else in your life... :^)'); 
     signal sqlstate '45000' set message_text = msg; 
end if; 
end $$ 

delimiter ; 

Полное сообщение об ошибке: «Код ошибки: 1109. Неизвестные таблицы„рейсы“в списке полей»

+0

Можете ли вы изменить свой вопрос, чтобы включить полное сообщение об ошибке? – wogsland

+0

Я сделал именно это. – dazziedroop

ответ

0

Вы должны указать триггер, который строка таблицы flights посмотреть на:

delimiter $$ 
create trigger check_flightGone 
before insert on bookings 
for each row 
begin 
    declare msg varchar(255); 
    declare fdate date; 
    set fdate = (select flightDate from flights where new.flightCode = flights.flightCode); 
    if (new.timeOfBooking > fdate) then -- eat bananas. 
     set msg = concat('The flight you have requested has left you, much like everything else in your life... :^)'); 
     signal sqlstate '45000' set message_text = msg; 
end if; 
end $$ 
+0

Это работает, и вы помогли мне понять mysql. Спасибо за тонну за помощь! :) – dazziedroop

+0

Рад, что я мог помочь! Пожалуйста, поддержите, если вы сочтете это полезным;) – wogsland

Смежные вопросы