MySQL DELETE Query: Как да изтриете ред от таблица

⚡ Умно обобщение

MySQL Заявката DELETE премахва ненужни редове от таблица и връща броя на засегнатите редове. Този ресурс обяснява синтаксиса на DELETE, филтрирането WHERE, изтриването на няколко реда с IN и по-безопасните алтернативи TRUNCATE и DROP.

  • 🗑️ Основно твърдение: DELETE FROM `table_name` [WHERE условие] премахва цели редове и връща броя на изтритите редове.
  • ⚠️ Пропуснато КЪДЕ: Пропускането на клаузата WHERE изтрива всеки ред в таблицата, така че винаги филтрирайте преди изпълнение.
  • 🎯 TargetПремахване на: WHERE `movie_id` = 18 премахва един запис, докато WHERE `movie_id` IN (20,21) премахва няколко с едно изречение.
  • 🔁 Необратимо действие: Изтритите данни не могат да бъдат възстановени без резервно копие, затова направете резервно копие на базата данни, преди да изпълните DELETE.
  • 📊 Обхват на ниво ред: DELETE премахва само цели редове; изчистването на стойност на една колона изисква UPDATE с NULL.
  • ИЗТРИВАНЕ срещу ОТРЕЖАВАНЕ срещу ПРЕМАХВАНЕ: DELETE филтрира редове, TRUNCATE изпразва таблицата мигновено, а DROP премахва самата структура на таблицата.

Какво представлява заявката за ИЗТРИВАНЕ?

- MySQL ИЗТРИЙ Операторът DELETE се използва за премахване на редове, които вече не са необходими от таблицата в базата данни. Той изтрива целия ред от таблицата и връща броя на изтритите редове. Операторът DELETE е полезен, когато трябва да изчистите временни или остарели данни от вашата база данни.

Заявката за изтриване в MySQL може да премахне повече от един ред от таблица с едно изпълнение. Това се оказва предимство, когато премахвате голям брой редове от таблица в база данни.

След като даден ред бъде изтрит, той не може да бъде възстановен. Винаги правете резервно копие на базата данни, преди да изтриете данни, за да може тя да бъде възстановена и прегледана по-късно, ако е необходимо.

Как да изтриете ред в MySQL

След като целта на оператора е ясна, следващата стъпка е синтаксисът. За да изтриете ред в MySQL, изразът DELETE FROM се използва:

DELETE FROM `table_name` [WHERE condition];

ТУК:

  • ИЗТРИВАНЕ ОТ `table_name` казва на MySQL сървърът да премахне редове от посочената таблица.
  • [Условие WHERE] е незадължителен и се използва за прилагане на филтър, който ограничава броя на редовете, засегнати от заявката DELETE.

Ако WHERE клауза не се използва в MySQL ИЗТРИВАНЕ на заявка, след това all редовете в дадена таблица ще бъдат изтрити.

⚠️ Предупреждение: Първо изпълнете филтъра като SELECT. Ако върне точно редовете, които искате да премахнете, съответстващото DELETE е безопасно. Пълният синтаксис е документиран в MySQL Ръководство за изтриване на оператор.

Пример за MySQL Изтриване на заявка

Следващият раздел изгражда малък набор от данни и след това изтрива елементи от него.

Стъпка 1: Вмъкване на примерни данни

Преди да разгледаме по-подробно SQL командата DELETE, нека вмъкнем някои примерни данни в таблицата movies, с които да работим.

INSERT INTO `movies` (`title`, `director`, `year_released`, `category_id`) VALUES ('The Great Dictator', 'Charlie Chaplin', 1940, 7);
INSERT INTO `movies` (`title`, `director`, `category_id`) VALUES ('sample movie', 'Anonymous', 8);
INSERT INTO `movies` (`title`, `director`, `year_released`, `category_id`) VALUES ('movie 3', 'John Brown', 1920, 8);

Изпълнението на горния скрипт добавя три (3) филма към таблицата с филми. Преди да продължим, нека изброим всички филми в нашата таблица.

SELECT * FROM `movies`;

Изпълнението на горния скрипт ни дава следните резултати. Трите нововмъкнати реда са маркирани.

movie_id заглавие директор year_released категория_id
1 Карибски пирати 4 Rob Marshall 2011 1
2 Забравяйки Сара Маршал Николас Столер 2008 2
3 X-Men NULL 2008 NULL
4 Code Име Черно Едгар Джимз 2010 NULL
5 Малките момичета на татко NULL 2007 8
6 Ангели и демони NULL 2007 6
7 Да Винчи Code NULL 2007 6
9 Honey moonERS Джон Шулц 2005 8
16 67% виновен NULL 2012 NULL
18 Великият диктатор Чарли Чаплин 1940 7
19 примерен филм анонимен NULL 8
20 филм 3 Джон Браун 1920 8

Стъпка 2: Изтриване на един ред

Да предположим, че видеотеката на Myflix вече не желае да отдава под наем „Великият диктатор“ и иска той да бъде премахнат от базата данни. Идентификаторът на филма е 18, така че скриптът по-долу изтрива този ред.

DELETE FROM `movies` WHERE `movie_id` = 18;

Изпълнение на горния скрипт в MySQL Работна маса Сравняването с базата данни на Myflix изтрива филма с идентификатор 18 от таблицата.

Нека сега проверим текущото състояние на таблицата с филми.

SELECT * FROM `movies`;
movie_id заглавие директор year_released категория_id
1 Карибски пирати 4 Rob Marshall 2011 1
2 Забравяйки Сара Маршал Николас Столер 2008 2
3 X-Men NULL 2008 NULL
4 Code Име Черно Едгар Джимз 2010 NULL
5 Малките момичета на татко NULL 2007 8
6 Ангели и демони NULL 2007 6
7 Да Винчи Code NULL 2007 6
9 Honey moonERS Джон Шулц 2005 8
16 67% виновен NULL 2012 NULL
19 примерен филм анонимен NULL 8
20 филм 3 Джон Браун 1920 8

ЗАБЕЛЕЖКА:

  • Филмът с идентификатор 18 вече не се връща в набора от резултати от заявката.
  • Не можете да изтриете една колона от таблица с DELETE. Операторът премахва цял ред. За да изчистите едно поле, използвайте АКТУАЛИЗИРАНЕ на заявката което задава колоната на NULL.

Стъпка 3: Изтриване на няколко реда с IN

Да кажем, че имаме списък с филми, които искаме да изтрием. Вместо да изпълняваме по един оператор на ред, можем да комбинираме клаузата WHERE с оператора IN.

DELETE FROM `movies` WHERE `movie_id` IN (20,21);

Изпълнението на горния скрипт изтрива филмите с идентификатори 20 и 21 от нашата таблица с филми наведнъж.

ИЗТРИВАНЕ срещу ОТРЕЖАВАНЕ срещу ВКЛЮЧВАНЕ MySQL

ИЗТРИВАНЕТО не е единственият начин за премахване на данни от MySQLНачинаещите често посягат към него, когато по-бърза команда би им подхождала по-добре, така че таблицата по-долу сравнява трите команди за премахване.

Особеност ИЗТРИЙ ПРЕКРАТЕТЕ Капка
Тип команда ГСД DDL DDL
WHERE клауза Подкрепа Не се поддържа Не се поддържа
Какво се премахва Избрани редове Всички редове Редове и структура на таблицата
общо намаление на цените Възможно е в рамките на транзакция Не е възможно (имплицитен коммит) Не е възможно (имплицитен коммит)
АВТОМАТИЧНО УВЕЛИЧАВАНЕ Броячът се запазва Броячът се нулира до началната стойност Броячът се отстранява заедно с масата
Скорост на големи маси Бавно (ред по ред) Много бързо Много бързо

Използвайте DELETE, когато ви е необходим филтър или възможност за връщане назад. Използвайте ТРАНСКАТА МАСА когато искате бързо да изпразните таблица и да нулирате нейния брояч AUTO_INCREMENT. Използвайте DROP само когато самата таблица вече не е необходима, защото това премахва дефиницията заедно с данните.

Въпроси и Отговори

Само в рамките на отворена транзакция. Изпълнете START TRANSACTION, DELETE, след това ROLLBACK, за да я отмените. След COMMIT или с активиран autocommit, редовете изчезват и само резервно копие може да ги възстанови.

Използвайте DELETE за множество таблици с ПРИСЪЕДИНЕТЕ СЕ КЪМ, като именувате и двете таблици преди ключовата дума FROM. Като алтернатива, дефинирайте външния ключ с ON DELETE CASCADE, така че дъщерните редове да се премахват автоматично, когато родителският ред бъде изтрит.

Режимът на безопасно актуализиране е активиран по подразбиране в MySQL WorkbenchОтхвърля всяко DELETE, чиято клауза WHERE не използва ключова колона, предотвратявайки случайно изтриване на цяла таблица. Деактивирайте го в Edit > Preferences > SQL Editor.

Да. Асистентите с изкуствен интелект превеждат заявка на обикновен английски език в синтаксис DELETE и могат да обяснят клаузата WHERE. Винаги първо проверявайте генерирания филтър спрямо SELECT, защото моделът с изкуствен интелект не може да вижда вашите данни на живо.

Не. Нека ИИ изготви черновата на оператора, но първо го изпълнете сами върху резервно копие или временна копия. Липсваща клауза WHERE изтрива всеки ред и никой ИИ инструмент не може да отмени това, след като транзакцията е извършена.

Обобщете тази публикация с: