Работа с перекрывающимися диапазонами дат в MySQL
Вставка новых диапазонов дат в существующую таблицу может быть сложной задачей, особенно при попытке предотвратить перекрытие с существующие записи. В этом контексте мы хотим избежать вставки диапазонов, которые перекрываются с диапазонами в базе данных для определенного идентификатора учетной записи (acc_id).
Хотя MySQL предлагает возможность проверять даты с использованием ограничений SQL CHECK, эта функция, к сожалению, не поддерживается. поддерживается MySQL. PostgreSQL, с другой стороны, поддерживает ограничения CHECK, но переключение механизмов базы данных может быть невозможным для всех ситуаций.
В качестве альтернативы мы можем реализовать проверку в логике приложения. Один из подходов предполагает использование оператора SELECT COUNT(id) ... для проверки совпадений перед попыткой INSERT:
SELECT COUNT(id) FROM avail WHERE acc_id = '175' AND (start_date BETWEEN '2015-05-30' AND '2015-06-04') OR (end_date BETWEEN '2015-05-30' AND '2015-06-04') OR ('2015-05-30' BETWEEN start_date AND end_date) OR ('2015-06-04' BETWEEN start_date AND end_date);
Если возвращаемое значение больше 0, вставка прерывается из-за перекрытия.
Другой метод предполагает использование триггер в MySQL. Триггер можно запрограммировать на проверку совпадений до того, как произойдет INSERT/UPDATE, и выдать ошибку, если таковая будет обнаружена. Однако для триггеров требуется актуальная версия MySQL.
В конечном итоге выбор подхода зависит от конкретных требований вашего приложения и возможности его реализации одним из поддерживаемых способов.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3