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

Come posso verificare se il valore esiste già nella tabella?

Usa un unique constraint . Prova a inserire/aggiornare il record e catturare l'eccezione generata quando viene violato il vincolo univoco. Questo è l'unico modo per garantire un indirizzo e-mail univoco; prima il controllo e l'aggiornamento sono soggetti a problemi di concorrenza poiché è possibile che qualcun altro aggiorni il proprio record allo stesso valore che stai tentando di impostare subito dopo aver eseguito il controllo e prima di aggiornare il record.

Inoltre:scopri come utilizzare where -clausole. Ora stai recuperando TUTTI i record, scorrendo su di essi ecc. Il che richiede inutilmente molte risorse, impiega troppo tempo ed è solo un semplice spreco. Se vuoi verificare la presenza di un record che corrisponde a un criterio scrivi:

Select foo, bar from table where baz = 123

Dove baz = 123 è il tuo criterio Immagina cosa accadrebbe quando hai 500 o anche 500.000 record nella tua configurazione attuale. Il database eseguirà la tua query, raccoglierà TUTTE le righe da quel database, le trasferirà alla tua applicazione dove la tua applicazione iterarà tutti i 500.000 risultati. Oppure chiedi al DB di fare ciò in cui è bravo (e perché lo stai usando in primo luogo):dammi il/i record che corrispondono al criterium X. Otterresti 1 o nessun record (dato l'unico vincolo):1 =alcuni record corrispondono al tuo criterium, nessuno =nessun record esiste. Salva il trasferimento e il "dovere guardare manualmente" 499.999 record;-)