Hvordan 'sette inn hvis ikke eksisterer' i MySQL?
Jeg begynte med å google, og fant denne artikkelen som snakker om mutex-tabeller.
Jeg har en tabell med ~ 14 millioner poster. Hvis jeg vil legge til flere data i samme format, er det en måte å sikre at posten jeg vil sette inn ikke allerede eksisterer uten å bruke et par spørringer (dvs. en spørring for å sjekke og en for å sette inn er resultatsettet tomt)?
Garanterer en "unik" begrensning på et felt at "innsetting" vil mislykkes hvis det allerede er der?
Det ser ut til at med bare en begrensning, når jeg utsteder innsatsen via php, kvekker skriptet.
778
3
bruk
INSERT IGNORE INTO table
.se
det finnes også
INSERT ... ON DUPLICATE KEY UPDATE
syntaks, du finner forklaringer på dev.mysql.com.Innlegg fra bogdan.org.ua i henhold til Google's webcache:
on duplicate key update, eller insert ignore kan være levedyktige løsninger med MySQL.
Eksempel på on duplicate key update-oppdatering basert på mysql.com.
Eksempel på insert ignore basert på mysql.com.
Eller:
Eller:
Enhver enkel begrensning bør gjøre jobben, hvis et unntak er akseptabelt. Eksempler:
Beklager at dette virker villedende enkelt. Jeg vet at det ser dårlig ut i forhold til lenken du deler med oss ;-(.
Men jeg gir likevel dette svaret, fordi det ser ut til å fylle behovet ditt. (Hvis ikke, kan det utløse at du oppdaterer kravene dine, noe som også vil være "en god ting" (TM)).
Redigert: Hvis en innsats vil bryte databasens unike begrensning, kastes et unntak på databasenivå, videresendt av driveren. Det vil sikkert stoppe skriptet ditt, med en feil. Det må være mulig i PHP å adressere den saken ...