एक त्वरित और अच्छे उत्तर के लिए आपको उदाहरण के लिए एक कार्यशील उदाहरण डेटा प्रदान करने की तुलना में अधिक चीजों की आवश्यकता होती है
यह ट्रिगर सम्मिलित करने के किसी भी प्रयास को अवरुद्ध कर देगा यदि रूम_साइज़ योग की गई सीटों से छोटा है।
कृपया अंत में पढ़ें, मैं समझाता हूं, जहां आपको कुछ काम करना चाहिए
DELIMITER $$
CREATE TRIGGER check_roomsize_Before_Insert BEFORE insert on booked
FOR EACH ROW
begin
if (SELECT SUM(booked_seats) + NEW.booked_seats FROM booked WHERE room_id = NEW.room_id AND booked = NEW.booked GROUP BY room_id)
> (select room_size from rooms where rooms.room_id= new.room_id) then
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Roomsize too smal!';
end if;
END$$
DELIMITER ;
स्कीमा (MySQL v5.7)
create table rooms ( room_id int primary key,
room_size int);
create table booked (room_id int,
booked datetime, booked_seats int, remaining_seats int, CONSTRAINT fk_category
FOREIGN KEY (room_id)
REFERENCES rooms(room_id));
INSERT INTO rooms VALUES ( 1,5);
DELIMITER $$
CREATE TRIGGER check_roomsize_Before_Insert BEFORE insert on booked
FOR EACH ROW
begin
if (SELECT SUM(booked_seats) + NEW.booked_seats FROM booked WHERE room_id = NEW.room_id AND booked = NEW.booked GROUP BY room_id)
> (select room_size from rooms where rooms.room_id= new.room_id) then
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Roomsize too smal!';
end if;
END$$
DELIMITER ;
INSERT INTO booked VALUES (1,now(),3,2);
#INSERT INTO booked VALUES (1,now(),3,0);
क्वेरी #1
SELECT * FROM booked;
| room_id | booked | booked_seats | remaining_seats |
| ------- | ------------------- | ------------ | --------------- |
| 1 | 2020-04-19 20:04:07 | 3 | 2 |
जैसा कि आप उदाहरण में देख सकते हैं कि 1 पंक्ति डाली गई है और दूसरी, अपवाद देती है।
आपको उस हिस्से में सुधार करने की आवश्यकता है जहां मैं बुक की गई सीटों का योग करता हूं, मैं एक
. बनाता हूंक्योंकि मैं बिल्कुल नहीं जानता कि पूर्ण सीटों की संख्या के योग के लिए कौन सा समय मानदंड गिना जाएगा। ट्रिगर का परीक्षण करने के लिए अब टाइमस्टैम्प का कोई मतलब नहीं है, मुझे कुछ तारीख चाहिए।