SQLite语法 BEGIN TRANSACTION
来源:互联网 发布:javascript !== 编辑:程序博客网 时间:2024/05/01 09:33
SQLite的SQL语法
[目录]BEGIN TRANSACTION
sql-statement ::= BEGIN [ DEFERRED | IMMEDIATE | EXCLUSIVE ] [TRANSACTION [name]] sql-statement ::= END [TRANSACTION [name]] sql-statement ::= COMMIT [TRANSACTION [name]] sql-statement ::= ROLLBACK [TRANSACTION [name]]从2.0版开始,SQLite支持带有回退和原子性的提交的事务处理。
可选的事务名称会被忽略。SQLite目前不允许嵌套事务。
在事务之外,不能对数据库进行更改。如果当前没有有效的事务,任何修改数据库的命令(基本上除了SELECT以外的所有SQL命令)会自动启动一个事务。命令结束时,自动启动的事务会被提交。
可以使用BEGIN命令手动启动事务。这样启动的事务会在下一条COMMIT或ROLLBACK命令之前一直有效。但若数据库关闭 或出现错误且选用ROLLBACK冲突判定算法时,数据库也会ROLLBACK。查看ON CONFLICT子句 获取更多关于ROLLBACK冲突判定算法的信息。
在SQLite 3.0.8或更高版本中,事务可以是延迟的,即时的或者独占的。“延迟的”即是说在数据库第一次被访问之前不获得锁。 这样就会延迟事务,BEGIN语句本身不做任何事情。直到初次读取或访问数据库时才获取锁。对数据库的初次读取创建一个SHARED锁 ,初次写入创建一个RESERVED锁。由于锁的获取被延迟到第一次需要时,别的线程或进程可以在当前线程执行BEGIN语句之后创建另外的事务 写入数据库。若事务是即时的,则执行BEGIN命令后立即获取RESERVED锁,而不等数据库被使用。在执行BEGIN IMMEDIATE之后, 你可以确保其它的线程或进程不能写入数据库或执行BEGIN IMMEDIATE或BEGIN EXCLUSIVE. 但其它进程可以读取数据库。 独占事务在所有的数据库获取EXCLUSIVE锁,在执行BEGIN EXCLUSIVE之后,你可以确保在当前事务结束前没有任何其它线程或进程 能够读写数据库。
有关SHARED, RESERVED, 和EXCLUSIVE锁可以参见这里。
SQLite 3.0.8的默认行为是创建延迟事务。SQLite 3.0.0 到3.0.7中延迟事务是唯一可用的事务类型。SQLite 2.8或更早版本中,所有的事务 都是独占的。
COMMIT命令在所有SQL命令完成之前并不作实际的提交工作。这样若两个或更多个SELECT语句在进程中间而执行COMMIT时,只有全部SELECT 语句结束才进行提交。
执行COMMIT可能会返回SQLITE_BUSY错误代码。这就是说有另外一个线程或进程获取了数据库的读取锁,并阻止数据库被改变。当COMMIT获得该错误代码时,事务依然是活动的,并且在COMMIT可以在当前读取的线程读取结束后再次试图读取数据库。
- SQLite语法 BEGIN TRANSACTION
- SQLite语法 BEGIN TRANSACTION
- SQLite语法 END TRANSACTION
- SQLite语法 COMMIT TRANSACTION
- SQLite BEGIN TRANSACTION创建提交事务 http://www.uedsc.com/sqlite-begin-transaction.html
- begin transaction/rollback transaction
- BEGIN DISTRIBUTED TRANSACTION
- BEGIN TRANSACTION (Transact-SQL)
- 对比sqlite3_exec 和sqlite3_bind 插入100万行数据的速度 with BEGIN TRANSACTION using C++ and SQLite
- Unable to begin a distributed transaction
- 数据库处理中的begin transaction 命令
- Interlude: Troubleshooting for 'no corresponding BEGIN TRANSACTION'
- svn could not begin a transaction
- sqlite transaction事务操作
- SET TRANSACTION 语法
- sqlite语法
- SQLite语法
- SQLite语法
- SQLite语法 comment
- SQLite语法 ALTER TABLE
- SQLite语法 ANALYZE
- fjnu 1461 回文数
- SQLite语法 ATTACH DATABASE
- SQLite语法 BEGIN TRANSACTION
- 关于C语言中的结构体对齐问题
- Oracle Lesson 5 PL/SQL 编程
- Byte Alignment
- Oracle Lesson 6 游标管理
- 从PDF说开去
- spring中以dataSource方式使用proxool连接池
- Ever-Flowers IN Never-Dream(19)
- 今天又上课了