Malheureusement, en utilisant uniquement MySQL, cela est impossible. Ou du moins, pratiquement. La méthode préférée serait d'utiliser les contraintes SQL CHECK, celles-ci sont dans le standard du langage SQL. Cependant, MySQL ne les prend pas en charge.
Voir :https://dev.mysql.com/doc /refman/5.7/en/create-table.html
Il semble que PostgreSQL supporte les contraintes CHECK sur les tables, mais je ne sais pas dans quelle mesure il est viable pour vous de changer de moteur de base de données ou si cela vaut même la peine d'utiliser cette fonctionnalité.
Dans MySQL, un déclencheur pourrait être utilisé pour résoudre ce problème, qui vérifierait les lignes qui se chevauchent avant que l'insertion/la mise à jour ne se produise et lancerait une erreur en utilisant le SIGNAL
déclaration. (Voir :https://dev.mysql.com/doc/ refman/5.7/fr/signal.html
) Cependant, pour utiliser cette solution, vous devez utiliser une version à jour de MySQL.
En dehors des solutions SQL pures, cela se fait généralement dans la logique de l'application, donc quel que soit le programme accédant à la base de données MySQL, il vérifie généralement ce type de contraintes en demandant chaque ligne violée par la nouvelle entrée dans un SELECT COUNT(id) ...
déclaration. Si le nombre renvoyé est supérieur à 0, cela ne fonctionne tout simplement pas pour l'insertion/la mise à jour.