mysql delete statement delete command syntax
Denne vejledning forklarer, hvordan du bruger MySQL DELETE-erklæring til at slette data fra en tabel eller slette hele tabellen og forskellen mellem afkorte og slette kommandoer:
I MySQL er DELETE et Data Manipulation Language eller DML, som vi ved.
Som navnet selv antyder, bruges kommandoen til at slette rækker fra tabellen. Ved hjælp af denne kommando kan vi slette en eller flere uønskede rækker i en enkelt transaktion. Der er flere måder at slette poster fra en tabel ved hjælp af SLET-kommandoen.
bedste annonceblokerende udvidelse til krom
I denne vejledning vil vi diskutere alle disse detaljeret sammen med enkle eksempler.
Hvad du lærer:
- MySQL SLET kommando
- Forskellen mellem TRUNCATE og SLET udsagn
- Henvisningsintegritet og dens indvirkning på SLET
- Ofte stillede spørgsmål og svar
- Konklusion
MySQL SLET kommando
Der er en vigtig faktor at huske på, før vi går videre. Enhver række eller flere rækker, som vi sletter ved hjælp af SLET-kommandoen, kan aldrig hentes.
For at undgå scenarier, hvor en række slettes ved en fejltagelse, er det tilrådeligt at tage en sikkerhedskopi af tabellen, før du udfører DELETE-sætningen. Vi kan senere bruge denne sikkerhedskopi til at gendanne tabellen i tilfælde af fejl.
Bemærk: Vi bruger MySQL version 8.0. Du kan downloade det fra her .
MySQL Slet syntaks:
DELETE (LOW_PRIORITY) (QUICK) (IGNORE) FROM tablename(.*) (, tablename(.*)) (WHERE condition) (ORDER BY) (LIMIT row_count) ;
Syntaks Forklaring:
- Syntaksen starter med nøgleordet “SLET FRA” og informerer derved MySQL-serveren om den type aktivitet, der skal udføres. Dette er et obligatorisk nøgleord og kan ikke udelades.
- Derefter kommer navnet på den tabel, hvor DELETE-operationen skal udføres. Dette er også obligatorisk og kan ikke udelades. Vi kan nævne et eller flere tabelnavne her.
- Dernæst kan vi nævne enhver betingelse, der styrer berettigelsen af de rækker, der skal slettes. Dette er en valgfri klausul. Nøgleordet her er HVOR.
- Efterfulgt af WHERE-klausulen er ORDER BY-klausulen, som tvinger rækkerne til at blive slettet i en bestemt rækkefølge, enten stigende eller faldende, på en eller flere kolonner. Dette er en valgfri klausul.
- LIMIT-klausul følger ORDER BY-klausulen. Det sætter en grænse for antallet af rækker, som DELETE-sætningen kan fjerne fra tabellen.
Modifikatorer i SLET erklæring
# 1) LOW_PRIORITY:
Denne modifikator informerer MySQL-motoren om at udskyde udførelsen af DELETE-sætningen, indtil der ikke er nogen forbindelser, der læser fra tabellen, som vi forsøger at SLETTE fra.
Dette hjælper med at opnå konsistens på tværs af alle de andre operationer, der udføres på bordet. Dette hjælper også med at undgå problemer med bordlåsning.
# 2) HURTIG:
Når vi sletter en række, slettes det tilsvarende indeks også. At genvinde pladsen på tidspunktet for udførelsen af DELETE-erklæringen forbruger processorens tid. Hvis vi bruger QUICK-nøgleordet, forbliver det tilsvarende indeksrum uudnyttet og kan bruges, når nye poster, der passer til det indeksområde, der blev slettet tidligere, indsættes.
For eksempel, overvej en medarbejdertabel, hvor medarbejder-ID er indekset. Hver gang en medarbejder forlader en organisation, skal vi slette den tilsvarende post. Hvis vi bruger QUICK-klausulen, forbliver det tilsvarende indeksrum uudnyttet.
Når en ny medarbejder tilmelder sig, får han / hun et nyt medarbejdernummer og ikke det samme nummer på den person, der forlod. I sådanne eksempler anbefales det ikke at bruge QUICK.
MYSQL SLET Eksempel
Nedenfor er en eksempeltabel oprettet i MYSQL.
Skema navn: pacific
Tabelnavn: medarbejdere
Kolonne navne:
empNum; Indeholder heltalværdier for medarbejdernummeret.
efternavn: Indeholder varchar-værdier for medarbejderens efternavn.
fornavn: Indeholder varchar-værdier for medarbejderens fornavn.
e-mail: Har varchar-værdier for medarbejderens e-mail-id.
deptNum; Har varchar for det afdeling-ID, som en medarbejder tilhører.
løn: Indeholder decimalværdier af hver medarbejders løn.
start dato: Indeholder datoværdierne for medarbejderens tiltrædelsesdato.
Skema navn: pacific
Tabelnavn: medarbejdere_historie
Kolonne navne:
empNum; Indeholder heltalets værdier for medarbejdernummer.
efternavn: Indeholder varchar-værdier for medarbejderens efternavn.
fornavn: Indeholder varchar-værdier for medarbejderens fornavn.
e-mail: Har varchar-værdier for medarbejderens e-mail-id.
deptNum; Har varchar for det afdeling-ID, som en medarbejder tilhører.
løn: Indeholder decimalværdier af hver medarbejders løn.
start dato: Indeholder datoværdier for medarbejderens tiltrædelsesdato.
Skema navn: pacific
Tabelnavn: afdelinger
Kolonne navne:
deptNum; Har varchar til afdelingens ID i en organisation.
by: Indeholder navnet på den by, hvor afdelingerne arbejder fra.
Land: Indeholder navnet på det land, der svarer til byen.
bonus: Indeholder den procentvise værdi af bonusen.
MySQL Slet enkelt række
Den første og lettere måde at slette poster fra tabellen på ved at slette poster en efter en ved hjælp af en meget stærk WHERE-klausul, der sikrer, at kun en passende post slettes. Dette kan yderligere bruges til at slette et sæt lignende rækker fra tabellen.
Lad os gennemgå sletningserklæringen og dens udførelse i detaljer.
Her forsøger vi at fjerne en medarbejder ved navn 'Chris Nolan' med medarbejdernummeret som 1013.
Som afbildet på billedet ovenfor er DELETE-sætningen udført med succes og slettet en række fra medarbejderens tabel.
Det produktion udsagnet nedenfor viser det tidspunkt, hvor erklæringen blev udført, den MySQL-sætning, der blev udført, og antallet af rækker, der blev berørt.
Vær meget sikker på WHERE-klausulen her. Hvis WHERE-klausulen er forkert, eller hvis du går glip af at have en WHERE-klausul, kan det resultere i tab af data. For at undgå sådanne situationer er der i produktionen praksis med periodiske sikkerhedskopier eller aflæsninger af data.
For at verificere output fra denne DELETE-sætning, lad os udføre SELECT-sætningen på denne tabel med empNum som 1013.
Outputresultaterne viser NULL-værdi for alle kolonnerne, hvilket antyder, at der ikke findes nogen post for et sådant empNum. Outputtet af forespørgslen nedenfor viser, at 0 (e) række (r) er returneret, hvilket antyder, at posten er slettet ved udførelsen af DELETE-sætningen ovenfor.
Forespørgsel:
DELETE FROM employees WHERE empNum = 1013 ;
Tabelbillede efter:
empNum | efternavn | fornavn | deptNum | Løn | |
---|---|---|---|---|---|
7 | Dette er relativt langsommere end TRUNCATE sammenlignet med at slette hele data fra tabellen. | Dette er relativt hurtigere end SLET, sammenlignet med at slette hele data fra tabellen. | |||
NUL | NUL | NUL | NUL | NUL | NUL |
Sletning af MySQL ved anvendelse af BESTILLING AF OG BEGRÆNSER
ORDER BY og LIMIT er to klausuler, som vi har diskuteret ovenfor. Førstnævnte hjælper med at bestemme rækkefølgen, som posterne skal renses i, enten slette poster med empNum i stigende eller slette poster med løn i faldende rækkefølge. Sidstnævnte hjælper med at begrænse antallet af poster, som denne transaktion kan slette.
For eksempel, hvis vi kun vil slette 2 medarbejdere, der tilhører afdeling 4, der er høje lønmodtagere. Derefter er der tre dele til denne forespørgsel.
- Først, vi er nødt til at rense medarbejdere fra afdeling 4. Dette håndteres af en WHERE-klausul.
- Næste, vi er nødt til at rense medarbejdere, der tjener høje lønninger. Dette håndteres af ORDER BY-klausulen i lønkolonnen i faldende rækkefølge.
- Endelig vi skal kun rense to medarbejdere. Dette håndteres af LIMIT-klausulen.
Lad os se på SLET forespørgslen og se resultaterne. Før vi gør det, skal vi først identificere, hvilke nøjagtige poster vi vil slette. Vi bruger de ovennævnte betingelser med en SELECT-sætning for at hente de poster, vi vil slette, og senere udføre den samme forespørgsel for at kontrollere, om disse poster er slettet eller ej.
I ovenstående SELECT-forespørgsel har vi opfyldt alle de tre betingelser, som vi talte ovenfor ved hjælp af WHERE, ORDER BY og LIMIT-klausulen. Forespørgslen gav os 2 poster, en med empNum 1010 og en anden med 1007. Nu udfører vi DELETE-forespørgslen for at sikre, at disse to poster slettes.
Som afbildet på billedet ovenfor har DELETE-sætningen udført med succes og slettet to rækker fra medarbejderens tabel. Det produktion udsagnet nedenfor viser det tidspunkt, hvor erklæringen blev udført, den MySQL-sætning, der blev udført, og antallet af rækker, der blev berørt.
For at bekræfte output fra denne DELETE-sætning, lad os udføre SELECT for empNum 1010 og 1007. Vi kan ikke bruge den samme SELECT-forespørgsel som brugt ovenfor, som det ville vise de andre medarbejdere under deptNum 4.
falsk e-mail-adresse, jeg kan bruge
Outputresultaterne viser NULL-værdi for alle kolonner, hvilket antyder, at der ikke findes nogen post for sådanne medarbejdernumre. Det Produktion af forespørgslen nedenfor viser, at 0 række (r) er returneret, hvilket antyder, at posten er blevet slettet ved udførelsen af DELETE-sætningen ovenfor.
Forespørgsel:
DELETE FROM employees WHERE deptNum = 4 ORDER BY salary DESC LIMIT 2 ;
Tabelbillede efter:
empNum | efternavn | fornavn | deptNum | Løn | |
---|---|---|---|---|---|
NUL | NUL | NUL | NUL | NUL | NUL |
MYSQL-SLETNING Brug af Select-klausul
Dernæst gennemgår vi brugen af SELECT-klausulen, mens vi sletter poster fra en tabel.
Overvej følgende scenarie:
Vi har to sæt borde: medarbejdere og afdelinger. deptNum er som en primær nøgle i afdelingens tabel og fremmed nøgle i medarbejderens tabel. Dette betyder, at hvis en medarbejder får tildelt en afdeling, skal den være fra en af afdelingerne i afdelingernes tabel.
Nu er vi nødt til at slette disse poster fra afdelingens tabel, hvor der indtil videre ikke er tildelt nogen medarbejder. Vi kan gøre dette ved at have en SELECT-sætning i underforespørgslen til en DELETE-forespørgsel.
Lad os først identificere de poster, vi vil slette:
Ovenstående SELECT-forespørgsel har en underforespørgsel.
Forespørgslens funktion er som følger:
Forespørgslen trækker alle poster fra afdelingens tabel, hvor deptNum ikke findes i medarbejderens tabel. Forbindelsen udføres i underforespørgslen på deptNum af de to tabeller.
Lad os nu køre DELETE-forespørgslen og se, om vi kan slette disse to poster fra afdelingens tabel, da ingen medarbejdere er tildelt disse afdelinger.
Som afbildet i ovenstående billede har sletningserklæringen slettet 2 rækker fra afdelingstabellerne, som ingen medarbejder har fået tildelt.
For at verificere output fra denne DELETE-sætning, lad os udføre SELECT på bordet og se, hvad vi har i output.
Outputtemeddelelsen fra ovenstående verifikationsforespørgsel siger “0 række (r) returneret”. Dette indebærer, at rækkerne med deptNum 6 og 7 slettes. Outputtet viser heller ingen poster i stedet for at vise NULL-værdier, da poster er blevet slettet.
Forespørgsel:
DELETE FROM departments WHERE NOT EXISTS (SELECT deptNum FROM employees WHERE departments.deptNum = employees.deptNum ) ;
MySQL SLET Hele data fra tabellen
Dernæst ser vi på scenariet, hvor vi skal slette alle rækkerne eller posterne fra en tabel.
I produktionssituationen støder du muligvis aldrig på en sådan situation. Men denne slags ting ville være påkrævet i udviklingsområdet, hvor du skal teste din kode med flere forskellige scenarier, og du vil muligvis genskabe et nyt sæt testdata ved at slette de poster, der findes i tabellen.
Lad os først se på de data, som vi agter at slette. Vi vil forsøge at slette data fra medarbejdernes historie-tabel.
Nedenfor er de nuværende data i tabellen.
Her har vi 18 rækker i tabellen medarbejderhistorie. Lad os nu gå videre og slette alle disse i en enkelt transaktion. Forespørgslen ligner næsten den, vi diskuterede i det første afsnit. Den eneste ændring er, at vi skal fjerne WHERE-klausulen fra forespørgslen, så der ikke er nogen begrænsning for antallet af rækker, som vi vil slette.
Som afbildet i ovenstående billede er sletningserklæringen udført med succes og slettet alle de 18 rækker fra medarbejderhistorie-tabellen. Output-sætningen nedenfor viser det tidspunkt, hvor erklæringen blev udført, den MySQL-sætning, der blev udført, og antallet af rækker, der blev berørt.
For at verificere output fra denne DELETE-sætning, lad os udføre SELECT på bordet og se, hvad vi har i output.
Outputresultaterne viser NULL-værdi for alle kolonner, hvilket antyder, at der ikke findes nogen post for sådanne medarbejdernumre. Output af forespørgslen nedenfor viser, at 0 række er returneret, hvilket betyder, at alle poster er slettet ved udførelsen af ovenstående DELETE-sætning.
Forespørgsel:
DELETE FROM employees_history ;
Tabelbillede efter:
empNum | efternavn | fornavn | deptNum | Løn | |
---|---|---|---|---|---|
NUL | NUL | NUL | NUL | NUL | NUL |
MySQL SLET hele tabellen
Nu skal vi se på scenariet, hvor vi skal slette selve tabellen. I SQL-termer kalder vi det DROP-tabellen. Det betyder ikke noget, om tabellen har data eller ej. Det vil simpelthen tabe tabellen sammen med dataene, hvis nogen.
I ovenstående afsnit slettede vi data fra tabellen medarbejdere_historie. I dette afsnit taber vi selve tabellen medarbejdere_historie.
Følgende er kommandoen sammen med dens output:
Som afbildet i ovenstående billede er DROP-udsagnet udført med succes og slettet tabellen medarbejderhistorie fra systemkataloget i MySQL-databasen.
Hvis du ser på meddelelsen, vil den vise “0 række (r) berørt”. Dette skyldes, at vi havde slettet alle de 18 rækker i det foregående afsnit. Hvis denne tabel havde nogen rækker, ville disse antal rækker blive påvirket, hvilket indebærer slettet.
For at verificere output fra denne DROP-sætning, lad os udføre SELECT på bordet og se, hvad vi har i output.
Outputmeddelelsen fra ovenstående verifikationsforespørgsel siger, at tabellen ikke eksisterer. Dette validerer vores udførelse af ovenstående DROP-erklæring for at tabe tabellen.
Forespørgsel:
DROP TABLE employees_history ;
MySQL afkortet kommando
Vi har allerede diskuteret sletning af alle poster fra tabellen ved hjælp af SLET-kommandoen. Det samme kunne også opnås ved hjælp af TRUNCATE-sætningen.
Lad os i dette eksempel gendanne tabellen medarbejdere_historie og udfyld den igen med data. T han følger er de to forespørgsler, der er blevet udført for at genskabe tabellen og genudfylde den:
Forespørgsel:
CREATE TABLE employees_history LIKE employees ; INSERT INTO employees_history (SELECT * FROM employees) ;
Sådan ser tabellen medarbejderhistorie nu ud med data.
Dernæst fjerner vi alle poster fra denne tabel ved hjælp af TRUNCATE-sætningen.
Som vist på billedet udføres forespørgslen med succes. Hvis du ser nærmere på 'Besked' -delen, vil du opdage, at der står '0 række berørt'. Vi ved dog, at denne tabel har 15 rækker. Så hvorfor er shows nul?
Grund: Afkortet erklæring er ligeglad med at tælle, hvor mange rækker der påvirkes af dens udførelse. Det tømmer simpelthen bordet. Dette er en af de væsentlige forskelle mellem DELETE og TRUNCATE-sætninger.
Lad os kontrollere udførelsen af TRUNCATE-sætningen ved at udføre en SELECT-forespørgsel på medarbejder_historitabellen.
Som vist på billedet ovenfor har forespørgslen ikke returneret nogen rækker, og også alle kolonnerne viser NULL-værdier, hvilket antyder, at TRUNCATE-sætningen, som vi tidligere udførte, har slettet alle poster fra tabellen.
Forespørgsel:
TRUNCATE TABLE employees_history ;
Forskellen mellem TRUNCATE og SLET udsagn
Mr. Nej | SLET | TRUNCATE |
---|---|---|
en | Det er et DML (Data Manipulation Language). | Det er et DDL (Data Definition Language). |
to | Enhver AFTER DELETE-trigger på bordet aktiveres, når vi bruger SLET-kommandoen. | Ingen EFTER SLET udløser på bordet bliver aktiveret, når vi bruger TRUNCATE-kommandoen. |
3 | En post kan slettes, selvom der er begrænsninger for udenlandske nøgler. | Optegnelser fra tabellen kan ikke afkortes, hvis der er nogen udenlandske nøglebegrænsninger. |
4 | Initialisering af tabel genoptages ikke. | Tabellen genintialiseres. |
5 | WHERE klausul kan bruges. | WHERE klausul kan ikke bruges. |
6 | Dette sletter en post ad gangen og registrerer det samlede antal slettede poster i logfiler. | Det renser alle poster på én gang og holder ikke styr på antallet af slettede poster. |
Henvisningsintegritet og dens indvirkning på SLET
Lad os se, før vi er hvad er referenceintegritet eller RI eller udenlandske nøglebegrænsninger?
Fremmede nøglebegrænsninger handler om at etablere et forhold eller en sammenhæng mellem forælder og barnebord. Dette hjælper med at krydshenvise dataene på tværs af de tabeller, der er knyttet til hinanden. En overordnet tabel kan have flere underordnede tabeller og omvendt.
For eksempel, de to tabeller, som vi hidtil har diskuteret, dvs. medarbejdere og afdelinger, er knyttet til hinanden ved hjælp af en Foreign Key-begrænsning. Denne begrænsning etableres ved at lave en kolonne, normalt den primære nøgle, som nøglekolonnen, der forbinder to tabeller.
interviewspørgsmål til .net-udviklere
Kolonnen deptNum i afdelingens tabel er knyttet til kolonnen deptNum i medarbejderens tabel. I dette tilfælde er afdelinger overordnet og medarbejderne underordnet.
Men hvordan påvirker dette DELETE-udsagnene?
I MySQL eller i en hvilken som helst database er der visse scenarier, der skal håndteres, mens du sletter poster fra overordnede eller underordnede tabeller.
Der er flere referencemuligheder, som vi kan diskutere:
# 1) PÅ SLETTE CASCADE: Reglen siger, at vi ikke kan fjerne en række fra den overordnede tabel, hvis den har nogen referencer eller har en tilsvarende række i nogen af de underordnede tabeller. Men hvis en overordnet tabel har et par underordnede tabeller, er det en kedelig opgave at først fjerne posterne fra hver enkelt underordnede tabel og derefter fra overordnet tabellen.
Til dette er der en løsning kaldet ON DELETE CASCADE. Dette er en klausul, der føjes til CREATE-sætningen i hver af de underordnede tabeller. Så når vi siger slette en række fra overordnetabellen, ville MySQL-motoren først identificere referencerne for den række i underordnede tabeller og fjerne disse poster og til sidst slette posten fra overordnet tabellen.
# 2) INGEN HANDLING: Dette er en standardindstilling. Hvis udførelsen af en DELETE-sætning forsøger at slette en post, der har referencer i nogen af de underordnede tabeller, stopper eksekveringen af erklæringen med denne mulighed, og MySQL-transaktion vil blive rullet tilbage til det sidste forpligtelsespunkt.
# 3) BEGRÆNSNING: Funktionen af RESTRICT og NO ACTION er den samme. Det stopper udførelsen og udsender en tilbageførsel.
# 4) INDSTILL NUL: Hvis udførelsen af en sletningserklæring forsøger at slette en post, der har referencer i en hvilken som helst af underordnede tabeller, opdaterer denne mulighed kolonneværdien i alle underordnede tabeller som NULL, og når den er færdig, sletter den posten fra den overordnede bord.
# 5) INDSTILL STANDARD: Hvis udførelsen af en DELETE-sætning forsøger at slette en post, der har referencer i nogen af de underordnede tabeller, opdaterer denne mulighed kolonneværdierne til standardværdien som defineret i CREATE-sætningen i tabellen.
Ofte stillede spørgsmål og svar
Q # 1) Hvordan slettes data fra tabellen i MySQL?
Svar: Syntaksen for slettekommando for kun at slette en valgt række data er angivet nedenfor.
DELETE FROM table_name WHERE condition;
Q # 2) Hvordan slettes alle data fra tabellen i MySQL?
Svar: Syntaksen for SLET-kommandoen for at slette alle rækkerne fra tabellen er:
DELETE * FROM table_name;
Spørgsmål nr. 3) Hvordan slettes tabellen fra databasen i MySQL?
Svar: Drop-kommandoen kan bruges til at slette tabellen fra databasen. Brugeren kan erstatte tabelnavn med den tabel, der skal slettes.
DROP TABLE table_name;
Spørgsmål nr. 4) Hvordan slettes databasen i MySQL?
Svar: Drop-kommandoen kan bruges til at slette databasen.
DROP Database db_name;
Brugere kan erstatte db_name med databasenavnet, der skal slettes.
Spørgsmål nr. 5) Hvad er PÅ SLETTE CASCADE i MySQL?
Svar: Når den overordnede post slettes, opretter ON DELETE CASCADE en matchende underordnet post, der skal slettes. Således påvirkes sletningen fra forældren til barnet. Dette kan være nyttigt ved udførelse af sletning af flere tabeller.
Spørgsmål nr. 6) Hvorfor betragtes TRUNCATE som en DDL-sætning?
Svar: TRUNCATE-sætning falder faktisk og genskaber tabellen sammen med metadataene i tabellen. Således er det en DDL-erklæring.
Q # 7) Kan TRUNCATE rulles tilbage?
Svar: Nej, TRUNCATE er en automatisk forpligtelseserklæring, hvis den udføres uafhængig. Dette betyder, at den ikke kan rulles tilbage, da forpligtelsen også udføres sammen med den. Men hvis det er en del af en transaktion, kan den rulles tilbage ved hjælp af SQL-logfiler.
Q # 8) Kan DELETE-udsagn rulles tilbage?
Svar: Ja, DELETE-udsagn kan rulles tilbage. Bare udfør ROLLBACK-kommandoen, før du udfører COMMIT.
Q # 9) Kan en kolonne slettes ved hjælp af SLET-kommandoen?
Svar: Kolonne tilføjelse eller sletning er DDL-kommandoer. En ALTER-sætning skal bruges til at DROPE en kolonne fra tabellen.
Konklusion
I denne vejledning har vi lært forskellige måder at udføre DELETE-udsagn i MySQL.
I en nøddeskal så vi:
- MySQL Slet enkelt række
- MySQL Slet ved hjælp af ORDER BY And Limit Clause
- MySQL Slet ved hjælp af Select-klausul
- MySQL Slet hele tabellen
- MySQL afkortes
- Forskel mellem TRUNCATE og DELETE udsagn
- Henvisningsintegritet og dens indvirkning på SLET
Vi kan bruge et af ovenstående baseret på kravet.
God læselyst!!
Anbefalet læsning
- Unix Cat Command Syntax, indstillinger med eksempler
- Unix sorteringskommando med syntaks, indstillinger og eksempler
- MySQL indsæt i tabel - Indsæt erklæringens syntaks og eksempler
- MongoDB opdater og slet dokument med eksempler
- Klip kommando i Unix med eksempler
- Nyt / Slet operatører i C ++ med eksempler
- MySQL Update Statement Tutorial - Update Query Syntax & Eksempler
- Ls Command i Unix med eksempler