mysql delete statement delete command syntax
Denne opplæringen forklarer hvordan du bruker MySQL DELETE-setningen til å slette data fra en tabell eller slette hele tabellen og forskjellen mellom avkort og slett kommandoer:
I MySQL er DELETE et Data Manipulation Language eller DML, som vi vet.
Som navnet selv antyder, brukes kommandoen til å slette rader fra tabellen. Ved å bruke denne kommandoen kan vi slette en eller flere uønskede rader i en enkelt transaksjon. Det er flere måter å slette poster fra en tabell ved hjelp av SLETT-kommandoen.
forskjell mellom testscenario og testtilfelle
I denne opplæringen vil vi diskutere alle disse i detalj sammen med enkle eksempler.
Hva du vil lære:
- MySQL DELETE-kommando
- Forskjellen mellom TRUNCATE og DELETE uttalelser
- Referanseintegritet og dens innvirkning på SLETTING
- Ofte stilte spørsmål og svar
- Konklusjon
MySQL DELETE-kommando
Det er en viktig faktor å huske på før vi går videre. Enhver rad eller flere rader som vi sletter ved hjelp av SLETT-kommandoen, kan aldri hentes.
For å unngå scenarier der en rad slettes ved en feiltakelse, anbefales det å ta en sikkerhetskopi av tabellen før du utfører DELETE-setningen. Vi kan senere bruke denne sikkerhetskopien til å gjenopprette tabellen i tilfelle feil.
Merk: Vi bruker MySQL versjon 8.0. Du kan laste den ned fra her .
MySQL Slett syntaks:
DELETE (LOW_PRIORITY) (QUICK) (IGNORE) FROM tablename(.*) (, tablename(.*)) (WHERE condition) (ORDER BY) (LIMIT row_count) ;
Syntaks Forklaring:
- Syntaksen starter med nøkkelordet “DELETE FROM”, og informerer derved MySQL-serveren om typen aktivitet som skal utføres. Dette er et obligatorisk nøkkelord og kan ikke utelates.
- Deretter kommer navnet på tabellen der DELETE-operasjonen må utføres. Dette er også obligatorisk og kan ikke utelates. Vi kan nevne ett eller flere bordnavn her.
- Deretter kan vi nevne alle forhold som styrer kvalifiseringen til radene som skal slettes. Dette er en valgfri klausul. Nøkkelordet her er HVOR.
- Etterfulgt av WHERE-setningen er ORDER BY-setningen, som tvinger radene som skal slettes i en bestemt rekkefølge, enten stigende eller synkende, på en kolonne (r). Dette er en valgfri klausul.
- LIMIT klausul følger ORDER BY klausulen. Det setter en grense for antall rader som DELETE-setningen kan fjerne fra tabellen.
Modifikatorer i DELETE Statement
# 1) LOW_PRIORITY:
Denne modifisereren informerer MySQL Engine om å utsette utførelsen av DELETE-setningen til det tidspunktet hvor det ikke er noen forbindelser som leses fra tabellen som vi prøver å SLETTE fra.
Dette hjelper med å oppnå konsistens på tvers av alle de andre operasjonene som skal utføres på bordet. Dette hjelper også til å unngå problemer med låsing av bord.
# 2) RASK:
Når vi sletter en rad, blir den tilsvarende indeksen også slettet. Å gjenvinne plassen på tidspunktet for utførelsen av DELETE-setningen tar prosessorens tid. Hvis vi bruker QUICK-nøkkelordet, forblir det tilsvarende indeksområdet ubenyttet og kan brukes når nye poster som passer indeksområdet som ble slettet tidligere settes inn.
For eksempel, vurdere en ansattstabell der ansattes ID er indeksen. Hver gang en ansatt forlater en organisasjon, må vi slette den tilsvarende posten. Hvis vi bruker QUICK-setningen, vil den tilsvarende indeksplassen forbli ubenyttet.
Når en ny ansatt blir med, vil han / hun få et nytt ansatt nummer og ikke det samme nummeret til personen som gikk. I slike eksempler er det ikke tilrådelig å bruke QUICK.
MYSQL DELETE Eksempel
Nedenfor er en eksempeltabell opprettet i MYSQL.
Skjema navn: Stillehavet
Tabellnavn: ansatte
Kolonnenavn:
empNum; Har heltallverdier for ansattens nummer.
etternavn: Har varchar-verdier for etternavn på den ansatte.
fornavn: Har varchar-verdier for den ansattes fornavn.
e-post: Har varchar-verdier for e-post-ID-en til den ansatte.
deptNum; Har varchar for avdelings-ID som en ansatt tilhører.
lønn: Har desimalverdier av lønnen til hver ansatt.
startdato: Har datoverdiene for den ansattes tilknytningsdato.
Skjema navn: Stillehavet
Tabellnavn: ansatte_historie
Kolonnenavn:
empNum; Har heltallverdiene for ansattens nummer.
etternavn: Har varchar-verdier for etternavn på den ansatte.
fornavn: Har varchar-verdier for den ansattes fornavn.
e-post: Har varchar-verdier for e-post-ID-en til den ansatte.
deptNum; Har varchar for avdelings-ID som en ansatt tilhører.
lønn: Har desimalverdier av lønnen til hver ansatt.
startdato: Har datoverdier for den ansattes tilknytningsdato.
Skjema navn: Stillehavet
Tabellnavn: avdelinger
Kolonnenavn:
deptNum; Har varchar for avdelings-ID i en organisasjon.
by: Har navnet på byen der avdelingene jobber.
land: Har navnet på landet som tilsvarer byen.
bonus: Har den prosentvise verdien av bonusen.
MySQL Slett enkelt rad
Den første og enkleste måten å slette poster fra tabellen ved å slette postene en etter en, ved å bruke en veldig sterk WHERE-klausul som sikrer at bare en passende post slettes. Dette kan brukes videre til å slette et sett med lignende rader fra tabellen.
La oss gå gjennom slettingserklæringen og dens gjennomføring i detalj.
Her vil vi prøve å fjerne en ansatt ved navn ‘Chris Nolan’ med ansatt nummer som 1013.
Som avbildet i bildet ovenfor, er DELETE-setningen fullført og slettet en rad fra den ansattes bord.
De produksjon utsagnet nedenfor viser tidspunktet da utsagnet ble utført, MySQL-setningen som ble utført, og antall rader som ble berørt.
Vær veldig sikker på WHERE-klausulen her. Hvis WHERE-klausulen er feil, eller hvis du går glipp av å ha en WHERE-klausul, kan det føre til tap av data. For å unngå slike situasjoner, i produksjon, er det en praksis med periodiske sikkerhetskopier eller lossing av data.
For å bekrefte utdataene fra denne DELETE-setningen, la oss utføre SELECT-setningen på denne tabellen med empNum som 1013.
Resultatene viser NULL-verdien for alle kolonnene, noe som betyr at det ikke finnes noen post for et slikt empNum. Utdataene fra spørringen nedenfor viser at 0 rad (er) er returnert, noe som betyr at posten er slettet ved å utføre DELETE-setningen ovenfor.
Spørsmål:
DELETE FROM employees WHERE empNum = 1013 ;
Tabell øyeblikksbilde etter:
empNum | etternavn | fornavn | e-post | avd | Lønn |
---|---|---|---|---|---|
7 | Dette er relativt tregere enn TRUNCATE, sammenlignet med å slette hele data fra tabellen. | Dette er relativt raskere enn SLETT, sammenlignet med å slette hele data fra tabellen. | |||
NULL | NULL | NULL | NULL | NULL | NULL |
MYSQL DELETE ved å bruke ORDER BY AND LIMIT klausul
ORDER BY og LIMIT er to ledd som vi har diskutert ovenfor. Førstnevnte hjelper til med å bestemme i hvilken rekkefølge postene skal renses, enten slette poster med empNum i stigende retning eller slette poster med lønn i synkende rekkefølge. Sistnevnte hjelper til med å begrense antall poster som denne transaksjonen kan slette.
For eksempel, hvis vi bare vil slette to ansatte som tilhører avd. nummer 4, som er høye lønnsmottakere. Deretter er det tre deler til dette spørsmålet.
- Først, vi må rense ansatte fra avd. nummer 4. Dette vil bli håndtert av en WHERE-klausul.
- Neste, vi trenger å rense ansatte som tjener høye lønninger. Dette vil bli håndtert av ORDER BY-klausulen i lønnskolonnen i synkende rekkefølge.
- Til slutt, vi trenger å rense bare to ansatte. Dette vil bli håndtert av LIMIT-klausulen.
La oss ta en titt på SLETT-spørringen og se resultatene. Før vi gjør det, la oss først identifisere hva som er de nøyaktige postene vi vil slette. Vi vil bruke de ovennevnte forholdene med en SELECT-setning for å få postene vi vil slette og senere utføre den samme spørringen for å verifisere om disse postene er slettet eller ikke.
I ovennevnte SELECT-spørring har vi oppfylt alle de tre betingelsene vi snakket ovenfor ved å bruke WHERE, ORDER BY og LIMIT-setningen. Spørringen ga oss to poster, en med empNum 1010 og en annen med 1007. Nå skal vi utføre DELETE-spørringen for å sikre at disse to postene blir slettet.
Som avbildet på bildet ovenfor har DELETE-setningen blitt utført og slettet to rader fra den ansattes bord. De produksjon utsagnet nedenfor viser tidspunktet da utsagnet ble utført, MySQL-setningen som ble utført, og antall rader som ble berørt.
For å bekrefte utdataene fra denne DELETE-setningen, la oss utføre SELECT for empNum 1010 og 1007. Vi kan ikke bruke den samme VELG-spørringen som brukt ovenfor som det som viser de andre ansatte under avd. 4.
hva er den beste musikknedlasteren for pc
Resultatene viser NULL-verdien for alle kolonnene, noe som betyr at det ikke finnes noen post for slike ansattnumre. De Produksjon i spørringen nedenfor viser at 0 (r) er returnert, noe som betyr at posten er slettet ved å utføre DELETE-setningen ovenfor.
Spørsmål:
DELETE FROM employees WHERE deptNum = 4 ORDER BY salary DESC LIMIT 2 ;
Tabell øyeblikksbilde etter:
empNum | etternavn | fornavn | e-post | avd | Lønn |
---|---|---|---|---|---|
NULL | NULL | NULL | NULL | NULL | NULL |
MYSQL-SLETTING Bruk av Select-klausul
Deretter vil vi gå gjennom bruken av SELECT-setningen mens vi sletter poster fra en tabell.
Tenk på følgende scenario:
Vi har to sett med bord: ansatte og avdelinger. deptNum er som en primærnøkkel i avdelingens tabell og utenlandsk nøkkel i arbeidstakerens tabell. Dette betyr at hvis en ansatt får tildelt en avdeling, må den være fra en av avdelingene i avdelingens tabell.
Nå må vi slette disse postene fra avdelingens bord der ingen ansatte har blitt tildelt så langt. Vi kan gjøre dette ved å ha en SELECT-ledd i underspørringen til et DELETE-spørring.
La oss først identifisere postene vi vil slette:
Ovennevnte SELECT-spørring har et underspørring.
Søket fungerer som følger:
Spørringen henter alle poster fra avdelingens tabell der deptNum ikke finnes i den ansattes tabell. Sammenføyningen utføres i delspørringen på deptNum av de to tabellene.
La oss nå kjøre DELETE-spørringen og se om vi kan slette disse to postene fra avdelingens tabell ettersom ingen ansatte er tilordnet disse avdelingene.
Som avbildet i bildet ovenfor har slettingsuttalelsen slettet 2 rader fra avdelingstabellene som ingen ansatte har fått tildelt.
For å bekrefte utdataene fra denne DELETE-setningen, la oss utføre SELECT på bordet og se hva vi har i utdataene.
Utgangsmeldingen fra bekreftelsesspørringen ovenfor sier “0 rad (er) returnert”. Dette innebærer at radene med avd. 6 og 7 blir slettet. Utgangen viser heller ingen poster i stedet for å vise NULL-verdier ettersom postene er slettet.
Spørsmål:
DELETE FROM departments WHERE NOT EXISTS (SELECT deptNum FROM employees WHERE departments.deptNum = employees.deptNum ) ;
MySQL SLETT hele data fra tabellen
Deretter vil vi se på scenariet der vi må slette alle radene eller postene fra en tabell.
I produksjonssituasjonen vil du kanskje aldri støte på en slik situasjon. Men denne typen ting ville være nødvendig i utviklingsområdet der du må teste koden din med flere forskjellige scenarier, og det kan være lurt å lage et nytt sett med testdata ved å slette postene som finnes i tabellen.
La oss først se på dataene vi har tenkt å slette. Vi vil prøve å slette data fra tabellen ansatte_historie.
Nedenfor er de eksisterende dataene i tabellen gitt.
Her har vi 18 rader i tabellen ansatte_historie. La oss nå fortsette og slette alle disse i en enkelt transaksjon. Søket er nesten likt det vi diskuterte i første del. Den eneste endringen er at vi trenger å fjerne WHERE-setningen fra spørringen, slik at det ikke er noen begrensning på antall rader vi vil slette.
Som avbildet i bildet ovenfor, er slettingsuttalelsen utført og slettet alle de 18 radene fra tabellen ansatte_historie. Utdatauttalelsen nedenfor viser tidspunktet da utsagnet ble utført, MySQL-setningen som ble utført, og antall rader som ble berørt.
For å bekrefte utdataene fra denne DELETE-setningen, la oss utføre SELECT på bordet og se hva vi har i utdataene.
Resultatene viser NULL-verdien for alle kolonnene, noe som betyr at det ikke finnes noen post for slike ansattnumre. Utdataene fra spørringen nedenfor viser at 0 (r) er returnert, noe som betyr at alle postene er slettet ved å utføre DELETE-setningen ovenfor.
Spørsmål:
DELETE FROM employees_history ;
Tabell øyeblikksbilde etter:
empNum | etternavn | fornavn | e-post | avd | Lønn |
---|---|---|---|---|---|
NULL | NULL | NULL | NULL | NULL | NULL |
MySQL DELETE Hele tabellen
Nå skal vi se på scenariet der vi må slette selve tabellen. I SQL-termer kaller vi det DROP-tabellen. Det spiller ingen rolle om tabellen har noen data eller ikke. Det vil bare slippe tabellen sammen med dataene hvis noen.
I avsnittet ovenfor slettet vi data fra tabellen ansatte_historie. I denne delen vil vi slippe tabellen ansatte_historie selv.
Følgende er kommandoen sammen med utdataene:
Som vist i bildet ovenfor, har DROP-setningen blitt utført med suksess og slettet tabellen ansatte_historie fra systemkatalogen til MySQL-databasen.
Hvis du tar en titt på meldingen, vil den vise “0 rad (er) berørt”. Dette er fordi vi hadde slettet alle de 18 radene i forrige seksjon. Hvis denne tabellen hadde noen rader, ville disse antall rader bli påvirket, noe som betyr at de er slettet.
For å bekrefte utdataene fra denne DROP-setningen, la oss utføre SELECT på bordet og se hva vi har i utdataene.
Utgangsmeldingen fra bekreftelsesspørringen ovenfor sier at tabellen ikke eksisterer. Dette validerer utførelsen av ovennevnte DROP-uttalelse for å slippe tabellen.
Spørsmål:
DROP TABLE employees_history ;
MySQL trunker kommando
Vi har allerede diskutert å slette alle poster fra tabellen ved hjelp av SLETT-kommandoen. Det samme kan oppnås ved å bruke TRUNCATE-setningen også.
For dette eksemplet, la oss lage tabellen ansatte_historie og fylle den ut med data på nytt. T han følger er de to spørsmålene som er utført for å lage tabellen og fylle ut den på nytt:
Spørsmål:
CREATE TABLE employees_history LIKE employees ; INSERT INTO employees_history (SELECT * FROM employees) ;
Slik ser tabellen ansatte_historie ut nå med data.
Deretter fjerner vi alle postene fra denne tabellen ved hjelp av TRUNCATE-setningen.
Som vist på bildet, blir spørringen utført. Hvis du tar en nærmere titt på “Melding” -delen, vil du oppdage at det står “0 rad (er) berørt”. Vi vet imidlertid at denne tabellen har 15 rader. Så hvorfor kommer viser null?
informatica administrator intervju spørsmål og svar
Årsaken: Avkortet uttalelse bryr seg ikke om å telle hvor mange rader som blir påvirket av utførelsen. Det tømmer rett og slett bordet. Dette er en av de vesentlige forskjellene mellom DELETE og TRUNCATE-utsagn.
La oss verifisere kjøringen av TRUNCATE-setningen ved å utføre en SELECT-spørring på tabellen ansatte_historie.
Som vist på bildet ovenfor, har spørringen ikke returnert noen rader, og også alle kolonnene viser NULL-verdier, noe som betyr at TRUNCATE-setningen som vi utførte tidligere har slettet alle poster fra tabellen.
Spørsmål:
TRUNCATE TABLE employees_history ;
Forskjellen mellom TRUNCATE og DELETE uttalelser
Mr. Nei | SLETT | TRUNKER |
---|---|---|
en | Det er et DML (Data Manipulation Language). | Det er et DDL (Data Definition Language). |
to | Enhver EFTER SLETT-utløser på bordet blir aktivert når vi bruker SLETT-kommandoen. | Ingen ETTER SLETT utløser på bordet blir aktivert når vi bruker TRUNCATE-kommandoen. |
3 | En post kan slettes selv om det er begrensninger for utenlandske nøkler. | Postene fra tabellen kan ikke avkortes hvis det er begrensninger for utenlandske nøkler. |
4 | Initialisering av tabell vil ikke skje. | Tabellen blir reintialisert. |
5 | WHERE klausul kan brukes. | WHERE klausul kan ikke brukes. |
6 | Dette sletter en post om gangen og holder oversikt over totalt antall slettede poster i loggene. | Den renser alle poster på en gang og holder ikke oversikt over antall poster som er slettet. |
Referanseintegritet og dens innvirkning på SLETTING
La oss se før vi blir hva er referanseintegritet eller RI eller utenlandske nøkkelbegrensninger?
Utenlandske nøkkelbegrensninger handler om å etablere et forhold eller en kobling mellom foreldrene og barnetabellen. Dette hjelper med å kryssreferanse dataene over tabellene som er knyttet til hverandre. Én foreldretabell kan ha flere underordnede bord og omvendt.
For eksempel, de to tabellene vi har diskutert så langt, dvs. ansatte og avdelinger, er knyttet til hverandre ved hjelp av en Foreign Key-begrensning. Denne begrensningen opprettes ved å lage en kolonne, vanligvis den primære nøkkelen, som nøkkelkolonnen som knytter to tabeller.
DeptNum-kolonnen i avdelingens tabell har blitt lenket til deptNum-kolonnen i den ansattes tabell. I dette tilfellet er avdelinger overordnet bord og ansatte er underordnet bord.
Men hvordan påvirker dette DELETE-uttalelsene?
I MySQL eller i en hvilken som helst database er det visse scenarier som skal håndteres mens du sletter poster fra foreldre- eller underordnede tabeller.
Det er flere referansealternativer som vi kan diskutere:
# 1) PÅ SLETTE CASCADE: Regelen sier at vi ikke kan fjerne en rad fra overordnet tabell hvis den har noen referanser eller har en tilsvarende rad i noen av underordnede tabeller. Men hvis en overordnet tabell har ganske mange underordnede tabeller, er det en kjedelig oppgave å først fjerne postene fra hvert underordnet bord og deretter fra overordnet bordet.
For dette er det en løsning som heter ON DELETE CASCADE. Dette er en klausul som legges til CREATE-setningen i hvert av barnetabellene. Så når vi sier slett en rad fra foreldretabellen, vil MySQL-motoren først identifisere referansene til den raden i underordnede tabeller og fjerne disse postene, og til slutt vil den slette posten fra foreldretabellen.
# 2) INGEN HANDLING: Dette er et standardalternativ. Hvis kjøringen av en DELETE-setning forsøker å slette en post som har referanser i noen av underordnede tabeller, vil med dette alternativet utførelsen av uttalelsen stoppe og MySQL-transaksjon vil bli rullet tilbake til det siste kommisjonspunktet.
# 3) BEGRENSNING: Funksjonen til RESTRICT og NO ACTION er den samme. Det vil stoppe kjøringen og utstede en tilbakeføring.
# 4) SET NULL: Hvis kjøringen av en slettsetning prøver å slette en post som har referanser i en hvilken som helst av underordnede tabeller, vil dette alternativet oppdatere kolonneverdien i alle underordnede tabeller som NULL, og når den er ferdig, vil den slette posten fra den overordnede bord.
# 5) STILL STANDARD: Hvis kjøringen av en DELETE-setning prøver å slette en post som har referanser i noen av underordnede tabeller, vil dette alternativet oppdatere kolonneverdiene til standardverdien som definert i CREATE-setningen i tabellen.
Ofte stilte spørsmål og svar
Q # 1) Hvordan slette data fra tabellen i MySQL?
Svar: Syntaksen for slettkommandoen for å slette bare en valgt rad med data er gitt nedenfor.
DELETE FROM table_name WHERE condition;
Spørsmål 2) Hvordan sletter du alle dataene fra tabellen i MySQL?
Svar: Syntaksen for DELETE-kommandoen for å slette alle radene fra tabellen er:
DELETE * FROM table_name;
Sp # 3) Hvordan sletter du tabellen fra databasen i MySQL?
Svar: Slippkommandoen kan brukes til å slette tabellen fra databasen. Brukeren kan erstatte tabellnavnet med tabellen som må slettes.
DROP TABLE table_name;
Sp # 4) Hvordan sletter jeg databasen i MySQL?
Svar: Slippkommandoen kan brukes til å slette databasen.
DROP Database db_name;
Brukere kan erstatte db_name med databasenavnet som må slettes.
Q # 5) Hva er PÅ SLETT CASCADE i MySQL?
Svar: Når foreldreposten blir slettet, oppretter PÅ SLETT KASKAD en matchende underordnet post som skal slettes. Dermed blir effekten av sletting kaskadert fra foreldrene til barnet. Dette kan være nyttig når du utfører sletting av flere tabeller.
Sp # 6) Hvorfor betraktes TRUNCATE som et DDL-utsagn?
Svar: TRUNCATE-setningen faller faktisk og oppretter tabellen på nytt sammen med metadataene til tabellen. Dermed er det en DDL-uttalelse.
Q # 7) Kan TRUNCATE rulles tilbake?
Svar: Nei, TRUNCATE er en automatisk forpliktelse hvis den utføres frittstående. Dette betyr at den ikke kan rulles tilbake ettersom også utførelsen utføres sammen med den. Men hvis det er en del av en transaksjon, kan den rulles tilbake ved hjelp av SQL-loggfiler.
Q # 8) Kan SLETTE uttalelser rulles tilbake?
Svar: Ja, DELETE-utsagn kan rulles tilbake. Bare kjør ROLLBACK-kommandoen før du utfører COMMIT.
Q # 9) Kan en kolonne slettes ved å SLETTE-kommandoen?
Svar: Kolonnetillegg eller sletting er DDL-kommandoer. En ALTER-setning skal brukes til å DROPE en kolonne fra tabellen.
Konklusjon
I denne veiledningen har vi lært forskjellige måter å utføre DELETE-setninger i MySQL.
I et nøtteskall så vi:
- MySQL Slett enkelt rad
- MySQL Slett ved hjelp av ORDER BY And Limit Clause
- MySQL Slett ved hjelp av Velg klausul
- MySQL Slett hele tabellen
- MySQL avkortes
- Forskjellen mellom utsagnene TRUNCATE og DELETE
- Referanseintegritet og dens innvirkning på SLETTING
Vi kan bruke en av de ovennevnte, basert på kravet.
Glad lesning !!
Anbefalt lesing
- Unix Cat Command Syntax, Alternativer med eksempler
- Unix sorteringskommando med syntaks, alternativer og eksempler
- MySQL Sett inn i tabellen - Sett inn uttalelsessyntaks og eksempler
- MongoDB oppdater og slett dokument med eksempler
- Klipp kommandoen i Unix med eksempler
- Ny / slett operatører i C ++ med eksempler
- MySQL Update Statement Tutorial - Update Query Syntax & Eksempler
- Ls Command i Unix med eksempler