将购票和取消订单改为存储过程和触发器

This commit is contained in:
2024-06-14 21:26:48 +08:00
parent e435ae4035
commit 97e7382a6d
6 changed files with 84 additions and 50 deletions

View File

@@ -13,5 +13,6 @@ GRANT ALL PRIVILEGES ON ServiceDatabase.Airports TO 'serviceAgent'@'%';
GRANT ALL PRIVILEGES ON ServiceDatabase.Tickets TO 'serviceAgent'@'%';
GRANT SELECT, UPDATE (First_class_seats_remaining, Business_class_seats_remaining, Economy_class_seats_remaining)
ON ServiceDatabase.Flights TO 'serviceAgent'@'%';
GRANT EXECUTE ON PROCEDURE ServiceDatabase.AddPassengerAndTicket TO 'serviceAgent'@'%';
FLUSH PRIVILEGES;

View File

@@ -68,4 +68,64 @@ CREATE TABLE ServiceDatabase.Tickets (
FOREIGN KEY (PassengerID) REFERENCES Passengers(ID) ON DELETE CASCADE,
FOREIGN KEY (OrderID) REFERENCES Orders(ID) ON DELETE CASCADE,
CHECK (Seat_class IN ('First Class', 'Business Class', 'Economy Class'))
);
);
USE ServiceDatabase;
DELIMITER //
CREATE PROCEDURE AddPassengerAndTicket(
IN p_passenger_id VARCHAR(18),
IN p_name VARCHAR(255),
IN p_phone_number BIGINT,
IN p_seat_class VARCHAR(255),
IN p_flight_id VARCHAR(255),
IN p_price DECIMAL(7, 2),
IN p_order_id INT
)
BEGIN
-- 插入或更新乘客信息
INSERT INTO Passengers (ID, Name, Phone_number)
VALUES (p_passenger_id, p_name, p_phone_number)
ON DUPLICATE KEY UPDATE Name=VALUES(Name), Phone_number=VALUES(Phone_number);
-- 更新航班座位数
IF p_seat_class = 'First Class' THEN
UPDATE Flights
SET First_class_seats_remaining = First_class_seats_remaining - 1
WHERE ID = p_flight_id;
ELSEIF p_seat_class = 'Business Class' THEN
UPDATE Flights
SET Business_class_seats_remaining = Business_class_seats_remaining - 1
WHERE ID = p_flight_id;
ELSEIF p_seat_class = 'Economy Class' THEN
UPDATE Flights
SET Economy_class_seats_remaining = Economy_class_seats_remaining - 1
WHERE ID = p_flight_id;
END IF;
-- 插入机票信息
INSERT INTO Tickets (Price, FlightID, Seat_class, PassengerID, OrderID)
VALUES (p_price, p_flight_id, p_seat_class, p_passenger_id, p_order_id);
END //
CREATE TRIGGER restore_seats
BEFORE DELETE ON Tickets
FOR EACH ROW
BEGIN
IF OLD.Seat_class = 'First Class' THEN
UPDATE Flights
SET First_class_seats_remaining = First_class_seats_remaining + 1
WHERE ID = OLD.FlightID;
ELSEIF OLD.Seat_class = 'Business Class' THEN
UPDATE Flights
SET Business_class_seats_remaining = Business_class_seats_remaining + 1
WHERE ID = OLD.FlightID;
ELSEIF OLD.Seat_class = 'Economy Class' THEN
UPDATE Flights
SET Economy_class_seats_remaining = Economy_class_seats_remaining + 1
WHERE ID = OLD.FlightID;
END IF;
END //
DELIMITER ;