Problème :
Étant donné une table avec disponibilité de la plage de dates (avail), la tâche consiste à insérer une nouvelle plage de dates dans le tableau uniquement si elle ne chevauche aucune plage de dates existante pour l'ID de compte donné (acc_id).
Solution proposée Utilisation d'une seule instruction d'insertion :
Bien qu'il puisse être tentant d'accomplir cela avec une seule instruction d'insertion, malheureusement, cela n'est pas directement possible dans MySQL seul.
Alternative Approches :
Contraintes SQL CHECK (non prises en charge dans MySQL) :
Les contraintes SQL CHECK sont la méthode privilégiée pour appliquer un tel chevauchement validation. Cependant, MySQL ne prend pas en charge les contraintes CHECK.
Contraintes PostgreSQL CHECK :
PostgreSQL prend en charge les contraintes CHECK sur les tables. Si le passage à PostgreSQL est une option viable, cette approche pourrait être envisagée.
Déclencheurs MySQL :
Les déclencheurs MySQL peuvent être utilisés pour vérifier se chevauchent avant les opérations d’insertion ou de mise à jour. Cependant, cela nécessite une version MySQL à jour.
Logique d'application :
En règle générale, la validation du chevauchement est effectuée dans la logique d'application. Une instruction SELECT COUNT(id) ... peut être utilisée pour vérifier les lignes qui violent la nouvelle entrée. Si le nombre est supérieur à 0, l'insertion ou la mise à jour est interrompue.
Considérations supplémentaires :
Conclusion :
Bien qu'une seule instruction d'insertion puisse ne pas être réalisable dans MySQL, des approches alternatives telles que les contraintes PostgreSQL CHECK, les déclencheurs MySQL ou la logique d'application peuvent fournir une validation de chevauchement fiable.
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!