sql >> Database >  >> RDS >> Mysql

mysql - INSERT datumbereik in datumkolommen ALS datums niet overlappen met bestaande

Helaas is dit onmogelijk met alleen MySQL. Of in ieder geval praktisch. De voorkeursmanier zou het gebruik van SQL CHECK-beperkingen zijn, deze zijn in de SQL-taalstandaard. MySQL ondersteunt ze echter niet.

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

Het lijkt erop dat PostgreSQL wel CHECK-beperkingen op tabellen ondersteunt, maar ik weet niet zeker hoe haalbaar het voor u is om van database-engine te veranderen of dat het zelfs de moeite waard is om die functie te gebruiken.

In MySQL zou een trigger kunnen worden gebruikt om dit probleem op te lossen, die zou controleren op overlappende rijen voordat het invoegen/updaten plaatsvindt en een fout zou genereren met behulp van de SIGNAL uitspraak. (Zie:https://dev.mysql.com/doc/ refman/5.7/nl/signaal.html ) Om deze oplossing te gebruiken, moet u echter een up-to-date MySQL-versie gebruiken.

Afgezien van pure SQL-oplossingen, wordt dit meestal gedaan in applicatielogica, dus welk programma dan ook toegang heeft tot de MySQL-database, controleert meestal op dit soort beperkingen door elke rij op te vragen die wordt geschonden door de nieuwe invoer in een SELECT COUNT(id) ... uitspraak. Als het geretourneerde aantal groter is dan 0, wordt het gewoon niet ingevoegd/bijgewerkt.




  1. Hoe een verklaring voorbereiden voor een updatequery?

  2. Oracle 18c Nieuwe functie:online wijzigen van partitionering

  3. Logische replicatiepartitionering met PostgreSQL 13

  4. MySQL Connector/Python - python-variabele in MySQL-tabel invoegen