«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как предотвратить перекрытие диапазонов дат в MySQL?

Как предотвратить перекрытие диапазонов дат в MySQL?

Опубликовано 12 ноября 2024 г.
Просматривать:410

How to Prevent Date Range Overlaps in MySQL?

Работа с перекрывающимися диапазонами дат в 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