MySQL sakinys REPLACE yra SQL standarto plėtinys. Šis teiginys veikia taip pat, kaip INSERT teiginys, išskyrus tai, kad jei sena eilutė sutampa su naujuoju PIRMINIO RAKTO arba UNIKALIOJO indekso lentelės įrašu, ši komanda ištrynė seną eilutę prieš įtraukiant naują eilutę.
Šis teiginys reikalingas, kai norime atnaujinti esamus įrašus į lentelę, kad jie būtų atnaujinti. Jei šiam tikslui naudosime standartinę įterpimo užklausą, ji duos PIRMINIO RAKTO įrašo dublikatą arba UNIQUE rakto klaidą. Šiuo atveju užduočiai atlikti naudosime teiginį REPLACE. Komanda REPLACE reikalauja vieno iš dviejų galima vyksta veiksmai:
osi modelio sluoksniai
- Jei su esama duomenų eilute nerandama atitinkanti reikšmė, tada atliekamas standartinis INSERT sakinys.
- Jei rastas pasikartojantis įrašas, pakeitimo komanda ištrins esamą eilutę ir pridės naują įrašą į lentelę.
Teiginyje REPLACE naujinimas atliktas dviem veiksmais. Pirma, jis ištrins esamą įrašą, o tada įtrauks naujai atnaujintą įrašą, panašiai kaip standartinėje INSERT komandoje. Taigi galime pasakyti, kad REPLACE sakinys atlieka dvi standartines funkcijas, IŠTRINTI ir ĮDĖTI .
Sintaksė
Toliau pateikiama sintaksė PAKEISTI pareiškimas MySQL :
REPLACE [INTO] table_name(column_list) VALUES(value_list);
MySQL REPLACE pavyzdys
Supraskime REPLACE sakinio veikimą MySQL naudodami pavyzdį. Pirmiausia sukursime lentelę pavadinimu 'asmuo' naudojant šį teiginį:
nepakeičiamas sąrašas
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 );
Tada turime užpildyti įrašą į lentelę naudodami ĮDĖTI pareiškimas, kaip nurodyta toliau:
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');
Vykdyti PASIRINKTI pareiškimas, skirtas patikrinti įrašus, kurie gali būti rodomi toliau pateiktoje išvestyje:
Patikrinę duomenis į lentelę, bet kurią seną eilutę galime pakeisti nauja eilute naudodami REPLACE teiginį. Vykdykite toliau pateiktą teiginį, kuris atnaujina miestas asmens, kurio ID yra 4 .
REPLACE INTO Person (id, city) VALUES(4,'Amsterdam');
Sėkmingai įvykdžius aukščiau pateiktą teiginį, norint patikrinti pakeitimą, reikia dar kartą užklausti lentelės Asmuo duomenis.
Vertė vardas ir paštu stulpeliai yra NULL dabar. Taip yra todėl, kad REPLACE sakinys veikia taip:
- Šis teiginys pirmiausia bando įterpti naują eilutę į lentelę Asmuo. Tačiau naujos eilutės įterpimas nepavyko, nes id = 4 lentelėje jau yra.
- Taigi šis teiginys pirmiausia ištrinkite eilutę, kurios id = 4, o tada įterpkite naują eilutę su tuo pačiu ID ir miestu kaip Amsterdamas. Kadangi nenurodėme vardo ir el. pašto stulpelio reikšmės, ji buvo nustatyta į NULL.
MySQL REPLACE sakinys, skirtas atnaujinti eilutę
Norėdami atnaujinti eilutės duomenis į lentelę, galime naudoti šį REPLACE teiginį:
REPLACE INTO table SET column1 = value1, column2 = value2;
Aukščiau pateikta sintaksė yra panaši į UPDATE pareiškimas išskyrus raktinį žodį REPLACE. Pažymėtina, kad su šiuo teiginiu negalime naudoti sąlygos WHERE.
Vykdykite toliau pateiktą pavyzdį, kuriame naudojamas teiginys REPLACE, kad atnaujintumėte nurodyto asmens miestą Maikas iš Kalifornija į Birmingamas .
REPLACE INTO Person SET ID = 1, Name = 'Mike', City = 'Birmingham';
Patikrinus lentelę, matome tokią išvestį:
java stygų apdaila
Jei nenurodėme stulpelio vertės SET sąlyga , ši komanda veikia kaip UPDATE pareiškimas , o tai reiškia, kad sakinyje REPLACE bus naudojama numatytoji to stulpelio reikšmė.
MySQL REPLACE, kad įterptumėte duomenis iš SELECT sakinio.
Galime naudoti šį REPLACE INTO teiginį, norėdami įterpti duomenis į lentelę su duomenimis, gaunamais iš užklausos.
REPLACE INTO table1(column_list) SELECT column_list FROM table2 WHERE condition;
Reikia pažymėti, kad aukščiau pateikta REPLACE užklausa yra panaši į INSERT INTO SELECT pareiškimas. Vykdykite toliau pateiktą pavyzdį, kuris naudoja teiginį REPLACE INTO, kad nukopijuotumėte eilutę toje pačioje lentelėje.
REPLACE INTO Person(Name, City) SELECT Name, City FROM Person WHERE id = 2;
Patikrinę lentelę, gausime tokią išvestį. Šiame išvestyje matome, kad tos pačios lentelės eilutės kopija buvo sėkmingai pridėta.