sql >> Database teknologi >  >> RDS >> Mysql

mysql - INDSÆT datointerval i datokolonner, HVIS datoer ikke overlapper med eksisterende

Desværre er det umuligt at bruge MySQL. Eller i det mindste praktisk talt. Den foretrukne måde ville være at bruge SQL CHECK-begrænsninger, disse er i SQL-sprogstandarden. MySQL understøtter dem dog ikke.

Se:https://dev.mysql.com/doc /refman/5.7/da/create-table.html

Det ser ud til, at PostgreSQL understøtter CHECK-begrænsninger på tabeller, men jeg er ikke sikker på, hvor levedygtigt det er for dig at skifte databasemotor, eller om det endda er besværet værd bare at bruge den funktion.

I MySQL kunne en trigger bruges til at løse dette problem, som ville kontrollere for overlappende rækker, før indsættelsen/opdateringen finder sted, og give en fejl ved hjælp af SIGNAL udmelding. (Se:https://dev.mysql.com/doc/ refman/5.7/da/signal.html ) Men for at bruge denne løsning skal du bruge en opdateret MySQL-version.

Bortset fra rene SQL-løsninger, sker dette typisk i applikationslogik, så uanset hvilket program, der tilgår MySQL-databasen, tjekker det typisk for denne slags begrænsninger ved at anmode om hver række, der overtrædes af den nye post i en SELECT COUNT(id) ... udmelding. Hvis det returnerede antal er større end 0, gør det simpelthen ikke til indsættelsen/opdateringen.




  1. PHP-webapplikation:spørgsmål om bedste praksis for mysql-databasedesign

  2. Opret MySQL-database fra Java

  3. Er databaseudløsere sikre for integritetsbegrænsninger på tværs af tabel?

  4. MySQL - Kompleksiteten af:SELECT COUNT(*) FROM MyTable;