Purtroppo, usare solo MySQL è impossibile. O almeno, praticamente. Il modo preferito sarebbe usare i vincoli SQL CHECK, questi sono nello standard del linguaggio SQL. Tuttavia, MySQL non li supporta.
Vedi:https://dev.mysql.com/doc /refman/5.7/en/create-table.html
Sembra che PostgreSQL supporti i vincoli CHECK sulle tabelle, ma non sono sicuro di quanto sia fattibile per te cambiare motore di database o se valga la pena usare quella funzione.
In MySQL potrebbe essere utilizzato un trigger per risolvere questo problema, che verificherebbe la presenza di righe sovrapposte prima che si verifichi l'inserimento/aggiornamento e genererebbe un errore utilizzando il SIGNAL
dichiarazione. (Vedi:https://dev.mysql.com/doc/ refman/5.7/en/signal.html
) Tuttavia, per utilizzare questa soluzione dovresti utilizzare una versione aggiornata di MySQL.
A parte le soluzioni SQL pure, questo in genere viene fatto nella logica dell'applicazione, quindi qualunque programma stia accedendo al database MySQL in genere verifica questo tipo di vincoli richiedendo ogni riga che viene violata dalla nuova voce in un SELECT COUNT(id) ...
dichiarazione. Se il conteggio restituito è maggiore di 0, semplicemente non viene inserito/aggiornato.