非常教程

Sqlite参考手册

语言 | Language

DELETE

[Top]

DELETE

delete-stmt: hide

DELETE

expr: show

DELETE

literal-value: show

DELETE

raise-function: show

DELETE

select-stmt: show

DELETE

common-table-expression: show

DELETE

compound-operator: show

DELETE

join-clause: show

DELETE

join-constraint: show

DELETE

join-operator: show

DELETE

ordering-term: show

DELETE

result-column: show

DELETE

table-or-subquery: show

DELETE

type-name: show

DELETE

signed-number: show

DELETE

qualified-table-name: show

DELETE

with-clause: show

DELETE

cte-table-name: show

DELETE

select-stmt: show

DELETE

common-table-expression: show

DELETE

compound-operator: show

DELETE

join-clause: show

DELETE

join-constraint: show

DELETE

join-operator: show

DELETE

ordering-term: show

DELETE

result-column: show

DELETE

table-or-subquery: show

DELETE

DELETE 命令从由 qualified-table-name 标识的表中删除记录。

如果 WHERE 子句不存在,则删除表中的所有记录。如果提供了 WHERE 子句,那么只有那些 WHERE 子句布尔表达式为真的行才会被删除。表达式为 false 或 NULL 的行将被保留。

对 CREATE TRIGGER 中的 DELETE 语句的限制

以下限制适用于在 CREATE TRIGGER 语句的主体内发生的 DELETE 语句:

  • 在触发器体内指定为 DELETE 语句一部分的表名必须是不合格的。换句话说,模式名称表名中的前缀在触发器中是不允许的。如果触发器附加到的表不在临时数据库中,则触发器正文内的 DELETE 语句必须在与其相同的数据库中的表上操作。如果触发器附加到的表在 TEMP 数据库中,那么将删除正被删除的表的非限定名称,方式与顶级语句相同(通过首先搜索 TEMP 数据库,然后选择 main 数据库,然后是任何其他数据库按照它们附加的顺序)。
  • 触发器中的 DELETE 语句不允许 INDEXED BY 和 NOT INDEXED 子句。
  • 触发器中的 DELETE 语句不支持 LIMIT 和 ORDER BY 子句(如下所述)。

可选的 LIMIT 和 ORDER BY 子句

如果 SQLite 使用 SQLITE_ENABLE_UPDATE_DELETE_LIMIT 编译时选项进行编译,则通过添加可选的 ORDER BY 和 LIMIT 子句来扩展 DELETE 语句的语法:

delete-stmt-limited:

DELETE

如果 DELETE 语句具有 LIMIT 子句,则通过评估随附的表达式并将其转换为整数值来找到将被删除的最大行数。如果评估 LIMIT 子句的结果不能无损地转换为整数值,那就是错误。负的 LIMIT 值被解释为“无限制”。如果 DELETE 语句也有一个 OFFSET 子句,那么它将被类似地评估并转换为一个整数值。同样,如果该值无法无损地转换为整数,则会出错。如果没有 OFFSET 子句,或者计算的整数值为负数,则有效的 OFFSET 值为零。

如果 DELETE 语句具有 ORDER BY 子句,则在缺少 LIMIT 子句的情况下将删除的所有行都将根据 ORDER BY 进行排序。第一中号行,其中中号是通过评估 OFFSET 子句表达式中找到的值,会被跳过,以下 Ñ,其中 Ñ 是 LIMIT 表达式的值,将被删除。如果在考虑 OFFSET 子句后剩余的行数少于 N 行,或者 LIMIT 子句评估为负值,则删除所有剩余的行。

如果 DELETE 语句没有 ORDER BY 子句,那么在应用 LIMIT 和 OFFSET 子句以确定实际删除的子集之前,在没有 LIMIT 子句的情况下将被删除的所有行将按任意顺序汇编。

DELETE 语句上的 ORDER BY 子句仅用于确定哪些行位于 LIMIT 内。删除行的顺序是任意的,不受 ORDER BY 子句的影响。

截断优化

当从 DELETE 语句中省略 WHERE 并且被删除的表没有触发器时,SQLite 使用优化来擦除整个表内容,而不必逐个访问表中的每一行。这种“截断”优化使删除运行速度更快。在 SQLite 版本3.6.5(2008-11-12)之前,truncate 优化还意味着 sqlite3_changes()和 sqlite3_total_changes()接口和 count_changes编译指示实际上不会返回已删除行的数量。该问题已在版本3.6.5(2008-11-12)中得到修复。

通过使用 SQLITE_OMIT_TRUNCATE_OPTIMIZATION 编译时开关重新编译 SQLite,可以永久禁用所有查询的截断优化。

截断优化也可以在运行时使用 sqlite3_set_authorizer()接口禁用。如果授权方回调为 SQLITE_DELETE 操作代码返回 SQLITE_IGNORE,则 DELETE 操作将继续,但截断优化将被绕过,行将逐个删除。

Sqlite

SQLite,是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中。它是D.RichardHipp建立的公有领域项目。它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。它能够支持Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,比如 Tcl、C#、PHP、Java等,还有ODBC接口,同样比起Mysql、PostgreSQL这两款开源的世界著名数据库管理系统来

主页 https://sqlite.org/
源码 https://www.sqlite.org/src/
发布版本 3.21.0

Sqlite目录

1.C界面 | C Interface
2.C Interface: Session Module
3.CLI
4.数据库文件表 | Database File Format
5.数据类 | Datatypes
6.动态内存分配 | Dynamic Memory Allocation
7.外键约束 | Foreign Key Constraints
8.全文索引 | Full-Text Search
9.损坏方式 | How To Corrupt
10.JSON
11.语言 | Language
12.局限性 | Limits
13.锁定和并发 | Locking and Concurrency
14.其他 | Miscellaneous
15.PRAGMA Statements
16.查询计划程序 | Query Planner
17.R*Tree Module
18.RBU Extension
19.语法图 | Syntax Diagrams
20.Tcl Interface
21.虚拟表机制 | Virtual Table Mechanism
22.预写日志 | Write-Ahead Logging
23.SQL 教程
24.SQL 简介
25.SQL 语法
26.SQL DELETE 语句
27.SQL UPDATE 语句
28.SQL NOT NULL 约束
29.SQL 约束
30.SQL CREATE TABLE 语句
31.SQL CREATE DATABASE 语句
32.SQL INSERT INTO SELECT 语句
33.SQL SELECT INTO 语句
34.SQL CREATE VIEW、REPLACE VIEW、 DROP VIEW 语句
35.SQL AUTO INCREMENT 字段
36.SQL ALTER TABLE 语句
37.SQL 撤销索引、表以及数据库
38.SQL CREATE INDEX 语句
39.SQL DEFAULT 约束
40.SQL CHECK 约束
41.SQL FOREIGN KEY 约束
42.SQL PRIMARY KEY 约束
43.SQL UNIQUE 约束
44.SQL 通用数据类型
45.SQL ISNULL()、NVL()、IFNULL() 和 COALESCE() 函数
46.SQL NULL 值 – IS NULL 和 IS NOT NULL
47.SQL Server 和 MySQL 中的 Date 函数
48.SQL MS Access、MySQL 和 SQL Server 数据类型
49.SQL 函数
50.SQL 总结
51.SQL 主机
52.SQL 快速参考
53.SQL ROUND() 函数
54.SQL Server GETDATE() 函数
55.MySQL DATE_FORMAT() 函数
56.MySQL DATEDIFF() 函数
57.MySQL DATE_SUB() 函数
58.MySQL DATE_ADD() 函数
59.MySQL EXTRACT() 函数
60.MySQL DATE() 函数
61.MySQL CURTIME() 函数
62.MySQL CURDATE() 函数
63.MySQL NOW() 函数
64.SQL Server CONVERT() 函数
65.SQL Server DATEDIFF() 函数
66.SQL Server DATEADD() 函数
67.SQL Server DATEPART() 函数
68.SQLite 命令
69.SQLite 安装
70.SQLite 简介
71.SQLite 运算符
72.SQLite Select 语句
73.SQLite 删除表
74.SQLite 创建表
75.SQLite Insert 语句
76.SQLite 分离数据库
77.SQLite 附加数据库
78.SQLite 创建数据库
79.SQLite 数据类型
80.SQLite 语法
81.SQLite Order By
82.SQLite Limit 子句
83.SQLite Glob 子句
84.SQLite Like 子句
85.SQLite Delete 语句
86.SQLite Update 语句
87.SQLite AND/OR 运算符
88.SQLite Where 子句
89.SQLite 表达式
90.SQLite Distinct 关键字
91.SQLite Having 子句
92.SQLite Group By
93.SQLite Join
94.SQLite 约束
95.SQLite PRAGMA
96.SQLite 事务
97.SQLite 视图
98.SQLite Truncate Table
99.SQLite Alter 命令
100.SQLite Indexed By