嵌入式数据库事务理解以及实例操作
2023-09-11 14:20:54 时间
SQLite 事务(Transaction)
事务(Transaction)是一个对数据库执行工作单元。事务(Transaction)是以逻辑顺序完成的工作单位或序列,可以是由用户手动操作完成,也可以是由某种数据库程序自动完成。
事务(Transaction)是指一个或多个更改数据库的扩展。例如,如果您正在创建一个记录或者更新一个记录或者从表中删除一个记录,那么您正在该表上执行事务。重要的是要控制事务以确保数据的完整性和处理数据库错误。
实际上,您可以把许多的 SQLite 查询联合成一组,把所有这些放在一起作为事务的一部分进行执行。
1,事务的属性
事务(Transaction)具有以下四个标准属性,通常根据首字母缩写为 ACID:
·原子性(Atomicity):确保工作单位内的所有操作都成功完成,否则,事务会在出现故障时终止,之前的操作也会回滚到以前的状态。
·一致性(Consistency):确保数据库在成功提交的事务上正确地改变状态。
·隔离性(Isolation):使事务操作相互独立和透明。
·持久性(Durability):确保已提交事务的结果或效果在系统发生故障的情况下仍然存在。
2,事务控制
使用下面的命令来控制事务:
·BEGIN TRANSACTION:开始事务处理。
·COMMIT:保存更改,或者可以使用 END TRANSACTION 命令。
·ROLLBACK:回滚所做的更改。
事务控制命令只与 DML 命令 INSERT、UPDATE 和 DELETE 一起使用。他们不能在创建表或删除表时使用,因为这些操作在数据库中是自动提交的。
3,BEGIN TRANSACTION 命令
事务(Transaction)可以使用 BEGIN TRANSACTION 命令或简单的 BEGIN 命令来启动。此类事务通常会持续执行下去,直到遇到下一个 COMMIT 或 ROLLBACK 命令。不过在数据库关闭或发生错误时,事务处理也会回滚。以下是启动一个事务的简单语法:
BEGIN;
BEGIN TRANSACTION;
4,COMMIT 命令
COMMIT 命令是用于把事务调用的更改保存到数据库中的事务命令。
COMMIT 命令把自上次 COMMIT 或 ROLLBACK 命令以来的所有事务保存到数据库。
COMMIT 命令的语法如下:
COMMIT;
END TRANSACTION;
5,ROLLBACK 命令
ROLLBACK 命令是用于撤消尚未保存到数据库的事务的事务命令。
ROLLBACK 命令只能用于撤销自上次发出 COMMIT 或 ROLLBACK 命令以来的事务。
ROLLBACK 命令的语法如下:
ROLLBACK;
6,实例操作 [root@localhost sqlite-autoconf-3080403]# sqlite3 tim.db SQLite version 3.8.4.3 2014-04-03 16:53:12 Enter ".help" for usage hints. sqlite CREATE TABLE COMPANY(ID INT NOT NULL, NAME VARCHAR(20),AGE INT,ADDRESS VARCHAR(20),SALARY DECIMAL(7,2)); 现在,让我们开始一个事务,并从表中删除 age = 25 的记录,最后,我们使用 ROLLBACK 命令撤消所有的更改。 先开启事务,然后删除AGE为25的记录,查询COMPANY表,会看到没有这条记录,如下图所示:
再ROLLBACK,再去查询COMPANY表,会看到AGE为25的记录被恢复。
现在开启一个事务,删除AGE为25的记录,再执行COMMIT提交所以的更改,那么就不会再看到已经删除的记录,如下所示:
再ROLLBACK,再去查询COMPANY表,会看到AGE为25的记录被恢复。
现在开启一个事务,删除AGE为25的记录,再执行COMMIT提交所以的更改,那么就不会再看到已经删除的记录,如下所示:
最新内容请见作者的GitHub页:http://qaseven.github.io/
鸿蒙开发实例|对象关系映射数据库 HarmonyOS应用数据管理不仅支持单设备的各种结构化数据的持久化,还支持跨设备之间数据的同步、共享及搜索功能,因此,开发者基于Harmony OS应用数据管理功能,能实现应用程序数据在不同终端设备之间的无缝衔接,从而保证用户在跨设备使用数据时所用数据的一致性。
树莓派开发笔记(十七):树莓派4B+上Qt多用户连接操作Mysql数据库同步(单条数据悲观锁) 安装了mysq数据库,最终时为了实现在一个树莓派上实现多用户多进程操作的同步问题,避免数据并发出现一些错误,本篇安装了远程服务并且讲述了使用Qt进行悲观锁for update操作,命令行进行同步查询的示例。
Java之——基于java开发的功能强大、配置灵活的数据库之间的同步工具 基于java开发的功能强大、配置灵活的数据库之间的同步工具,和数据产生器一样,均是前段时间因为项目需要编写的小工具,在实际应用场景中,我们经常需要定期将一个数据库的数据同步到另外一个数据库中,常见的一种做法是将源数据库的数据dump为sql文件,然后到目标数据库执行sql文件完成数据库的导入,但是这种方法至少存在以下问题:
带你读《工业机器人系统及应用》之三:驱动系统 本书聚焦于工业机器人,涵盖其组成结构、电气控制及实践应用,重点从使用的角度展开介绍,不涉及数学原理分析。书中综合了机械、控制、计算机、传感器、驱动等专业的知识,包含大量新近的工业机器人产品实例,并配有丰富的图表和数据手册,为机器人的设计、生产、布置、操作和维护提供全流程的详细指南。
增加关系型数据库驱动配置同步任务 RDBMS插件,可以添加部分关系型数据库驱动,可以实现部分数据集成没有支持到的关系型数据库,配置同步任务,目前只支持脚本模式配置。
6,实例操作 [root@localhost sqlite-autoconf-3080403]# sqlite3 tim.db SQLite version 3.8.4.3 2014-04-03 16:53:12 Enter ".help" for usage hints. sqlite CREATE TABLE COMPANY(ID INT NOT NULL, NAME VARCHAR(20),AGE INT,ADDRESS VARCHAR(20),SALARY DECIMAL(7,2)); 现在,让我们开始一个事务,并从表中删除 age = 25 的记录,最后,我们使用 ROLLBACK 命令撤消所有的更改。 先开启事务,然后删除AGE为25的记录,查询COMPANY表,会看到没有这条记录,如下图所示:
![](http://www.51testing.com/attachments/2014/09/14982672_2014090310135714JZG.jpg)
![](http://www.51testing.com/attachments/2014/09/14982672_201409031013572FtDJ.jpg)
![](http://www.51testing.com/attachments/2014/09/14982672_201409031013573Oh7N.jpg)
![](http://www.51testing.com/attachments/2014/09/14982672_201409031013574nH6b.jpg)
![](http://www.51testing.com/attachments/2014/09/14982672_201409031013575TwqH.jpg)
鸿蒙开发实例|对象关系映射数据库 HarmonyOS应用数据管理不仅支持单设备的各种结构化数据的持久化,还支持跨设备之间数据的同步、共享及搜索功能,因此,开发者基于Harmony OS应用数据管理功能,能实现应用程序数据在不同终端设备之间的无缝衔接,从而保证用户在跨设备使用数据时所用数据的一致性。
树莓派开发笔记(十七):树莓派4B+上Qt多用户连接操作Mysql数据库同步(单条数据悲观锁) 安装了mysq数据库,最终时为了实现在一个树莓派上实现多用户多进程操作的同步问题,避免数据并发出现一些错误,本篇安装了远程服务并且讲述了使用Qt进行悲观锁for update操作,命令行进行同步查询的示例。
Java之——基于java开发的功能强大、配置灵活的数据库之间的同步工具 基于java开发的功能强大、配置灵活的数据库之间的同步工具,和数据产生器一样,均是前段时间因为项目需要编写的小工具,在实际应用场景中,我们经常需要定期将一个数据库的数据同步到另外一个数据库中,常见的一种做法是将源数据库的数据dump为sql文件,然后到目标数据库执行sql文件完成数据库的导入,但是这种方法至少存在以下问题:
带你读《工业机器人系统及应用》之三:驱动系统 本书聚焦于工业机器人,涵盖其组成结构、电气控制及实践应用,重点从使用的角度展开介绍,不涉及数学原理分析。书中综合了机械、控制、计算机、传感器、驱动等专业的知识,包含大量新近的工业机器人产品实例,并配有丰富的图表和数据手册,为机器人的设计、生产、布置、操作和维护提供全流程的详细指南。
增加关系型数据库驱动配置同步任务 RDBMS插件,可以添加部分关系型数据库驱动,可以实现部分数据集成没有支持到的关系型数据库,配置同步任务,目前只支持脚本模式配置。
相关文章
- Android实例-处理隐藏输入法后不再显示问题(XE8+小米2)
- 【ASM学习】普通数据库向ASM实例的迁移(二)
- 解决 PhpStorm 对 用单例模式实例化PHP类时,代码自动提示功能失效 的问题
- java面向对象高级分层实例_测试类(main方法所在的类)
- spring: spittr实例 构建简单的web应用 Test测试用例
- asp.net sql无限极分类实例程序
- Linux平台单实例数据库安装
- 单实例数据库DataGuard主库与备库切换
- 一台MySQL数据库启动多个实例
- 显著性水平 置信度 置信区间 实例讲解
- 单实例数据库DataGuard主库与备库切换
- Sql Server 存储过程实例讲解
- 删除所有正在运行和退出的docker实例
- Atitit ACID解决方案2PC(两阶段提交) 跨越多个数据库实例的ACID保证
- ZZNUOJ_C语言1088:手机短号 (多实例)(完整代码)
- java编程:jedis连接redis数据库实例
- Linux服务器中创建Oracle数据库实例
- Servlet实例解说
- JDBC PrepareStatement对象执行批量处理实例
- 海思HI35xx平台软件开发快速入门之H264解码实例
- oracle11g grid 单实例数据库停止启动
- 【数据库管理】①实例与数据库
- 第一章: Instance (实例)和DB(数据库)
- 安装MySQL5.7数据库服务实例