MySQL DELETE Statement
The DELETE statement is used to delete existing records in a table.
DELETE Syntax
Note: Be careful when deleting records in a table! Notice the WHERE clause in the DELETE statement. The WHERE clause specifies which record(s) should be deleted. If you omit the WHERE clause, all records in the table will be deleted!
Demo Database
Below is a selection from the «Customers» table in the Northwind sample database:
SQL DELETE Example
The following SQL statement deletes the customer «Alfreds Futterkiste» from the «Customers» table:
Example
The «Customers» table will now look like this:
| CustomerID | CustomerName | ContactName | Address | City | PostalCode | Country |
|---|---|---|---|---|---|---|
| 2 | Ana Trujillo Emparedados y helados | Ana Trujillo | Avda. de la Constitución 2222 | México D.F. | 05021 | Mexico |
| 3 | Antonio Moreno Taquería | Antonio Moreno | Mataderos 2312 | México D.F. | 05023 | Mexico |
| 4 |
Delete All Records
It is possible to delete all rows in a table without deleting the table. This means that the table structure, attributes, and indexes will be intact:
The following SQL statement deletes all rows in the "Customers" table, without deleting the table:
Deleting a row in MySQL
I’m trying to delete the Row where NACHRICHT_ID = 3 :
But it isn’t working. What am I doing wrong?
6 Answers 6
Your question is unclear.
You have 3 tables:
- NACHRICHTEN = News Items
- NACHRICHTEN_EMPFAENGER_MAP = News Items to Recipients Map
- EMPFAENGER (I am guessing the name) = Recipients
Do you want to delete the news item? Then do this:
If you want to delete the mapping between the news item with id 3 and the recipient with id 31, then do this:
If you want to delete the actual recipient with id 31 then do this (assuming the table is called EMPFAENGER)
If you want to do something else, ask the question with more details please.
A join is an operation that creates a temporary table based on data from several other tables and retrieves values from this temporary table, then discards it (this is the concept, not the actual implementation).
So deleting «from» or «after a join» is an idea that does not make much sense. But if I unterstand correctly, you just want to delete the message (Nachricht). You should just delete this message from the message table, as was shown in the other answers.
After that, if you do your SELECT * FROM . JOIN . , you’ll see that the message is not there in the join result either.
Как удалить строку в mysql
Оператор DELETE удаляет из таблицы table_name строки, удовлетворяющие заданным в where_definition условиям, и возвращает число удаленных записей.
Если оператор DELETE запускается без определения WHERE , то удаляются все строки. При работе в режиме AUTOCOMMIT это будет аналогично использованию оператора TRUNCATE . See section 6.4.7 Синтаксис оператора TRUNCATE . В MySQL 3.23 оператор DELETE без определения WHERE возвратит ноль как число удаленных записей.
Если действительно необходимо знать число удаленных записей при удалении всех строк, и если допустимы потери в скорости, то можно использовать команду DELETE в следующей форме:
Следует учитывать, что эта форма работает намного медленнее, чем DELETE FROM table_name без выражения WHERE , поскольку строки удаляются поочередно по одной.
Если указано ключевое слово LOW_PRIORITY , выполнение данной команды DELETE будет задержано до тех пор, пока другие клиенты не завершат чтение этой таблицы.
Если задан параметр QUICK , то обработчик таблицы при выполнении удаления не будет объединять индексы — в некоторых случаях это может ускорить данную операцию.
В таблицах MyISAM удаленные записи сохраняются в связанном списке, а последующие операции INSERT повторно используют места, где располагались удаленные записи. Чтобы возвратить неиспользуемое пространство и уменьшить размер файлов, можно применить команду OPTIMIZE TABLE или утилиту myisamchk для реорганизации таблиц. Команда OPTIMIZE TABLE проще, но утилита myisamchk работает быстрее. See section 4.5.1 Синтаксис команды OPTIMIZE TABLE . See section 4.4.6.10 Оптимизация таблиц.
Первый из числа приведенных в начале данного раздела многотабличный формат команды DELETE поддерживается, начиная с MySQL 4.0.0. Второй многотабличный формат поддерживается, начиная с MySQL 4.0.2.
Идея заключается в том, что удаляются только совпадающие строки из таблиц, перечисленных перед выражениями FROM или USING . Это позволяет удалять единовременно строки из нескольких таблиц, а также использовать для поиска дополнительные таблицы.
Символы .* после имен таблиц требуются только для совместимости с Access:
В предыдущем случае просто удалены совпадающие строки из таблиц t1 и t2 .
Выражение ORDER BY и использование нескольких таблиц в команде DELETE поддерживается в MySQL 4.0.
Если применяется выражение ORDER BY , то строки будут удалены в указанном порядке. В действительности это выражение полезно только в сочетании с LIMIT . Например:
Данный оператор удалит самую старую запись (по timestamp ), в которой строка соответствует указанной в выражении WHERE .
Специфическая для MySQL опция LIMIT для команды DELETE указывает серверу максимальное количество строк, которые следует удалить до возврата управления клиенту. Эта опция может использоваться для гарантии того, что данная команда DELETE не потребует слишком много времени для выполнения. Можно просто повторять команду DELETE до тех пор, пока количество удаленных строк меньше, чем величина LIMIT .
10) УДАЛИТЬ
Команда MySQL DELETE используется для удаления строк, которые больше не требуются из таблиц базы данных. Он удаляет всю строку из таблицы и возвращает количество удаленных строк. Команда Delete пригодится для удаления временных или устаревших данных из вашей базы данных.
Запрос на удаление в MySQL может удалить более одной строки из таблицы в одном запросе. Это оказывается преимуществом при удалении большого количества строк из таблицы базы данных.
После удаления строки в строке MySQL ее невозможно восстановить. Поэтому настоятельно рекомендуется сделать резервные копии базы данных перед удалением любых данных из базы данных. Это может позволить вам восстановить базу данных и просмотреть данные позже, если это потребуется.
Как удалить строку в MySQL
Чтобы удалить строки в таблице MySQL, используйте оператор DELETE FROM:
- DELETE FROM `table_name` указывает серверу MySQL удалить строки из таблицы.
- [Условие WHERE] является необязательным и используется для установки фильтра, который ограничивает количество строк, затронутых запросом DELETE.
Если предложение WHERE не используется в запросе DELETE MySQL, все строки в данной таблице будут удалены.
Пример MySQL Delete Query
Прежде чем перейти к более подробному обсуждению команды DELETE, давайте вставим примеры данных в таблицу фильмов для работы с ними.
Выполнение вышеуказанного сценария добавляет три (3) фильма в таблицу фильмов. Прежде чем мы продолжим наш урок, давайте рассмотрим все фильмы в нашем столе. Сценарий, показанный ниже, делает это.
Выполнение вышеуказанного скрипта дает нам следующие результаты.
Предположим, что видеотека Myflix больше не хочет сдавать в аренду «Великого диктатора» своим членам, и они хотят, чтобы он был удален из базы данных. Идентификатор фильма – 18, мы можем использовать скрипт, показанный ниже, чтобы удалить его строку из таблицы фильмов.
Выполнение вышеупомянутого сценария в MySQL WorkBench против Myflix удаляет фильм с идентификатором 18 из таблицы базы данных.
Давайте посмотрим текущее состояние таблицы фильмов.
- фильм с идентификатором 18 не был возвращен в наборе результатов запроса.
- Вы не можете удалить один столбец для таблицы. Вы можете удалить всю строку.
Допустим, у нас есть список фильмов, которые мы хотим удалить. Мы можем использовать предложение WHERE вместе с IN.
Выполнение вышеуказанного сценария удаляет фильмы с идентификаторами 20 и 21 из нашей таблицы фильмов.