Перейти к содержимому

Как удалить строку в mysql

  • автор:

Как удалить строку в mysql

Команда DELETE удаляет данные из БД. Она имеет следующий формальный синтаксис:

DELETE FROM имя_таблицы [WHERE условие_удаления]

Например, удалим строки, у которых производитель — Huawei:

DELETE FROM Products WHERE Manufacturer='Huawei';

Команда DELETE в MySQL

Или удалим все товары, производителем которых является Apple и которые имеют цену меньше 60000:

DELETE FROM Products WHERE Manufacturer='Apple' AND Price < 60000;

Если необходимо вовсе удалить все строки вне зависимости от условия, то условие можно не указывать:

DELETE FROM Products;

MySQL: DELETE удаление записи, TRUNCATE очистка данных таблицы

MySQL-инструкция DELETE удаляет строки из таблицы и возвращает количество удаленных строк. Чтобы проверить количество удаленных строк, необходимо вызвать функцию SELECT ROW_COUNT() . Аналогичная функция Python модуля MySQLdb - Cursor.rowcount .

Синтаксис инструкции DELETE .

-- удаление строк/записей из одной таблицы DELETE [IGNORE] FROM tbl_name [AS tbl_alias] WHERE condition ORDER BY . [ASC|DESC] LIMIT count 
Комментарии к синтаксису DELETE :
  1. Условия в необязательном операторе WHERE определяют, какие строки следует удалить. ВНИМАНИЕ! При отсутствии предложения WHERE будут удалены ВСЕ строки. Условие condition - это выражение, которое принимает значение TRUE для каждой удаляемой строки. Дополнительно смотрите материал "Использование инструкции WHERE в запросах к БД MySQL"
  2. Если указана инструкция ORDER BY , то строки удаляются в указанном порядке. ORDER BY можно применить к удалениям из одной таблицы, но не поддерживает удаления из нескольких таблиц.
  3. Инструкция LIMIT устанавливает ограничение на количество строк, которые могут быть удалены. LIMIT можно применить к удалениям из одной таблицы, но не к удалениям из нескольких таблиц.
  4. Модификатор IGNORE заставляет MySQL игнорировать ошибки во время процесса удаления строк. (Ошибки, возникшие на этапе синтаксического анализа, обрабатываются обычным способом.) Ошибки, которые игнорируются из-за использования IGNORE , возвращаются как предупреждения.

Инструкция TRUNCATE TABLE является более быстрым способом очистки таблицы, чем оператор DELETE без предложения WHERE . В отличие от DELETE , инструкцию TRUNCATE TABLE нельзя использовать внутри транзакции и при блокировке таблицы.

Использование WHERE при удалении записей.

Условия WHERE определяет, какие строки следует удалить, а при его отсутствии будут удалены ВСЕ строки. Условие condition - это выражение, которое принимает значение TRUE для каждой удаляемой строки.

Например стоит задача: удаления записей о продажах за определенное число или очистка старых (ненужных) данных из таблицы sales :

-- удаление старых (ненужных) записей о продажах до '2001-07-09' DELETE FROM sales WHERE date_sales  '2001-07-09'; -- удаления записей о продажах за сегодня DELETE FROM sales WHERE date_sales=NOW(); 

Использование инструкции ORDER BY и LIMIT .

Инструкции ORDER BY и LIMIT можно использовать, если при удалении данных необходимо оставить какое то определенное количество строк новых записей.

-- подсчитываем кол-во строк в таблице `logs` SET @count = SELECT count(id) FROM logs; -- удаляем все, кроме 500 последних добавленных строк DELETE FROM logs WHERE @count > 500 ORDER BY id ASC LIMIT @count - 500; 

Или, наверное, можно так (не проверяли):

-- оставит последние 500 строк, если журнал -- таблицы `logs` не превышает 10000000 записей DELETE FROM logs ORDER BY id DESC LIMIT 500, 10000000; 

Более подробно об использование инструкций ORDER BY и LIMIT смотрите в материале "Составление запросов SELECT к БД MySQL"

Удаление записей из нескольких таблиц.

Удаление информации - вещь ответственная. Неправильно поставленный запрос может обернуться потерей критических данных. Рекомендуем редко пользоваться запросами DELETE из нескольких таблиц. Если такой запрос необходим в целях оптимизации производительности, сначала постройте подобный запрос с использованием инструкции SELECT , а потом просто замените SELECT на DELETE , а также уберите из запроса извлекаемые столбцы.

-- проверочный запрос `SELECT` SELECT tbl_a.col, tbl_b.col FROM tbl_a , tbl_b USING tbl_a.id = tbl_b.id WHERE condition -- если проверочный запрос выдал -- те строки, которые необходимо удалить, -- то переделываем его на `DELETE` DELETE FROM tbl_a , tbl_b USING tbl_a.id = tbl_b.id WHERE condition 

TRUNCATE TABLE полная очистка таблицы MySQL.

Пример очистки таблицы animals от всех записей:

TRUNCATE TABLE animals 

Хотя TRUNCATE TABLE похож на инструкцию DELETE , он отличается следующим:

  • Операции TRUNCATE удаляют и заново создают таблицу, что намного быстрее, чем удаление строк по одной, особенно для больших таблиц.
  • Операции TRUNCATE вызывают неявную фиксацию, поэтому их нельзя откатить.
  • Операции TRUNCATE не могут быть выполнены, если сеанс удерживает активную блокировку таблицы.
  • TRUNCATE TABLE терпит неудачу для таблицы InnoDB, если есть какие-либо ограничения FOREIGN KEY из других таблиц, которые ссылаются на таблицу. Допускаются ограничения внешнего ключа между столбцами одной и той же таблицы.
  • Операции TRUNCATE не возвращают значимого значения количества удаленных строк. Обычный результат - "0 rows affected", что следует интерпретировать как "нет информации".
  • Любое значение AUTO_INCREMENT сбрасывается до своего начального значения. Это верно даже для MyISAM и InnoDB, которые обычно не используют повторно значения последовательности.
  • Оператор TRUNCATE TABLE не вызывает триггеры ON DELETE , установленные для внешнего ключа FOREIGN KEY .
  • КРАТКИЙ ОБЗОР МАТЕРИАЛА.
  • Функция connect() модуля MySQLdb
  • Методы объекта Cursor модуля MySQLdb
  • Исключения, определяемые модулем MySQLdb
  • Реализация интерфейса MySQL C API в модуле MySQLdb Python
  • Подмодуль times модуля MySQLdb
  • Подмодуль converters модуля MySQLdb
  • MySQL: Типы хранимых данных
  • MySQL: CONVERT() и CAST(), преобразование типов
  • MySQL: Неявные преобразования типов в вычислениях
  • MySQL: Функции для работы со строками
  • MySQL: Функции для работы с датой и временем
  • MySQL: Временные интервалы и арифметика с датами
  • MySQL: Математические функции
  • MySQL: Агрегатные (групповые) функций
  • MySQL: SELECT cоставление запросов
  • MySQL: CASE и IF() в запросах SELECT
  • MySQL: Поиск по шаблону, LIKE в запросах SELECT
  • MySQL: Поиск по регулярному выражению
  • MySQL: Использование WHERE в запросах
  • MySQL: Использование GROUP BY и HAVING
  • MySQL: LEFT JOIN и INNER JOIN объединение таблиц
  • MySQL: UNION объединение запросов
  • MySQL: UPDATE обновление данных таблицы
  • MySQL: INSERT/REPLACE добавление данных в таблицу
  • MySQL: DELETE/TRUNCATE удаление записи/очистка данных таблицы
  • MySQL: CREATE TABLE создание таблиц
  • Импорт CSV-файла в MySQL таблицу, экспорт данных в CSV
  • MySQL: ALTER TABLE изменение таблицы
  • MySQL: Хранимые процедуры и функции
  • MySQL: События EVENT и планировщик событий
  • MySQL: CREATE/ALTER USER и права GRANT/ROLE
  • MySQL: Сброс пароля root на ОС Linux/Windows
  • Логирование ВСЕХ и/или МЕДЛЕННЫХ запросов к БД MYSQL
  • Кэширование запросов на MySQL-сервере
  • Как конвертировать БД MySQL в требуемую кодировку

10) УДАЛИТЬ

Команда MySQL DELETE используется для удаления строк, которые больше не требуются из таблиц базы данных. Он удаляет всю строку из таблицы и возвращает количество удаленных строк. Команда Delete пригодится для удаления временных или устаревших данных из вашей базы данных.

Запрос на удаление в MySQL может удалить более одной строки из таблицы в одном запросе. Это оказывается преимуществом при удалении большого количества строк из таблицы базы данных.

После удаления строки в строке MySQL ее невозможно восстановить. Поэтому настоятельно рекомендуется сделать резервные копии базы данных перед удалением любых данных из базы данных. Это может позволить вам восстановить базу данных и просмотреть данные позже, если это потребуется.

Как удалить строку в MySQL

Чтобы удалить строки в таблице MySQL, используйте оператор DELETE FROM:

DELETE FROM `table_name` [WHERE condition];
  • DELETE FROM `table_name` указывает серверу MySQL удалить строки из таблицы.
  • [Условие WHERE] является необязательным и используется для установки фильтра, который ограничивает количество строк, затронутых запросом DELETE.

Если предложение WHERE не используется в запросе DELETE MySQL, все строки в данной таблице будут удалены.

Пример MySQL Delete Query

Прежде чем перейти к более подробному обсуждению команды DELETE, давайте вставим примеры данных в таблицу фильмов для работы с ними.

INSERT INTO `movies` (`title`, `director`, `year_released`, `category_id`) VALUES ('The Great Dictator', 'Chalie Chaplie', 1920, 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_iditledirectoryear_releasedcategory_id
1Pirates of the Caribean 4Rob Marshall20111
2Forgetting Sarah MarshalNicholas Stoller20082
3X-MenNULL2008NULL
4Code Name BlackEdgar Jimz2010NULL
5Daddy's Little GirlsNULL20078
6Angels and DemonsNULL20076
7Davinci CodeNULL20076
9Honey moonersJohn Schultz20058
1667% GuiltyNULL2012NULL
18The Great DictatorChalie Chaplie19207
19sample movieAnonymousNULL8
20movie 3John Brown19208

Предположим, что видеотека Myflix больше не хочет сдавать в аренду «Великого диктатора» своим членам, и они хотят, чтобы он был удален из базы данных. Идентификатор фильма – 18, мы можем использовать скрипт, показанный ниже, чтобы удалить его строку из таблицы фильмов.

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

Выполнение вышеупомянутого сценария в MySQL WorkBench против Myflix удаляет фильм с идентификатором 18 из таблицы базы данных.

Давайте посмотрим текущее состояние таблицы фильмов.

SELECT * FROM `movies`;
movie_idtitledirectoryear_releasedcategory_id
1Pirates of the Caribean 4Rob Marshall20111
2Forgetting Sarah MarshalNicholas Stoller20082
3X-MenNULL2008NULL
4Code Name BlackEdgar Jimz2010NULL
5Daddy's Little GirlsNULL20078
6Angels and DemonsNULL20076
7Davinci CodeNULL20076
9Honey moonersJohn Schultz20058
1667% GuiltyNULL2012NULL
19sample movieAnonymousNULL8
20movie 3John Brown19208
  • фильм с идентификатором 18 не был возвращен в наборе результатов запроса.
  • Вы не можете удалить один столбец для таблицы. Вы можете удалить всю строку.

Допустим, у нас есть список фильмов, которые мы хотим удалить. Мы можем использовать предложение WHERE вместе с IN.

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

Выполнение вышеуказанного сценария удаляет фильмы с идентификаторами 20 и 21 из нашей таблицы фильмов.

Резюме

  • Команда delete используется для удаления данных, которые больше не требуются из таблицы.
  • «Предложение WHERE» используется для ограничения количества строк, затронутых запросом DELETE.
  • После того, как данные были удалены, их невозможно восстановить, поэтому настоятельно рекомендуем сделать резервные копии перед удалением данных.

Команда SQL для удаления и обновление данных в базе (DELETE, UPDATE)

В базу данных можно не только добавлять данные, но и удалять их оттуда. Ещё существует возможность обновить данные в базе. Рассмотрим оба случая.

Удаление данных из базы (DELETE)

Удаление из базы данных происходит с помощью команды "DELETE" (переводится с английского как "УДАЛИТЬ"). Функция удаляет не одну строку, а несколько, при этом выбирает для удаления строки по логике функции "SELECT". То есть чтобы удалить данные из базы, необходимо точно определить их. Приведём пример SQL команды для удаления одной строчки:

DELETE FROM `USERS` WHERE `ID` = 2 LIMIT 1;

Благодаря этому запросу из таблицы "USERS" будет удалена одна запись, у которой в столбце "ID" стоит значение "2".

Обратите внимание, что в конце запроса стоит лимит на выборку "LIMIT 1;" размером в 1 строку. Его можно было не ставить, если поле "ID" является "PRIMARY KEY" (первичный ключ, то есть содержит только уникальные значения). Но всё-таки рекомендуем ставить ограничение "LIMIT 1;" в любом случае, если вы намерены удалить только одну строчку.

Теперь попробуем удалить сразу диапазон данных. Для этого достаточно составить запрос, в результате выполнения которого вернётся несколько строк. Все эти строки будут удалены:

DELETE FROM `USERS` WHERE `ID` >= 5;

Этот запрос удалит все строки в таблицы, у которых в столбце "ID" стоит значение меньше 5. Если не поставить никакого условия "WHERE" и лимита "LIMIT", то будут удалены абсолютно все строки в таблице:

DELETE FROM `USERS`;

На некоторых версиях MySQL способ удаления всех строк через "DELETE FROM _;" может работать медленнее, чем "TRUNCATE _;"; Поэтому для очистки всей таблицы лучше всё-таки использовать "TRUNCATE".

Обновление данных в базе (UPDATE)

Функция обновления "UPDATE" (переводится с английского как "ОБНОВИТЬ") довольно часто используется в проектах сайтов. Как и в случае с функцией "DELETE", фкнция обновления не успокоится до тех пор, пока не обновит все поля, которые подходят под условия, если нет лимита на выборку. Поэтому необходимо задавать однозначные условия, чтобы вместо одной строки нечаянно не обновить половину таблицы. Приведём пример использования команды "UPDATE":

UPDATE `USERS` SET `NAME` = 'Мышь' WHERE `ID` = 3 LIMIT 1;

В этом примере, в таблие "USERS" будет установлено значение "Мышь" в столбец "NAME" у строки, в столбце "ID" которой стоит значение "3". Можно обновить сразу несколько столбцов у одной записи, передав значения через запятую. Попробуем обновить не только значение с толбце "NAME", но и значение в столбце "FOOD" используя один запрос:

UPDATE `USERS` SET `NAME` = 'Мышь', `FOOD` = 'Сыр' WHERE `ID` = 3 LIMIT 1;

Если не поставить никаких лимитов LIMIT и условий WHERE, то все записи таблицы будут обновлены без исключений.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *