REPLACE-setningen i MySQL er en utvidelse av SQL-standarden. Denne setningen fungerer på samme måte som INSERT-setningen, bortsett fra at hvis en gammel rad samsvarer med den nye posten i tabellen for en PRIMARY KEY eller en UNIQUE indeks, slettet denne kommandoen den gamle raden før den nye raden ble lagt til.
Denne uttalelsen er nødvendig når vi ønsker å oppdatere de eksisterende postene i tabellen for å holde dem oppdatert. Hvis vi bruker standard innsettingsspørring til dette formålet, vil det gi en Duplikatoppføring for PRIMÆRKØKKEL eller en UNIK nøkkelfeil. I dette tilfellet vil vi bruke REPLACE-setningen til å utføre oppgaven vår. REPLACE-kommandoen krever en av de to mulig handlinger finner sted:
- Hvis ingen samsvarende verdi blir funnet med den eksisterende dataraden, utføres en standard INSERT-setning.
- Hvis duplikatposten blir funnet, vil erstatte-kommandoen slette den eksisterende raden og deretter legge til den nye posten i tabellen.
I REPLACE-setningen ble oppdateringen utført i to trinn. Først vil den slette den eksisterende posten, og deretter legges den nylig oppdaterte posten til, på samme måte som en standard INSERT-kommando. Dermed kan vi si at REPLACE-setningen utfører to standardfunksjoner, SLETT og SETT INN .
Syntaks
Følgende er syntaksen til ERSTATTE uttalelse i MySQL :
REPLACE [INTO] table_name(column_list) VALUES(value_list);
MySQL REPLACE Eksempel
La oss forstå hvordan REPLACE-setningen fungerer i MySQL ved hjelp av et eksempel. Først skal vi lage en tabell med navnet 'Person' ved å bruke følgende utsagn:
CREATE TABLE Person ( ID int AUTO_INCREMENT PRIMARY KEY, Name varchar(45) DEFAULT NULL, Email varchar(45) DEFAULT NULL UNIQUE, City varchar(25) DEFAULT NULL );
Deretter må vi fylle posten inn i tabellen ved å bruke SETT INN uttalelse som nedenfor:
INSERT INTO Person(ID, Name, Email, City) VALUES (1,'Mike', '[email protected]', 'California'), (2, 'Alexandar', '[email protected]', 'New York'), (3, 'Adam', '[email protected]', 'Los Angeles'), (4, 'Peter', '[email protected]', 'Alaska');
Utfør PLUKKE UT uttalelse for å bekrefte postene som kan vises i utdataene nedenfor:
Etter å ha verifisert dataene i en tabell, kan vi erstatte en hvilken som helst gammel rad med den nye raden ved å bruke REPLACE-setningen. Utfør setningen nedenfor som oppdaterer byen til en person hvis ID er 4 .
REPLACE INTO Person (id, city) VALUES(4,'Amsterdam');
Etter vellykket utførelse av setningen ovenfor, er det nødvendig å spørre dataene til tabellen Person på nytt for å bekrefte erstatningen.
Verdien i Navn og e-post kolonner er NULL nå. Det er fordi REPLACE-setningen fungerer som følger:
- Denne setningen prøver først å sette inn en ny rad i Person-tabellen. Men innsettingen av en ny rad mislyktes fordi id = 4 allerede eksisterer i tabellen.
- Så denne setningen sletter først raden hvis id = 4 og sett inn en ny rad med samme id og by som Amsterdam. Siden vi ikke har spesifisert verdien for navn og e-postkolonnen, ble den satt til NULL.
MySQL REPLACE-setning for å oppdatere en rad
Vi kan bruke følgende REPLACE-setning for å oppdatere en raddata til en tabell:
REPLACE INTO table SET column1 = value1, column2 = value2;
Syntaksen ovenfor ligner på OPPDATERING erklæring bortsett fra ERSTAT-nøkkelordet. Det er å merke seg at vi ikke kan bruke WHERE-klausulen med denne uttalelsen.
Utfør eksemplet nedenfor som bruker REPLACE-setningen til å oppdatere byen til personen som er navngitt Mike fra California til Birmingham .
REPLACE INTO Person SET ID = 1, Name = 'Mike', City = 'Birmingham';
Etter verifisering av tabellen kan vi se følgende utgang:
maskinskrift foreach
Hvis vi ikke har spesifisert kolonnens verdi i SET-klausul , fungerer denne kommandoen som OPPDATERING erklæring , som betyr at REPLACE-setningen vil bruke standardverdien for den kolonnen.
MySQL REPLACE for å sette inn data fra SELECT-setningen.
Vi kan bruke følgende REPLACE INTO-setning for å sette inn data i en tabell med dataene som returneres fra en spørring.
REPLACE INTO table1(column_list) SELECT column_list FROM table2 WHERE condition;
Det er å merke seg at ovennevnte REPLACE-spørsmål ligner på INSERT I SELECT uttalelse. Utfør eksemplet nedenfor som bruker REPLACE INTO-setningen til å kopiere en rad i samme tabell.
REPLACE INTO Person(Name, City) SELECT Name, City FROM Person WHERE id = 2;
Etter verifisering av tabellen vil vi få følgende utgang. I denne utgangen kan vi se at kopien av en rad i samme tabell er lagt til.