Den rigtige anvendelse af DELETE-erklæringen til fjernelse af data er afgørende, og det involverer mange problemer. Alligevel er der standardpraksis for brugen af DELETE-sætningen, der forenkler alle sådanne opgaver.
Denne artikel vil udforske nogle af scenarierne i det professionelle liv for at udstyre dig med de mest nyttige tips til at bruge DELETE-sætningen korrekt. Du kan fjerne data fra en tabel på forskellige måder. Udforsk forskellen mellem DELETE og TRUNCATE i SQL Server, der er blevet dækket med praktiske eksempler.
T-SQL Slet Kommando Grundlæggende
Først og fremmest bør vi blive fortrolige med T-SQL Delete-sætningen på den enklest mulige måde.
Delete-sætningen, som navnet indikerer, er en erklæring, der hjælper os med at slette data fra databasetabellen.
Et bord er en struktur, som du opretter i en database for at gemme dine data. For eksempel kan vi have en tabel med bøger til at gemme poster relateret til disse bøger.
En database er en organiseret samling af data og datastrukturerne til at opbevare disse data. Med andre ord kan data gemmes inde i databasen i form af tabeller.
Sådan sletter du én række eller flere rækker
Vi kan slette en eller flere poster (almindeligvis kendt som rækker) fra en tabel ved hjælp af delete-sætningen.
Delete-sætningen fjerner nogle eller alle data (rækker) fra en tabel.
Ifølge Microsofts dokumentation fjerner Delete-sætningen en eller flere rækker fra en tabel eller visning i SQL Server.
Man kan undre sig over, hvordan sætningen definerer, om nogle eller alle dataene (rækkerne) skal fjernes fra en tabel. Svaret ligger i de kriterier eller betingelser, der specificerer, hvad der skal fjernes.
Slet kommando i SQL Server
Den enkleste syntaks for sætningen er som følger:
Delete FROM <TableName> WHERE <Condition>
Du skal angive tabelnavnet og kriterierne/betingelsen for sletning af data (rækker) fra tabellen.
Bemærk:Det er afgørende at bruge DELETE-sætningen med en betingelse (WHERE-klausul), selvom betingelseskravet ikke er et must.
Hvis du udfører kommandoen DELETE tabel uden WHERE-betingelsen, vil du ende med at slette alle rækkerne (dataene) fra tabellen. Gør det derfor til en vane at bruge WHERE-betingelsen, medmindre du vil fjerne alle rækker.
Kompatibilitet
Denne erklæring er kompatibel med mange versioner af SQL Server, inklusive følgende:
- SQL Server 2012 og nyere versioner.
- Cloud-baseret SQL Server Database (Azure SQL Database).
- Cloud-baseret SQL Data Warehouse (Azure Synapse Analytics).
Trin-for-trin tjekliste til fjernelse af rækker fra tabellen
Nu skal vi udforske brugen af Slet-erklæringen med flere praktiske scenarier.
Sammendrag af trin
- Opsæt en prøvedatabase.
- Se dataene.
- Slet dataene.
- Indsæt flere data tilbage i tabellen.
- Se dataene før sletning.
- Sådan sletter du data i en kolonne baseret på en betingelse.
- Se dataene efter sletning.
- Indsæt flere data tilbage i tabellen.
- Se dataene før sletning.
- Slet data baseret på en anden betingelse.
- Se dataene efter sletning.
- Indsæt dataene tilbage i tabellen.
- Slet dataene baseret på to betingelser denne gang.
- Se dataene efter sletning.
Opsætning af prøvedatabase (BooksSample)
Vi har brug for en prøvedatabase til at teste og køre scripts. Først skal vi konfigurere den eksempeldatabase, der dækker følgende trin:
- Opret en eksempeldatabase.
- Opret en tabel i eksempeldatabasen.
- Indsæt dataene (to rækker) i databasetabellen.
Åbn SQL Server Management Studio eller dbForge Studio til SQL Server, og kør følgende script for at opsætte eksempeldatabasen:
-- Connect to the 'master' database to run this snippet
USE master
GO
-- Create a new database if it does not already exist
IF NOT EXISTS (
SELECT [name]
FROM sys.databases
WHERE [name] = N'BooksSample'
)
CREATE DATABASE BooksSample
GO
USE BooksSample
-- Create the table book
CREATE TABLE [dbo].[Book]
(
[BookNumber] INT NOT NULL PRIMARY KEY,-- Primary Key column
[Title] VARCHAR(150) NOT NULL,
[Stock] SMALLINT NOT NULL
);
GO
-- Insert rows into table 'Book'
INSERT INTO [dbo].[Book]
( -- Columns to insert data into
[BookNumber], [Title], [Stock]
)
VALUES
( -- First row: values for the columns in the list above
1, 'Learn SQL in 7 Days', 50
),
( -- Second row: values for the columns in the list above
2, 'Creating Databases in Minutes', 50
);
GO
Se dataene (bogtabel)
Lad os se den nyligt oprettede og udfyldte tabel i databasen. Kør nedenstående script:
-- View data (rows) from the table (Book)
SELECT b.BookNumber, b.Title, b.Stock FROM dbo.Book b
Outputtet er:
Vi kan se de to rækker i tabellen (bog). I øjeblikket er disse alle dataene i denne tabel.
Slet dataene
Som vi husker, er der risiko for at slette alle rækker i en tabel, hvis vi glemmer at nævne betingelsen/kriterierne for den korrekte sletning.
Brug altid WHERE-klausulen med Delete-sætningen for at undgå utilsigtet tab af data. Den eneste undtagelse bør være tilfældet, når du skal slette alle data med vilje.
For at fjerne alle data (rækker) fra eksempeldatabasetabellen skal du køre følgende script:
-- Delete all the data (rows) from the table Book
DELETE FROM dbo.Book
Outputtet er:
Se dataene efter sletningen
Nu skal vi kontrollere, om alle rækkerne er blevet slettet:
-- View data (rows) from the table (Book)
SELECT b.BookNumber, b.Title, b.Stock FROM dbo.Book b
Resultaterne er:
På denne måde har vi med succes slettet alle rækkerne fra bogen bord. Til det anvendte vi DELETE-sætningen uden nogen slettekriterier/betingelser.
Indsæt data tilbage i tabellen (med samme titel)
Vi kan indsætte dataene (rækkerne) tilbage i tabellen og derefter anvende DELETE-sætningen baseret på nogle betingelser/kriterier.
Denne gang vælger vi at indsætte flere rækker, men med bevidst samme titel:
-- Insert rows into table 'Book'
INSERT INTO [dbo].[Book]
( -- Columns to insert data into
[BookNumber], [Title], [Stock]
)
VALUES
( -- First row: values for the columns in the list above
1, 'Learn SQL in 7 Days', 50
),
( -- Second row: values for the columns in the list above
2, 'Creating Databases in Minutes', 50
),
( -- Third row: values for the columns in the list above
3, 'Creating Databases in Minutes', 50
),
( -- Fourth row: values for the columns in the list above
4, 'Creating Databases in Minutes', 50
);
GO
Outputtet er som følger:
Bemærk :For at gendanne de slettede eller ændrede data kan du bruge de dedikerede softwareløsninger. dbForge Transaction Log-løsningen giver dig både mulighed for at gendanne disse data og se, hvem og hvornår der er slettet eller ændret dem.
Se dataene før sletning
For at se dataene skal du udføre følgende script:
-- View data (rows) from the table (Book)
SELECT b.BookNumber, b.Title, b.Stock FROM dbo.Book b
Outputtet er:
Outputtet viser, at vi ved en fejl har indsat tre rækker med samme bogtitel. Det er et problem. Den enkle løsning er at fjerne de unødvendige rækker ved at anvende den specifikke betingelse for at fjerne rækker med duplikerede titler.
Sådan sletter du data i SQL-kolonne baseret på en betingelse (bognummer)
Vigtigt:Vi kan overveje en af følgende måder at løse dette problem på:
- Slet efter bognummer
- Slet efter titel
I mit scenarie vælger jeg ikke at slette efter titel. Hvis vi sletter efter titel, ender vi med at slette alle rækker, der indeholder den titel, inklusive dem, vi skal beholde. Derfor er den anbefalede fremgangsmåde at fjerne tabellen baseret på bognummeret kolonne.
Hvis vi ser på resultatsættet, kan vi nemt forstå, at Bognummer:3 og Bognummer:4 er duplikerede rækker. Tidligere blev det forklaret i detaljer, hvordan man fjerner dubletter i SQL. Vi skal slette dem for at holde databasen konsistent.
Igen opstår følgende muligheder:
- Slet hvor bognummeret (BookNumber) er større end 2.
- Slet hvor BookNumber er 3 og 4.
Lad os vælge den første mulighed. Husk dog, at det kun er gyldigt, hvis der ikke er rækker efter de dubletrækker, vi er opmærksomme på.
Udfør følgende script:
-- Delete all the data (rows) from the table Book where BookNumber is greater than 2
DELETE FROM dbo.Book
WHERE BookNumber>2
Se dataene efter sletningen
Lad os tjekke tabellen efter sletning af dataene:
-- View data (rows) from the table (Book)
SELECT b.BookNumber, b.Title, b.Stock FROM dbo.Book b
Outputtet er:
Indsæt flere data i tabellen (mere lager)
For at tilføje flere data (række) relateret til aktien, bruger vi nedenstående script:
-- Insert rows into table 'Book'
INSERT INTO [dbo].[Book]
( -- Columns to insert data into
[BookNumber], [Title], [Stock]
)
VALUES
( -- First row: values for the columns in the list above
3, 'Basic Data Structures', 60
),
( -- Second row: values for the columns in the list above
4, 'Advanced Data Structures', 0
)
GO
Se data før sletning
Tag et kig på tabellen:
-- View data (rows) from the table (Book)
SELECT b.BookNumber, b.Title, b.Stock FROM dbo.Book b
Outputtet er:
Slet data baseret på en anden tilstand
Antag, at vi er nødt til at fjerne udsolgte bøger for at holde mere nøjagtige oplysninger i databasen. For at gøre dette skal vi kigge efter de rækker, hvor aktien er 0.
Vi kan bruge DELETE-sætningen med betingelsen baseret på aktien kolonneværdi 0:
-- Delete all the out of stock (Where Stock is 0) books (rows) from the table Book
DELETE FROM dbo.Book
WHERE Stock=0
Se dataene efter sletningen
-- View data (rows) from the table (Book)
SELECT b.BookNumber, b.Title, b.Stock FROM dbo.Book b
Indsæt flere data i tabellen (flere titler og lager)
Vi tilføjer yderligere to rækker i tabellen:
-- Insert rows into table 'Book'
INSERT INTO [dbo].[Book]
( -- Columns to insert data into
[BookNumber], [Title], [Stock]
)
VALUES
( -- First row: values for the columns in the list above
4, 'Learn Azure SQL Database in 10 Days', 0
),
( -- Second row: values for the columns in the list above
5, 'Azure SQL Database Concepts', 1
)
GO
Se dataene før sletning
Tjek rækkerne, før du sletter noget yderligere, baseret på kravet:
-- View data (rows) from the table (Book)
SELECT b.BookNumber, b.Title, b.Stock FROM dbo.Book b
Tabellens output er:
Slet data baseret på to betingelser
Denne gang skal vi slette alle bøger (rækker), hvor titler indeholder ordet SQL og de er udsolgt (deres lagerværdi er 0).
Med andre ord sletter vi alle SQL-relaterede udsolgte bøger.
I dette tilfælde skal vi angive mere end én betingelse med DELETE-sætningen. Vi skal sikre, at vi kun sletter udsolgte bøger og kun de bøger, der har ordet SQL i deres titel.
Se følgende script:
-- Delete all the out of stock (Where Stock is 0) SQL related (Title contains SQL) books (rows) from the table Book
DELETE FROM dbo.Book
WHERE Title LIKE '%SQL%' and Stock=0
Se dataene efter sletningen
Vi ser dataene for sidste gang:
Vigtigt tip :Før du sletter dataene, skal du køre SELECT-sætningen baseret på den samme betingelse, som du vil bruge til sletning. På denne måde sikrer du, at dine sletteaktiviteter gælder for de korrekte data.
Kør f.eks. SELECT-forespørgslen først for at sikre, at du kun får de rækker, der er beregnet til sletning:
SELECT * FROM dbo.Book
WHERE Title LIKE '%SQL%' and Stock=0
Når du er sikker, kan du omdanne din SELECT til DELETE-sætningen:
DELETE FROM dbo.Book
WHERE Title LIKE '%SQL%' and Stock=0
Tillykke!
Du har med succes mestret opgaven med at fjerne (slette) en eller flere rækker fra en tabel i henhold til kravene.
Hold kontakten for at få avancerede sletningsscenarier og andre professionelle tips vedrørende brugen af DELETE-erklæringen.
Ting at gøre
Nu hvor du med succes kan fjerne rækker fra en tabel, kan du træne og forbedre dine færdigheder yderligere:
- Prøv at fjerne rækker, hvor der kun er én vare på lageret.
- Slet alle de bøger, hvor titlen indeholder ordet Struktur.
- Slet alle bøgerne (rækkerne) undtagen bognummeret (BookNumber) 1.
Oplev mere avancerede scenarier om SQL DELETE-sætningen.