web-dev-qa-db-ja.com

出発日が到着日と異なることを確認してください。

次の表があります。

  • フライト(id_flight)

  • 空港(id_airport)

  • Departures_Arrivals(id_flight、id_airport)。フライトと空港の間のジャンクションテーブルであり、次の属性があります。

    • gate

    • 日付

    • タイプ。0または1のいずれかです。0は出発を表し、1は到着を表します。

到着日が出発日よりも大きいことを確認するための制約はありますか?

1
Diana

BEFORE INSERT TRIGGERを作成します。これは、そのフライトと空港の行を挿入する場合に条件が満たされているかどうかをチェックします。

これは例です。条件が満たされていない場合は、条件とエラーメッセージを確認する必要があります。

DELIMITER $$

CREATE TRIGGER before_Departures_Arrivals_insert
BEFORE INSERT
ON Departures_Arrivals FOR EACH ROW
BEGIN
    DECLARE _date  DATETIME;
    DECLARE _tyoe  INTEGER;

    IF NEW.tyoe = 1 THEN
        SET _type = 0;
    ELSE
        SET _type = 1;
    END IF;

    SELECT `date`
    INTO _date
    FROM Departures_Arrivals 
    WHERE id_flight = NEW.id_flight AND  id_airport = NEW.id_airport
            AND type = _type
    ORDER BY `date` DESC
    LIMIT 1;

    IF NEW.`date` > _date THEN
        SIGNAL SQLSTATE '45000' 
        SET MESSAGE_TEXT = "The new date is before the arrival";
    END IF; 

END $$

DELIMITER ;
0
nbk