Как удалить строчку в sql
Оператор 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 .
Sysadminium
Разберём команды SQL, которые помогут вам создать базу данных, создать в ней таблицу. Во-вторых научимся работать с этой таблицей.
Создание базы данных
Чтобы создать базу данных используется команда CREATE DATABASE <имя базы данных>. Например:
Все остальные примеры будем выполнять в ней, поэтому сразу переключимся на эту базу:
Создание таблицы
Основной элемент из которого состоит реляционная база данных – это таблицы. Для создания таблицы используется команда CREATE TABLE <имя таблицы> (<имя колонки> <тип колонки>, <имя колонки> <тип колонки>, …). Например создадим таблицу users для хранения списка пользователей, которых мы обслуживаем. В эту таблицу будем заносить ФИО пользователя, название его компании, его номер телефона и электронную почту:
Типы данных, которые можно применять, рассмотрю позже.
Наполнение таблицы строками
Строки вставляются в таблицу с помощью команды SQL INSERT INTO <имя таблицы> (перечисляем поля)
VALUES (перечисляем значения). При этом можно вставлять по одной строке или по несколько. Вставим три строки в нашу таблицу users:
Как видно из примера выше, мы вначале определяем порядок колонок (fio, company, phone, email), а затем в этом порядке вставляем значения.
При вставке строковых значений, строка всегда берётся в одинарные кавычки.
Просмотр таблицы
Посмотреть на созданную таблицу можно с помощью команды SELECT * FROM <название таблицы>. Например:
Можно вывести определённые колонки указав их вместо звездочки:
Можно вывести определённые строки с помощью WHERE <условие>:
В качестве условия можем указать, что значение в определённой колонке должно:
- чему-то равняется;
- быть больше или меньше определённого значения;
- содержать что-то;
- и другое.
Можем комбинировать эти методы, например:
А ещё можем отсортировать таблицу по какой-нибудь строке:
Условий может быть несколько, например ФИО должно содержать Иван, а телефон должен заканчиваться на 94:
” – означает что значение должно содержать, а не равняться.
Также в примере выше я показал, что в условии можно использовать регулярные выражения.
Комбинировать условия можно с помощью AND и OR.
Изменение строк
Строки в SQL таблице можно обновить, или другими словами изменить. Изменяют строки с помощью команды UPDATE <имя таблицы> SET <колонка = значение> WHERE <условие>. Например изменим номер телефона Иванову Ивану Алексеевичу:
Если не указать условие, то обновятся все строки:
Удаление строк
Для удаления строк используют команду DELETE FROM <имя таблицы> WHERE <условие>. Например:
Если не указать блок WHERE, то удалятся все строки! Но очищать таблицу лучше другой командой.
Очистка таблицы
Очистка таблицы осуществляется с помощью команды TRUNCATE <имя таблицы>. Например:
Удаление таблицы
Для удаления используем команду DROP TABLE <имя таблицы>. Например:
Удаление базы данных
А чтобы удалить базу данных выполняем DROP DATABASE <имя базы данных>. Но предварительно нужно отключиться от удаляемой базы:
Удаление строк из таблицы в SQL
Примечания:
• CURRENT OF применяется для встроенного SQL.
• Предикат может включать запросы и запросы с подзапросами.
Примеры со значениями:
• DELETE FROM SalesPeople
• DELETE FROM SalesPeople WHERE SNum=1003
Примеры с запросом (с подзапросом):
• DELETE FROM SalesPeople WHERE SNum IN (SELECT SNum FROM Orders A WHERE Amt=(SELECT MIN(Amt) FROM Orders B WHERE A.ODate=B.ODate))
//возвращает наименьший ежедневный заказ и удаляет по номеру продавца, оформившего его.
Особенности DELETE в SQL SERVER:
• DELETE [TOP (<>) [PERCENT]] – задает количество или процент удаляемых строк. Обычно используется с запросом в курсоре или при отсутствии раздела WHERE.
• … [OPTION ( [,…])] – позволяет указать подсказки для оптимизатора при выполнении запроса в курсоре.
Примеры DELETE в SQL SERVER:
• DELETE TOP (2.5) PERCENT FROM Orders
DELETE
For the single-table syntax, the DELETE statement deletes rows from tbl_name and returns a count of the number of deleted rows. This count can be obtained by calling the ROW_COUNT() function. The WHERE clause, if given, specifies the conditions that identify which rows to delete. With no WHERE clause, all rows are deleted. If the ORDER BY clause is specified, the rows are deleted in the order that is specified. The LIMIT clause places a limit on the number of rows that can be deleted.
For the multiple-table syntax, DELETE deletes from each tbl_name the rows that satisfy the conditions. In this case, ORDER BY and LIMIT> cannot be used. A DELETE can also reference tables which are located in different databases; see Identifier Qualifiers for the syntax.
where_condition is an expression that evaluates to true for each row to be deleted. It is specified as described in SELECT.
Currently, you cannot delete from a table and select from the same table in a subquery.
You need the DELETE privilege on a table to delete rows from it. You need only the SELECT privilege for any columns that are only read, such as those named in the WHERE clause. See GRANT.
As stated, a DELETE statement with no WHERE clause deletes all rows. A faster way to do this, when you do not need to know the number of deleted rows, is to use TRUNCATE TABLE . However, within a transaction or if you have a lock on the table, TRUNCATE TABLE cannot be used whereas DELETE can. See TRUNCATE TABLE, and LOCK.
PARTITION
FOR PORTION OF
MariaDB starting with 10.4.3
RETURNING
It is possible to return a resultset of the deleted rows for a single table to the client by using the syntax DELETE . RETURNING select_expr [, select_expr2 . ]]
Any of SQL expression that can be calculated from a single row fields is allowed. Subqueries are allowed. The AS keyword is allowed, so it is possible to use aliases.
The use of aggregate functions is not allowed. RETURNING cannot be used in multi-table DELETEs.
MariaDB starting with 10.3.1
Same Source and Target Table
Until MariaDB 10.3.1, deleting from a table with the same source and target was not possible. From MariaDB 10.3.1, this is now possible. For example:
MariaDB starting with 10.3.4
DELETE HISTORY
One can use DELETE HISTORY to delete historical information from System-versioned tables.
Examples
How to use the ORDER BY and LIMIT clauses:
How to use the RETURNING clause:
The following statement joins two tables: one is only used to satisfy a WHERE condition, but no row is deleted from it; rows from the other table are deleted, instead.