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