„MySQL Insert“ ignoruoja pasikartojantį raktą

Mysql Insert Ignore Duplicate Key



Lentelėse ar rezultatų rinkiniuose dažnai yra prieštaringų duomenų. Taip pat daug laiko reikia ištaisyti, todėl dažnai reikia vengti pakartotinių įrašų. Būtina nustatyti pasikartojančius įrašus ir juos ištrinti iš bet kurios lentelės. Šiame skyriuje bus išsamiai paaiškinta, kaip išvengti duomenų pasikartojimo lentelėje ir kaip pašalinti esamus pasikartojančius įrašus. Šiame vadove jūs išmoksite naudoti sąlygą INSERT IGNORE, kad išvengtumėte klaidos.

Sintaksė:

Čia yra užklausos INSERT IGNORE sintaksė.







>>INSERT IGNORE INTO table_name(col1, col2, col3)VERTYBĖS(value_list),(value_list),(value_list);

INSERT IGNORE per Workbench:

Atidarykite „MySQL Workbench 8.0“ iš savo sistemos ir prijunkite ją prie duomenų bazės egzemplioriaus.





Komandų srityje turite sukurti lentelę Darbuotojas su keturiais stulpeliais, kur vienas iš jų turi būti nurodytas kaip UNIKALUS. Norėdami sukurti šią lentelę, išbandykite toliau pateiktą užklausą naršyklės užklausos srityje. Pasirinkite visą užklausą ir spustelėkite „flash“ ženklą, kad ją įvykdytumėte.





>>KURTI LENTELĘ Darbuotojas(ID int PIRMINIS RAKTAS NĖRA NULL, vardas varchar(penkiasdešimt)NE NULL, Amžius Varchar(penkiasdešimt), Atlyginimo varchar(penkiasdešimt), UNIKALUS(ID));

Sukūrę lentelės darbuotoją galite rasti sąraše esančioje lentelių parinktyje po duomenų bazės duomenimis.



Tinklelio rodinyje galite įvesti įrašus neįvesdami jokių užklausų. Taigi, atidarykite lentelės darbuotojo tinklelio vaizdą ir pridėkite jame keletą įrašų, kaip parodyta žemiau. Įvedėme visus unikalius įrašus be jokių dublikatų. Norėdami pritaikyti pakeitimus, spustelėkite mygtuką „Taikyti“.

Bus atidarytas naujas langas su atitinkamomis užklausomis, susijusiomis su aukščiau įvestais įrašais. Šį ekraną galima pavadinti peržiūros ekranu. Jei norite ką nors pakeisti, tai galite padaryti čia. Priešingu atveju paspauskite mygtuką Taikyti, kad atliktumėte užklausas.

Kaip matote, užklausa buvo sėkmingai įvykdyta, o įrašai išsaugomi duomenų bazėje ir jos lentelėje Darbuotojas. Būtume sukėlę klaidą, jei stulpelio ID pridėtume bet kokią pasikartojančią vertę. Bakstelėkite mygtuką Baigti.

Visa tai buvo apie tinklelio vaizdą. Dabar mes įrašysime įrašus per užklausos sritį. Tuo tarpu šį kartą įterpėme pasikartojančius įrašus, kad patikrintume išvestį. Taigi, mes išbandėme žemiau pateiktą INSERT užklausą, kurioje turime du verčių sąrašus. Abu verčių sąrašai turi tą pačią reikšmę stulpelyje „ID“. Pasirinkite užklausą ir paspauskite „flash“ ženklą, kad įvykdytumėte užklausą.

Užklausa neveiks tinkamai ir sukels klaidą dėl pasikartojančių komandų INSERT reikšmių, kaip parodyta paveikslėlyje.

Dabar pabandykite tą pačią aukščiau pateiktą užklausą su sąlyga INSERT IGNORE ir vykdykite ją, kaip pateikta.

Matote, kad išvesties srityje jis nesukelia klaidos, tačiau įspėja, kad komandoje yra pasikartojančių verčių.

Atnaujinkite lentelės Darbuotojas tinklelio vaizdą. Užklausa INSERT IGNORE pavyko perpus. Į lentelę jis įterpė pirmąjį reikšmių sąrašą, tačiau antrasis verčių sąrašas buvo ignoruojamas dėl pakartotinės vertės 13.

INSERT IGNORE per komandinės eilutės apvalkalą:

Norėdami suprasti šią koncepciją, savo sistemoje atidarykime „MySQL“ komandinės eilutės kliento apvalkalą. Paklausę įveskite „MySQL“ slaptažodį, kad pradėtumėte dirbti su juo.

Dabar atėjo laikas sukurti lentelę. Norėdami tai padaryti, išbandykite žemiau pateiktą komandą. Mes sukūrėme lentelę pavadinimu „ministras“, o vienoje iš jos stulpelių yra unikalus apribojimas. Akivaizdu, kad stulpelio ID priims tik unikalias, o ne pasikartojančias vertes.

>>KURTI LENTELĘ duomenys.ministruoti(Vidurinė INT PAGRINDINĖ PAGRINDINĖ UNIKALI NĖRA NULL, pavadinimas VARCHAR(Keturi, penki), Miestas VARCHAR(Keturi, penki));

Užklausa veikia tinkamai ir lentelė sukurta. Norėdami suprasti sąlygą INSERT IGNORE, pirmiausia turite pamatyti paprastą INSERT komandos veikimą. Jei naudojate komandą INSERT, norėdami į lentelę įterpti kelis informacijos duomenis, „MySQL“ sustabdo operaciją ir sukuria išimtį, jei apdorojimo metu įvyksta klaida. Todėl lentelėje nėra pridėtų eilučių. Įterpkime pirmą įrašą į lentelės ministrą naudodami žemiau pateiktą užklausą. Užklausa veiks sėkmingai, nes lentelė šiuo metu tuščia ir nėra įrašo, su kuriuo būtų galima atitikti.

Kadangi stulpelio ID yra UNIKALUS, kai bandysime toliau pateiktą komandinės eilutės apvalkalo instrukciją, tai sukels klaidą. Taip yra todėl, kad ankstesnėje užklausoje pridėjome 11 reikšmę ir dėl UNIQUE rakto neleidžia mums dar kartą pridėti pakartotinės vertės.

Taigi, patikrinę lentelę, matome, kad lentelėje yra tik 1 įrašas, pridėtas prie pirmosios INSERT užklausos.

>>PASIRINKTI*FROM data.minister;

Ir atvirkščiai, jei naudojate sąlygą INSERT IGNORE, klaidingos duomenų eilutės, sukeliančios klaidą, bus nepastebimos ir bus įvestos tik tikslios. Žemiau esančioje komandoje mes naudojome komandą INSERT IGNORE, kad į lentelę neįtrauktume pakartotinių reikšmių ir nepastebėtume klaidos. Kaip matote, pirmojo reikšmių sąrašo vertė yra 11, kaip ir ankstesnėje užklausoje. Nors antrasis verčių sąrašas yra unikalus, jis parodys 1 įrašą, įterptą į lentelę, o tai yra antrasis verčių sąrašas. „MySQL“ taip pat nurodo, kad įterptas tik 1 įrašas, o pranešime sugeneruojamas 1 įspėjimas. Tada galite manyti, kad jei mes naudojame sąlygą INSERT IGNORE, „MySQL“ pateikia įspėjimą.

Kaip matote iš toliau pateiktos išvesties, šioje lentelėje turime tik du įrašus - pirmąjį aukščiau pateiktoje užklausoje pateiktų verčių sąrašą, kuris nepastebimas.

>>PASIRINKTI*FROM data.minister;

Išvada:

Mes padarėme visus būtinus INSERT IGNORE pavyzdžius su pasikartojančiomis vertėmis per „MySQL Workbench“ ir „MySQL“ komandinės eilutės kliento apvalkalą.