Maison  >  Article  >  base de données  >  Comment éviter les chevauchements de plages de dates dans MySQL ?

Comment éviter les chevauchements de plages de dates dans MySQL ?

Linda Hamilton
Linda Hamiltonoriginal
2024-10-27 10:09:30788parcourir

How to Prevent Date Range Overlaps in MySQL?

Gérer les plages de dates qui se chevauchent dans MySQL

L'insertion de nouvelles plages de dates dans une table existante peut être délicate, en particulier lorsque vous essayez d'éviter les chevauchements avec entrées existantes. Dans ce contexte, nous souhaitons éviter d'insérer des plages qui chevauchent celles de la base de données pour un identifiant de compte spécifique (acc_id).

Bien que MySQL offre la possibilité de valider les dates à l'aide des contraintes SQL CHECK, cette fonctionnalité n'est malheureusement pas pris en charge par MySQL. PostgreSQL, en revanche, prend en charge les contraintes CHECK, mais le changement de moteur de base de données peut ne pas être réalisable dans toutes les situations.

Comme alternative, nous pouvons implémenter la validation dans la logique de l'application. Une approche consiste à utiliser une instruction SELECT COUNT(id) ... pour vérifier les chevauchements avant de tenter un 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);

Si le nombre renvoyé est supérieur à 0, l'insertion est abandonnée en raison d'un chevauchement.

Une autre méthode consiste à utiliser un déclencheur dans MySQL. Un déclencheur peut être programmé pour vérifier les chevauchements avant que INSERT/UPDATE ne se produise et générer une erreur s'il y en a. Les déclencheurs nécessitent cependant une version MySQL à jour.

En fin de compte, le choix de l'approche dépend des exigences spécifiques de votre application et de la faisabilité de sa mise en œuvre de l'une des manières prises en charge.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn