0
我有預訂表觸發來避免衝突
id room date_IN date_OUT
1 101 29-12-2016 1-1-2017
2 102 29-12-2016 2-1-2017
3 101 1-1-2017 4-1-2017
我怎樣才能使觸發避免,如果我修改(ID = 1)2017年3月1日
我有預訂表觸發來避免衝突
id room date_IN date_OUT
1 101 29-12-2016 1-1-2017
2 102 29-12-2016 2-1-2017
3 101 1-1-2017 4-1-2017
我怎樣才能使觸發避免,如果我修改(ID = 1)2017年3月1日
你有date_OUT衝突日期創建2個觸發器BEFORE UPDATE
和BEFORE INSERT
。然後檢查要插入或更新的新日期是否在另一個條目的date_IN和date_OUT之間。
一個例子是
CREATE TABLE booking (
id INT AUTO_INCREMENT PRIMARY KEY,
room INT,
date_IN date,
date_OUT date
);
DELIMITER $$
CREATE TRIGGER `booking_duplicate_insert` BEFORE INSERT ON `booking`
FOR EACH ROW
BEGIN
IF EXISTS (SELECT date_IN, date_OUT FROM booking WHERE date_IN <= NEW.date_IN AND date_OUT > NEW.date_OUT) THEN
SIGNAL SQLSTATE '45000'
SET MESSAGE_TEXT = 'An error occurred';
END IF;
END $$
DELIMITER ;
DELIMITER $$
CREATE TRIGGER `booking_duplicate_update` BEFORE UPDATE ON `booking`
FOR EACH ROW
BEGIN
IF EXISTS (SELECT date_IN, date_OUT FROM booking WHERE date_IN <= NEW.date_IN AND date_OUT > NEW.date_OUT) THEN
SIGNAL SQLSTATE '45000'
SET MESSAGE_TEXT = 'An error occurred';
END IF;
END $$
DELIMITER ;
insert into booking (room, date_IN, date_OUT) VALUES (101, '2016-12-29', '2017-01-01');
insert into booking (room, date_IN, date_OUT) VALUES (101, '2017-01-01', '2017-01-04');
// Should fail to insert
insert into booking (room, date_IN, date_OUT) VALUES (101, '2017-01-02', '2017-01-02');
爲什麼會是這樣重複? – shmosel
你會怎麼做會造成重複? – GurV
我的意思是衝突 – ubuntu