Der Umgang mit überlappenden Datumsbereichen in MySQL
Das Einfügen neuer Datumsbereiche in eine vorhandene Tabelle kann schwierig sein, insbesondere wenn versucht wird, Überschneidungen mit zu verhindern vorhandene Einträge. In diesem Zusammenhang möchten wir das Einfügen von Bereichen vermeiden, die sich mit denen in der Datenbank für eine bestimmte Konto-ID (acc_id) überschneiden.
Während MySQL die Option bietet, Datumsangaben mithilfe von SQL CHECK-Einschränkungen zu validieren, ist diese Funktion leider nicht verfügbar unterstützt von MySQL. PostgreSQL hingegen unterstützt CHECK-Einschränkungen, aber ein Wechsel der Datenbank-Engines ist möglicherweise nicht in allen Situationen möglich.
Alternativ können wir die Validierung in der Anwendungslogik implementieren. Ein Ansatz besteht darin, eine SELECT COUNT(id) ...-Anweisung zu verwenden, um auf Überlappungen zu prüfen, bevor ein 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);
Wenn die zurückgegebene Anzahl größer als 0 ist, wird die Einfügung aufgrund einer Überlappung abgebrochen.
Eine andere Methode beinhaltet die Verwendung von a Trigger in MySQL. Ein Trigger kann so programmiert werden, dass er vor dem INSERT/UPDATE auf Überlappungen prüft und einen Fehler auslöst, wenn welche gefunden werden. Trigger erfordern jedoch eine aktuelle MySQL-Version.
Letztendlich hängt die Wahl des Ansatzes von den spezifischen Anforderungen Ihrer Anwendung und der Machbarkeit der Implementierung auf eine der unterstützten Arten ab.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3