Gérer les plages de dates qui se chevauchent dans MySQL
Insérer de nouvelles plages de dates dans une table existante peut être délicat, 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 disponible. pris en charge par MySQL. PostgreSQL, d'autre part, 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 une 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 implique l'utilisation d'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.
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3