Mysql
 sql >> Datenbank >  >> RDS >> Mysql

mysql - Datumsbereich in Datumsspalten einfügen, WENN sich Datumsangaben nicht mit bestehenden überschneiden

Leider ist dies mit MySQL unmöglich. Oder zumindest praktisch. Der bevorzugte Weg wäre die Verwendung von SQL CHECK-Einschränkungen, diese sind im SQL-Sprachstandard enthalten. MySQL unterstützt sie jedoch nicht.

Siehe:https://dev.mysql.com/doc /refman/5.7/en/create-table.html

Es scheint, dass PostgreSQL CHECK-Einschränkungen für Tabellen unterstützt, aber ich bin mir nicht sicher, wie praktikabel es für Sie ist, die Datenbank-Engine zu wechseln, oder ob es überhaupt die Mühe wert ist, nur diese Funktion zu verwenden.

In MySQL könnte ein Trigger verwendet werden, um dieses Problem zu lösen, der auf überlappende Zeilen prüfen würde, bevor das Einfügen/Aktualisieren auftritt, und einen Fehler mit dem SIGNAL auslöst Erklärung. (Siehe:https://dev.mysql.com/doc/ refman/5.7/en/signal.html ) Um diese Lösung nutzen zu können, müssen Sie jedoch eine aktuelle MySQL-Version verwenden.

Abgesehen von reinen SQL-Lösungen erfolgt dies normalerweise in der Anwendungslogik, sodass jedes Programm, das auf die MySQL-Datenbank zugreift, normalerweise auf diese Art von Einschränkungen prüft, indem es jede Zeile anfordert, die durch den neuen Eintrag in einem SELECT COUNT(id) ... Erklärung. Wenn die zurückgegebene Anzahl größer als 0 ist, wird einfach nicht eingefügt/aktualisiert.