Как удалить строку в sqlite
Запрос DELETE используется для удаления существующих записей из таблицы. Вы можете использовать WHERE с запросом DELETE для удаления выбранных рядов, иначе все записи будут удалены.
Базовый синтаксис следующий:
DELETE FROM table_name WHERE [condition];
Вы можете комбинировать условия используя операторы AND или OR.
Рассмотрим таблицу COMPANY со следующими записями:
ID NAME AGE ADDRESS SALARY
1 Paul 32 California 20000.0
2 Allen 25 Texas 15000.0
3 Teddy 23 Norway 20000.0
4 Mark 25 Rich-Mond 65000.0
5 David 27 Texas 85000.0
6 Kim 22 South-Hall 45000.0
7 James 24 Houston 10000.0
Далее пример, который удаляет пользователя с ID 7:
sqlite> DELETE FROM COMPANY WHERE >
Теперь таблица COMPANY будет иметь следующие записи:
ID NAME AGE ADDRESS SALARY
1 Paul 32 California 20000.0
2 Allen 25 Texas 15000.0
3 Teddy 23 Norway 20000.0
4 Mark 25 Rich-Mond 65000.0
5 David 27 Texas 85000.0
6 Kim 22 South-Hall 45000.0
Если вы хотите удалить все записи из таблицы COMPANY, вам нет необходимости использовать условие WHERE с запросом DELETE:
DELETE
Команда DELETE удаляет записи из таблицы, идентифицированной квалифицированным именем таблицы .
Если предложение WHERE отсутствует, все записи в таблице удаляются. Если указано предложение WHERE , то удаляются только те строки, для которых логическое выражение предложения WHERE истинно. Строки, для которых выражение ложно или NULL, сохраняются.
2.Ограничения на утверждения DELETE внутри CREATE TRIGGER
Следующие ограничения применяются к операторам DELETE, которые встречаются в теле оператора CREATE TRIGGER :
Название таблицы,указанное как часть заявления об УДАЛЕНИИ внутри тела триггера,должно быть безоговорочным.Другими словами, schema-name . префикс в имени таблицы не допускается в триггерах. Если таблица, к которой привязан триггер, отсутствует во временной базе данных, то операторы DELETE в теле триггера должны работать с таблицами в той же базе данных, что и он. Если таблица, к которой прикреплен триггер, находится в базе данных TEMP, то неквалифицированное имя удаляемой таблицы разрешается таким же образом, как и для оператора верхнего уровня (путем поиска сначала в базе данных TEMP, а затем в основном база данных, затем любые другие базы данных в том порядке, в котором они были прикреплены).
Оговорки,ЗАПИСАННЫЕ и НЕ ЗАПИСАННЫЕ,не допускаются к заявлениям об УДАЛЕНИИ в триггерах.
Оговорки LIMIT и ORDER BY (описанные ниже)не поддерживаются для заявлений об УДАЛЕНИИ внутри триггеров.
Предложение RETURNING не поддерживается для триггеров.
3.Необязательные пункты LIMIT и ORDER BY
Если SQLite компилируется с параметром времени компиляции SQLITE_ENABLE_UPDATE_DELETE_LIMIT , то синтаксис оператора DELETE расширяется за счет добавления необязательных предложений ORDER BY и LIMIT:
Если оператор DELETE имеет выражение LIMIT,максимальное количество строк,которые будут удалены,будет найдено путем вычисления сопровождающего выражения и приведения его к целому значению.Если результат вычисления выражения LIMIT не может быть без потерь преобразован в целое значение,это является ошибкой.Отрицательное значение LIMIT интерпретируется как «нет предела».Если оператор DELETE также имеет условие OFFSET,то он вычисляется аналогичным образом и приводится к целому значению.Опять же,это ошибка,если значение не может быть без потерь преобразовано в целое число.Если отсутствует выражение OFFSET или вычисленное целое значение имеет отрицательное значение,то эффективное значение OFFSET равно нулю.
Если заявление об удалении имеет пункт ЗАКАЗАТЬ ПО ЗАКАЗЧИКУ,то все строки,которые были бы удалены при отсутствии пункта ОГРАНИЧЕНИЕ,сортируются в соответствии с пунктом ЗАКАЗЧИКА ПО ЗАКАЗЧИКУ.Первый M rows, where M это значение,найденное при вычислении выражения OFFSET clause,пропускается,и следующие значения N , where N значение выражения LIMIT,удаляются.Если их меньше N строки,оставшиеся после учета оговорки OFFSET,или если оговорка LIMIT оценена в отрицательное значение,то все оставшиеся строки удаляются.
Если утверждение DELETE не имеет пункта ORDER BY,то все строки,которые были бы удалены при отсутствии пункта LIMIT,собираются в произвольном порядке перед применением пунктов LIMIT и OFFSET для определения подмножества,которое фактически удаляется.
Предложение ORDER BY в операторе DELETE используется только для определения того, какие строки попадают в пределы LIMIT. Порядок, в котором удаляются строки, произвольный и не зависит от предложения ORDER BY. Это означает, что при наличии предложения RETURNING строки, возвращаемые этим оператором, вероятно, будут не в порядке, указанном в предложении ORDER BY.
4.Оптимизация усечения
Когда предложение WHERE и предложение RETURNING опущены в инструкции DELETE и удаляемая таблица не имеет триггеров, SQLite использует оптимизацию для удаления всего содержимого таблицы без необходимости посещать каждую строку таблицы по отдельности. Эта оптимизация «усечения» значительно ускоряет процесс удаления. До версии SQLite 3.6.5 (2008-11-12) оптимизация усечения также означала, что интерфейсы sqlite3_changes () и sqlite3_total_changes () и прагма count_changes фактически не возвращали количество удаленных строк. Эта проблема исправлена в версии 3.6.5 (2008-11-12).
Оптимизацию усечения можно навсегда отключить для всех запросов, перекомпилировав SQLite с переключателем времени компиляции SQLITE_OMIT_TRUNCATE_OPTIMIZATION .
Оптимизацию усечения также можно отключить во время выполнения с помощью интерфейса sqlite3_set_authorizer () . Если обратный вызов авторизатора возвращает SQLITE_IGNORE для кода действия SQLITE_DELETE , тогда операция DELETE будет продолжена, но оптимизация усечения будет пропущена, и строки будут удалены одна за другой.
SQLite: DELETE Statement
This SQLite tutorial explains how to use the SQLite DELETE statement with syntax and examples.
Description
The SQLite DELETE statement is used to delete a single record or multiple records from a table in SQLite.
Syntax
The syntax for the DELETE statement in SQLite is:
Parameters or Arguments
- You do not need to list fields in the SQLite DELETE statement since you are deleting the entire row from the table.
- SQLite does not appear to support the DELETE LIMIT statement.
Example — Delete with 1 Condition
Let’s look at a simple SQLite DELETE query example, where we just have one condition in the DELETE statement.
This SQLite DELETE example would delete all records from the employees table where the last_name is ‘Smith’.
You may wish to check for the number of rows that will be deleted. You can determine the number of rows that will be deleted by running the following SQLite SELECT statement before performing the delete.
Example — Delete with 2 Conditions
Let’s look at a SQLite DELETE example, where we just have two conditions in the DELETE statement.
This SQLite DELETE example would delete all records from the employees table where the last_name is ‘Smith’ and the employee_id is less than 50.
You may wish to check for the number of rows that will be deleted. You can determine the number of rows that will be deleted by running the following SQLite SELECT statement before performing the delete.
Example — Delete using EXISTS Condition
You can also perform more complicated deletes.
You may wish to delete records in one table based on values in another table. Since you can’t list more than one table in the SQLite FROM clause when you are performing a delete, you can use the SQLite EXISTS clause.
This SQLite DELETE example would delete all records in the employees table where there is a record in the positions table based on the position_id field.
You may wish to check for the number of rows that will be deleted. You can determine the number of rows that will be deleted byrunning the following SQLite SELECT statement before performing the delete.
SQLite — DELETE Query
SQLite DELETE Query is used to delete the existing records from a table. You can use WHERE clause with DELETE query to delete the selected rows, otherwise all the records would be deleted.
Syntax
Following is the basic syntax of DELETE query with WHERE clause.
You can combine N number of conditions using AND or OR operators.
Example
Consider COMPANY table with the following records.
Following is an example, which will DELETE a customer whose ID is 7.
Now COMPANY table will have the following records.
If you want to DELETE all the records from COMPANY table, you do not need to use WHERE clause with DELETE query, which will be as follows −
Now, COMPANY table does not have any record as all the records have been deleted by DELETE statement.