sql >> Database >  >> RDS >> Mysql

Hoe dubbele invoegingen in een tabel te voorkomen?

U heeft geen unieke sleutel op het e-mailadres . Dat is je beste hoop, aangezien er veel John Doe's in het systeem kunnen zitten. Dus een unieke samengestelde index op volledige naam is nooit een goed idee.

Men kan een INSERT IGNORE afgeven die na een dubbele overtreding voortploetert alsof er niets gebeurt (dit wordt ten zeerste afgeraden en in uw geval niet mogelijk omdat uw unieke beperking op e-mail niet aanwezig is). Het grootste probleem hiermee is dat je neiging (lees:waarschijnlijk zal) alle controle over de stroom van wat er gebeurt verliest en met ongewenste gegevens achterblijft. Gebruik het dus niet, tenzij je een professional bent.

Men kan een INSERT ON DUPLICATE KEY UPDATE

een> (ook bekend als IODKU) die ook een unieke sleutel vereist (kan ook een unieke samenstelling zijn). Als zodanig zou er geen nieuwe rij plaatsvinden, maar een update van de rij. Er zou bijvoorbeeld een nieuwe rij met 4 kolommen kunnen worden ingevoegd, maar bij overtreding van de duplicatie kan een update worden uitgevoerd op slechts twee van de kolommen, zoals

uitgaande van hieronder een PK op een onzichtbare kolom id int , en een unieke sleutel op emailAddr

insert person(firstName,lastName,emailAddr) values 'Joe','Smith','[email protected]' 
on duplicate key update firstName='Joe',lastName='Smith'

Het is de unieke sleutel op emailAddr die ervoor zorgt dat dit werkt. Links met slechts 1 rij per emailAddr, ooit.

U kunt dus onbeperkt Joe Smiths hebben, maar slechts 1 rij per e-mailadres.

De aanmaaktabel voor de bovenstaande tabel kan er als volgt uitzien:

create table person
(  id int auto_increment primary key,
   firstName varchar(50) not null,
   lastName varchar(50) not null,
   emailAddr varchar(150) not null,
   unique key(emailAddr)  -- without this, IODKU will not work
);

U kunt ook ALTER TABLE-opdrachten geven om beperkingen toe te voegen nadat de tabel is gemaakt. Afhankelijk van de gegevens daarin, kan de oproep mislukken.

Mysql Invoegen op dubbele sleutelupdate , en Tabel wijzigen handleidingen.

Ik zeg het nog een keer, zonder de juiste schema-instelling zal IODKU niet werken en blijft u achter met ongewenste rijen. Wees er dus niet lui over. Schema instellen eerst succes toelaten (met unieke sleutels), dan ga verder met het gebruik van IODKU.



  1. MySql draagbare versie

  2. is er een mysql-functie om html-entiteiten te decoderen?

  3. MySQL GeoSpatial-gegevenstypen gebruiken in .NET

  4. Mysql join-query op drie tabellen met meerdere kolommen