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

mysqli indsæt - men kun hvis det ikke er en dublet

Overvej at sætte en unique indeks på denne særlige tabel. Følgende kode tilføjer indekset og fjerner alle aktuelle dubletter:

ALTER IGNORE TABLE `RegisteredUsersTable` ADD UNIQUE INDEX unique_email (`UserEmail`);

Når dette er tilføjet, skal du bruge INSERT IGNORE eller INSERT...ON DUPLICATE KEY UPDATE . De vil kun præforme indsættelsen, hvis der ikke er nogen dubletter.

$mysqli->query("INSERT IGNORE INTO RegisteredUsersTable (UserName, UserEmail) VALUES ('".$newUserName."', '".$newUserEmail."')");

Mysql vil give en fejl, fordi e-mailen allerede er i databasen. IGNORE-kommandoen fortæller dog, at scriptet ikke skal være opmærksom på fejl for denne forespørgsel, fordi du i dette tilfælde forventer, at det er en dubletrække.

Der er også en måde at advare din bruger med en fejl- eller succesmeddelelse, selv med INSERT IGNORE . Brug MYSQL LAST_INSERT_ID() . Hvis der blev givet et ID, blev det indsat. Hvis ikke, så var e-mailen der allerede (eller der var en anden fejl).



  1. Er det muligt at bruge brugerdefinerede aggregater (clr) med vinduesfunktioner (over)?

  2. Fuldtekstsøgning på mysql med et ord på 3 bogstaver

  3. Introduktion til PL/SQL-undtagelseshåndtering i Oracle-database

  4. Android - SQLite - VÆLG MELLEM Dato1 OG Dato2