Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Инструкция за изтриване на SQL Server:Как да премахнете един или умножете редове от таблицата

Правилното прилагане на оператора DELETE за премахване на данни е от решаващо значение и включва много проблеми. Все пак има стандартни практики за използване на израза DELETE, които опростяват всички подобни задачи.

Тази статия ще проучи някои от сценариите от професионалния живот, за да ви предостави най-полезните съвети за правилното използване на оператора DELETE. Можете да премахнете данни от таблица по различни начини. Разгледайте разликата между DELETE и TRUNCATE в SQL Server, която е разгледана с практически примери.

T-SQL Изтриване Команда Основни положения

На първо място, трябва да се запознаем с оператора T-SQL Delete по възможно най-простия начин.

Инструкцията Delete, както показва името, е оператор, който ни помага да изтрием данни от таблицата на базата данни.

Маса е структура, която създавате в база данни, за да съхранявате вашите данни. Например, можем да имаме таблица с книги, за да съхраняваме записи, свързани с тези книги.

База данни е организирана колекция от данни и структурите от данни за съхраняване на тези данни. С други думи, данните могат да се съхраняват в базата данни под формата на таблици.

Как да изтриете един ред или няколко реда

Можем да изтрием един или повече записи (обикновено известни като редове) от таблица с помощта на оператора delete.

Инструкцията Delete премахва някои или всички данни (редове) от таблица.

Според документацията на Microsoft, операторът Delete премахва един или повече редове от таблица или изглед в SQL Server.

Човек може да се чуди как изявлението дефинира дали да премахнете някои или всички данни (редове) от таблица. Отговорът се крие в критериите или условията, определящи какво трябва да бъде премахнато.

Команда за изтриване в SQL Server

Най-простият синтаксис на изявлението е както следва:

Delete FROM <TableName> WHERE <Condition>

Трябва да предоставите името на таблицата и критериите/условията за изтриване на данните (редове) от таблицата.

Забележка:От решаващо значение е да използвате израза DELETE с условие (клауза WHERE), въпреки че изискването за условие не е задължително.

Ако изпълните командата DELETE table без условието WHERE, в крайна сметка ще изтриете всички редове (данни) от таблицата. Следователно, направете си навик да използвате условието WHERE, освен ако не искате да премахнете всички редове.

Съвместимост

Това изявление е съвместимо с много версии на SQL Server, включително следното:

  1. SQL Server 2012 и по-нови версии.
  2. Базирана в облак база данни на SQL Server (база от данни Azure SQL).
  3. Облачно базирано SQL хранилище за данни (Azure Synapse Analytics).

Контролен списък стъпка по стъпка за премахване на редове от таблицата

Сега ще проучим използването на оператора Delete с няколко практически сценария.

Обобщение на стъпките

  1. Настройте примерна база данни.
  2. Преглед на данните.
  3. Изтрийте данните.
  4. Вмъкнете още данни обратно в таблицата.
  5. Преглед на данните преди изтриване.
  6. Как да изтриете данни в колона въз основа на условие.
  7. Преглед на данните след изтриване.
  8. Вмъкнете още данни обратно в таблицата.
  9. Преглед на данните преди изтриване.
  10. Изтрийте данните въз основа на друго условие.
  11. Преглед на данните след изтриване.
  12. Вмъкнете данните обратно в таблицата.
  13. Изтрийте данните въз основа на две условия този път.
  14. Преглед на данните след изтриване.

Настройте примерна база данни (BooksSample)

Нуждаем се от примерна база данни, за да тестваме и изпълняваме скриптовете. Първо, трябва да настроим тази примерна база данни, покривайки следните стъпки:

  1. Създайте примерна база данни.
  2. Създайте таблица в примерната база данни.
  3. Вмъкнете данните (два реда) в таблицата на базата данни.

Отворете SQL Server Management Studio или dbForge Studio за SQL Server и изпълнете следния скрипт, за да настроите примерната база данни:

-- 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

Преглед на данните (таблица с книги)

Нека разгледаме наскоро създадената и попълнена таблица в базата данни. Изпълнете следния скрипт:

-- View data (rows) from the table (Book)
SELECT b.BookNumber, b.Title, b.Stock FROM dbo.Book b

Резултатът е:

Можем да видим двата реда на таблицата (книга). В момента това са всички данни в тази таблица.

Изтриване на данните

Както помним, има риск от изтриване на всички редове в таблица, ако забравим да споменем условието/критериите за правилното изтриване.

Винаги използвайте клаузата WHERE с израза Delete, за да избегнете случайна загуба на данни. Единственото изключение трябва да бъде случаят, когато трябва да изтриете всички данни умишлено.

За да премахнете всички данни (редове) от примерната таблица на базата данни, изпълнете следния скрипт:

-- Delete all the data (rows) from the table Book
DELETE FROM dbo.Book

Резултатът е:

Преглед на данните след изтриването

Сега трябва да проверим дали всички редове са изтрити:

-- View data (rows) from the table (Book)
SELECT b.BookNumber, b.Title, b.Stock FROM dbo.Book b

Резултатите са:

По този начин успешно изтрихме всички редове от Книгата маса. За това приложихме израза DELETE без никакви критерии/условия за изтриване.

Вмъкнете данни обратно в таблицата (със същото заглавие)

Можем да вмъкнем данните (редове) обратно в таблицата и след това да приложим оператора DELETE въз основа на някои условия/критерии.

Този път избираме да вмъкнем още редове, но умишлено със същото заглавие:

-- 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

Резултатът е както следва:

Забележка :За да възстановите изтритите или променените данни, можете да използвате специални софтуерни решения. Решението dbForge Transaction Log ви позволява както да възстановите тези данни, така и да видите кой и кога ги е изтрил или променил.

Преглед на данните преди изтриване

За да видите данните, изпълнете следния скрипт:

-- View data (rows) from the table (Book)
SELECT b.BookNumber, b.Title, b.Stock FROM dbo.Book b

Резултатът е:

Резултатът показва, че сме вмъкнали три реда със същото заглавие на книгата по погрешка. Това е проблем. Простото решение е да премахнете ненужните редове, като приложите специфичното условие за премахване на редове с дублиращи се заглавия.

Как да изтриете данни в SQL колона въз основа на условие (номер на книга)

Важно:Може да разгледаме един от следните начини за решаване на този проблем:

  1. Изтриване по номер на книга
  2. Изтриване по заглавие

В моя сценарий избирам да не изтривам по заглавие. Ако изтрием по заглавие, в крайна сметка изтриваме всички редове, съдържащи това заглавие, включително тези, които трябва да запазим. Следователно препоръчителният подход е да премахнете таблицата въз основа на BookNumber колона.

Ако погледнем набора от резултати, лесно можем да разберем, че BookNumber:3 и Номер на книга:4 са дублиращи се редове. По-рано беше обяснено подробно как да премахнете дубликати в SQL. Трябва да ги изтрием, за да поддържаме базата данни последователна.

Отново възникват следните опции:

  1. Изтрийте, където номерът на книгата (Номер на книгата) е по-голям от 2.
  2. Изтрийте, където BookNumber е 3 и 4.

Нека изберем първия вариант. Не забравяйте обаче, че е валидно само ако няма редове след дублиращите се редове, за които знаем.

Изпълнете следния скрипт:

-- Delete all the data (rows) from the table Book where BookNumber is greater than 2
DELETE FROM dbo.Book
WHERE BookNumber>2

Преглед на данните след изтриването

Нека проверим таблицата след изтриване на данните:

-- View data (rows) from the table (Book)
SELECT b.BookNumber, b.Title, b.Stock FROM dbo.Book b

Резултатът е:

Вмъкнете повече данни в таблицата (повече наличност)

За да поставим повече данни (ред), свързани с акциите, използваме следния скрипт:

-- 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

Преглед на данните преди изтриване

Разгледайте таблицата:

-- View data (rows) from the table (Book)
SELECT b.BookNumber, b.Title, b.Stock FROM dbo.Book b

Резултатът е:

Изтриване на данните въз основа на различно условие

Да приемем, че трябва да премахнем изчерпани книги, за да запазим по-точна информация в базата данни. За да направим това, трябва да потърсим тези редове с Stock е 0.

Можем да използваме израза DELETE с условието, базирано на Наличност стойност на колона 0:

-- Delete all the out of stock (Where Stock is 0) books (rows) from the table Book 
DELETE FROM dbo.Book
WHERE Stock=0

Преглед на данните след изтриването

-- View data (rows) from the table (Book)
SELECT b.BookNumber, b.Title, b.Stock FROM dbo.Book b

Вмъкнете повече данни в таблицата (още заглавия и акции)

Добавяме още два реда в таблицата:

-- 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

Преглед на данните преди изтриване

Проверете редовете, преди да изтриете нещо допълнително, въз основа на изискването:

-- View data (rows) from the table (Book)
SELECT b.BookNumber, b.Title, b.Stock FROM dbo.Book b

Резултатът от таблицата е:

Изтрийте данните въз основа на две условия

Този път трябва да изтрием всички книги (редове), където заглавията съдържат думата SQL и те са изчерпани (стойността им е 0).

С други думи, изтриваме всички изчерпани книги, свързани с SQL.

В този случай трябва да посочим повече от едно условие с израза DELETE. Трябва да гарантираме, че изтриваме само изчерпаните книги и само онези книги, които имат думата SQL в заглавието си.

Вижте следния скрипт:

-- 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

Преглед на данните след изтриването

Преглеждаме данните за последен път:

Важен съвет :Преди да изтриете данните, изпълнете оператора SELECT въз основа на същото условие, което ще използвате за изтриване. По този начин гарантирате, че вашите дейности по изтриването ще се прилагат към правилните данни.

Например, първо изпълнете заявката SELECT, за да сте сигурни, че получавате само онези редове, които са предназначени за изтриване:

SELECT * FROM dbo.Book
WHERE Title LIKE '%SQL%' and Stock=0

След като сте уверени, можете да превърнете своя SELECT в израза DELETE:

DELETE FROM dbo.Book
WHERE Title LIKE '%SQL%' and Stock=0

Поздравления!

Усвоихте успешно задачата за премахване (изтриване) на един или повече редове от таблица според изискванията.

Поддържайте връзка за разширени сценарии за изтриване и други професионални съвети относно използването на израза DELETE.

Неща за правене

Сега, когато можете успешно да премахвате редове от таблица, можете да тренирате и подобрявате уменията си допълнително:

  1. Опитайте да премахнете редове, където има само един артикул в наличността.
  2. Изтрийте всички книги, чиито заглавие съдържа думата Структура.
  3. Изтрийте всички книги (редове) с изключение на номера на книга (Номер на книга) 1.

Открийте по-разширени сценарии за SQL оператора DELETE.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Изберете n произволни реда от таблицата на SQL Server

  2. Как да стартирате задача на агент на SQL Server с помощта на T-SQL

  3. Как да генерирате скрипт, за да активирате всички ограничения на външния ключ в базата данни на SQL Server - SQL Server / TSQL Урок, част 78

  4. Как работи функцията NCHAR() в SQL Server (T-SQL)

  5. Разлика между извършено четене и повторяемо четене