Существуют ли диапазонные unique индексы для mysql?
Допустим в таблице есть целочисленные поля rmin и rmax. Реально ли сделать на них такой unique индекс, чтобы диапазоны значений в этих строках не пересекались, т.е. например для [rmin,rmax]:
[1,100],[101,200],[3000,3000] - корректно, пересечений нет
[1,100],[50,60] - некорректно, один диапазон вложен в другой
[1,100],[90,200] - некорректно, пересекающиеся диапазоны
Т.е. задача, чтобы бд сама контролировала такие индексы и не допускала пересекающиеся диапазоны.
LOCK TABLES `diapason` WRITE;
DROP TRIGGER IF EXISTS `dip`;
DELIMITER //
CREATE TRIGGER `dip` BEFORE INSERT ON `xxx`.`diapason`
FOR EACH ROW
BEGIN
DECLARE dst int;
if NEW.rmin <= 0 OR NEW.rmax <= 0 OR NEW.rmin > NEW.rmax then
signal sqlstate '45000'
SET message_text = "rmin need less than rmax";
end if;
SELECT rmin FROM `diapason` WHERE rmin <= NEW.rmax AND rmax >= NEW.rmin LIMIT 0, 1 INTO dst;
if dst is not null then
signal sqlstate '45000'
SET message_text = "cross";
end if;
SET NEW.value = CONCAT("dst: ",IFNULL(dst,'n/a'));
END//
DELIMITER ;
UNLOCK TABLES;
Имелось ввиду чтобы строка таблицы могла занять не один, а сразу какой-то конечный диапазон значений, чтобы никакая другая строка таблицы не пересекалась с ней. Вроде бы как через триггеры это можно сделать, если уж отвечаете на вопрос, то не помешало бы привести пример такого триггера (please))) , а то иначе ваш ответ будет совсем бесполезным ))