事务管理

SQLite学习笔记(七)&&事务处理

自作多情 提交于 2019-12-29 03:01:06
说到事务一定会提到ACID,所谓事务的原子性,一致性,隔离性和持久性。对于一个数据库而言,通常通过并发控制和故障恢复手段来保证事务在正常和异常情况下的ACID特性。sqlite也不例外,虽然简单,依然有自己的并发控制和故障恢复机制。 Sqlite学习笔记(五)&&SQLite封锁机制 已经讲了一些锁机制的原理,本文将会详细介绍一个事务从开始,到执行,最后到提交所经历的过程,其中会穿插讲一些sqlite中锁管理,缓存管理和日志管理的机制,同时会介绍在异常情况下(软硬件故障,比如程序异常crash,主机掉电等),sqlite如何将数据库恢复到事务之前的状态。本文大量参考了sqlite的官方文档,结合自己的理解,希望能把这个过程说清楚。 1.事务提交 1.1 开启一个事务 在向数据库文件写数据前,sqlite首先需要访问sqlite_master表获取元数据信息,用来对SQL语句进行语义分析,判断语句的合法性。从数据库读数据第一步,是对数据库文件上一个Shared Lock。Shared Lock允许多个事务同时读一个数据库文件,但是Shared Lock会阻止写事务向数据库文件写入数据。 1.2 读数据 获取Shared Lock后,我们可以从数据库文件中读取数据了。我们假设缓存中没有我们的page,因此需要通过读文件读取我们需要的page。这里说明下

SQLite这么娇小可爱,不多了解点都不行啊

烂漫一生 提交于 2019-12-29 02:58:45
简介 SQLite,是一款轻型的数据库,是遵守ACID的关系型数据库管理系统。它的设计目标是嵌入式的,目前Android和iOS的设备内置的都是SQLite数据库。SQLite虽然娇小,但也支持事务和多数的SQL92标准。 主要特点 Zero-Configuration 无需安装和管理配置。 Serverless 无需服务器支持。 Single Database File 数据文件存储在一个单一的磁盘文件。 Stable Cross-Platform Database File 数据库文件格式跨平台,无论是大小端,或者是32bit或64bit机器都没有关系 Compact 完整特性的SQLite编译出来在500KiB左右,裁剪特性甚至可以得到低于300KiB的库(当前版本3.8.11.1)。 Manifest typing 可以声明数据库字段类型,但是字段存储的类型实际的存储类型和实际值相关,单独的一个字段可能包含不同存储类的值。 Variable-length records 可变长度记录,例如你存储一个字符到VARCHAR(100) 的列,实际需要的存储空间一个字符加一个字节的存储空间。 SQL statements compile into virtual machine code SQL语句会被编译成虚拟机代码,这种虚拟机代码直白可读,便于调试。 Public domain

SQLite这么娇小可爱,不多了解点都不行啊

十年热恋 提交于 2019-12-29 02:57:09
在我眼里,MySQL和Oracle是这样的 而SQLite在是这样的 所以这么萌的数据库,我真的应该多了解她的。 简介 SQLite,是一款轻型的数据库,是遵守ACID的关系型数据库管理系统。它的设计目标是嵌入式的,目前Android和iOS的设备内置的都是SQLite数据库。 SQLite虽然娇小,但也支持事务和多数的SQL92标准。 主要特点 1. Zero-Configuration 无需安装和管理配置。 2. Serverless 无需服务器支持。 3. Single Database File 数据文件存储在一个单一的磁盘文件。 4. Stable Cross-Platform Database File 数据库文件格式跨平台,无论是大小端,或者是32bit或64bit机器都没有关系 5. Compact 完整特性的SQLite编译出来在500KiB左右,裁剪特性甚至可以得到低于300KiB的库(当前版本3.8.11.1)。 6. Manifest typing 可以声明数据库字段类型,但是字段存储的类型实际的存储类型和实际值相关,单独的一个字段可能包含不同存储类的值。 7. Variable-length records 可变长度记录,例如你存储一个字符到VARCHAR(100) 的列,实际需要的存储空间一个字符加一个字节的存储空间。 8. SQL statements

亚博体育DAO持久化

自古美人都是妖i 提交于 2019-12-28 23:43:19
亚博体育yb9461分析DAO持久化的意思。 2.1.事务 在一个事务方法中,调用了其他事务的方法,此时事务该如何传递,按照什么规则传播. 1.1事务传播规则情况一:需要遵从当前事务 REQUIRED: 必须存在一个事务,如果当前存在一个事务,则加入到该事务中,否则,新建一个事务;(使用比较多) SUPPORTS: 支持当前事务。如果当前存在事务,则使用该事务否则以非事务形式运行; MANDATORY: 必须要存在事务,如果当存在事务,就使用该事务,否则,抛出异常; 1.2事务传播规则情况二:不遵从当前事务 REQUIRES_NEW:不管当前是否存在事务,都会新开启一个事务 必须是一个新的事务;(使用的比较多) NOT_SUPPORTED: 以非事务方式执行,如果当前存在事务,把当前事务暂停; NEVER :不支持事务,如果当前存在事务,抛出一个异常; 1.3事务传播规则情况三:寄生事务(外部事务/内部事务/嵌套事务) HESTED:寄生事务,如果当前存在事务,则在内部事务内执行;如果当前不存在事务则创建一个新的事务; 寄生事务可以通过数据库savePoint (保存点)来实现,寄生事务可以回滚的,但是他的回滚不影响外部事务.但是外部事务的回滚会影响寄生事务. 1.4<tx:method/>元素的属性(要被增强的方法) name:事务管理的方法名称,支持使用通配符方式:

全面讲解分布式数据库架构设计特点

坚强是说给别人听的谎言 提交于 2019-12-28 14:26:54
行业背景 随着全球经济下行压力增大,中美贸易摩擦愈演愈烈,美国一系列的经济制裁和技术封锁使得我们有种被扼住咽喉的感觉,数据库作为基础软件中的重要一环有着很深的技术含量,在这样的大背景下国产数据库厂商开始发力,这其中分布式数据库如雨后春笋般出现,良性的竞争环境使它们都得到了长足的发展,其中不乏优秀的产品,本文主要挑选目前几个相对成熟数据库进行架构特点介绍。 分布式数据库总体架构 其实分布式数据库总体设计有两个思路和方向,一个是基于共享存储的架构(share everything),另一个是基于数据分片的架构(share nothing)。 共享存储的架构特点是底层存储共用一份数据池子,上层数据库server层可以弹性扩展,典型的案例像DB2 purescale,Oracle RAC,阿里云PolarDB等,这种架构的好处是天然适合做云数据库,比如阿里云,上层的sql引擎可以是mysql也可以是pg,而且可以无限扩展,底层的存储其实是一起的,用户申请只是申请几个上层的mysql或者pg server同时在底层存储开辟一块空间给用户,这样的话可以做到资源的弹性伸缩。这种架构的数据库其实严格意义上不能称之为分布式数据库。 数据分片架构的特点是底层数据通过一定的规则比如hash或者range让数据打散分别分布到不同的数据节点上,计算时底层多个节点共同参与计算,可以算是一种mpp并行计算的架构

SQL Server 2008数据备份与还原的原理是什么?

淺唱寂寞╮ 提交于 2019-12-28 10:02:55
为什么SqlServer有完整备份、差异备份和事务日志备份三种备份方式,以及为什么数据库又有简单模式、完整模式和大容量日志模式这三种恢复模式。本文内容适用于2005以上所有版本的SqlServer数据库。   单就操作过程而言,SqlServer中数据库 备份 和恢复过程是相当简单的,可以通过ManagementStudio的图形界面进行操作,也可以使用几句T-SQL语句完成。但要明白备份恢复的整个过程,定制符合系统需求数据库备份方案,却需要知晓数据库的实现原理。备份和 恢复 是数据库的核心功能。   可能许多同学对SQLServer的备份和还原有一些了解,也可能经常使用备份和还原功能,我相信除DBA之外我们大部分开发员队伍对备份和还原只使用最基础的功能,对它也只有一个大概的认识。   一、数据库原理   先简要讨论了SqlServer数据库的存储的物理和逻辑结构,这是备份恢复的理论基础。   1.为什么使用 数据库   为什么要使用数据库,而不是使用一个文件,然后自己写一些方法来保存数据,那是因为使用数据库我们就不用自己去实现下面这些算法上非常复杂的功能:   a.高效一致的结构化数据存取方法,进行复杂的任意条件组合嵌套的数据查询(关系数据库管理系统甚至为实现这一功能专门设计了一种语言:SQL)   b.保障数据操作的原子性和完整性   c.确保在服务器断电、网络中断、服务器崩溃

第四章-DML,DDL和DCL语言

时光怂恿深爱的人放手 提交于 2019-12-28 04:03:01
DML语言 数据的插入 单行插入 insert into table1 (列名) values (列值); insert into table1 (列名) set (列值); 多行插入 inset into table1 (列名) values (列值),(列值); 注: 列名和列值的数量要相同而且一 一对应,不能为null的列都要给值 列名可以隐去,这样相当所有列都赋值,如果可以为null要显性给null值,那么可以使用NULL 对于字符好日期型,值要给单引号,数值则不用 数据的修改 单个表 update table1 set 列名a = 列值a,列名b = 列值b where 条件列式; 多表 (一定要连接条件,不然你的条件列式如果只关于一个表只能限制一个表,那么另一个表可能会成为全表修改,如果用and则表示要两个条件成立,会修改) 其实多表修改,其实就相当于先查询再修改,没有连接条件,就不会产生两个表连接的临时表,那么如果对两个表都有条件则找不到数据,不能修改 update table1 as a,table2 as b set a.列名a=列值a1,a.列名b = 列值a2 where 连接条件 and 条件列式 数据的删除 单个表 delete from table where 条件列式 多表 delete a,b from table1 as a,table2 as b

GTID!MySQL复制中的核武器

穿精又带淫゛_ 提交于 2019-12-28 00:59:38
各位老铁们,本周老张的《MySQL王者晋级之路》一书终于出版了,现在可以预购啦! 预购链接地址: 老张的数据库微店 前前后后经历了一年的准备时间,可谓十年磨一剑,把自己从业所有的精华和心血都灌输到其书中。其书中包含了MySQL方方面面的知识点,是之前我的一篇博客“从青铜到王者,快速提升你MySQL数据库段位的全面深入剖析”。用一句学生对我说得话,老师喜欢您的王者荣耀情怀,但更喜欢您的技术情操。讲真,不要错过!特别感谢在我从事技术道路上,帮助过我的前辈及兄弟们,这条路上的所有的辛酸,只有你们最懂我!也要感谢对我博客一直支持的兄弟们! 今儿的这篇博文,可以让大家快速了解GTID特性,并能灵活地运用到生产环境中,希望对大家有帮助。 GTID原理介绍 GTID又叫全局事务ID(Global Transaction ID),是一个已提交事务的编号,并且是一个全局唯一的编号。MySQL5.6版本之后在主从复制类型上新增了GTID复制。 GTID是由server_uuid和事务id组成的,即GTID = server_uuid:transaction_id。 server_uuid是在数据库启动过程中自动生成的,每台机器的server-uuid不一样。uuid存放在数据目录的auto.cnf文件下。而transaction_id就是事务提交时由系统顺序分配的一个不会重复的序列号。

【面试】MySQL的事务和索引

徘徊边缘 提交于 2019-12-26 05:17:44
MySQL事务 MySQL事务主要用于处理操作量大,复杂度高的数据。 比如说,在人员管理系统中,你删除一个人员,你既需要删除人员的基本资料,也要删除和该人员相关的信息,如信箱,文章等等,这些数据库操作语句就构成一个事务。 (1)在MySQL中只有使用了Innodb数据库引擎的数据库或表才支持事务。 (2)事务处理可以用来维护数据库的完整性,保证成批的sql语句要么全部执行,要么全部不执行。 (3)事务用来管理insert,update,delete语句。 一般来说,事务必须满足4个条件(ACID):Atomicity(原子性)、Consisttency(稳定性)、Isolation(隔离性)、Durability(可靠性)。 (1)事务的原子性:一组事务,要么成功,要么撤回。 (2)事务的稳定性:有非法数据(外键约束之类的),事务撤回。 (3)事务的隔离性:事务独立运行。一个事务处理后的结果,影响了其他事务,要么其他事务会撤回。事务的100%的隔离,需要牺牲速度。 (4)事务的可靠性:软、硬件崩溃后,InnoDB数据库驱动会利用日志文件重构修改,可靠性和高速度不可兼得,innodb_flush_log_at_trx_commit选项,决定什么时候把事务保存到日志里。 在MySQL控制台使用事务来操作: (1)开始一个事务 start transaction (2)做保存点

分布式事务解决方案

非 Y 不嫁゛ 提交于 2019-12-25 03:43:53
什么场景下会产生分布式事务? 在支付异步回调的情况下,支付宝发送http请求给第三方平台,第三方平台需要更改支付状态以及订单状态,在此场景下,第三方平台更改本地支付数据库的支付状态后,通知订单服务更改订单的状态,在此程序后,如果代码出现异常,由于有声明式事务的存在,本地支付服务的数据库会进行回滚,变成未支付状态,但是订单服务的状态却无法回滚,订单服务的订单的状态变成已支付状态,这就出现了订单数据库和支付数据库数据不一致的情况,这便是分布式事务产生的场景之一。 什么是分布式事务? 分布式事务就是指事务的参与者、支持事务的服务器、资源服务器以及事务管理器分别位于不同的分布式系统的不同节点之上。以上是百度百科的解释,简单的说,就是一次大的操作由不同的小操作组成,这些小的操作分布在不同的服务器上,且属于不同的应用,分布式事务需要保证这些小操作要么全部成功,要么全部失败。本质上来说,分布式事务就是为了保证不同数据库的数据一致性。 分布式事务的理论 1、cap理论 1)数据一致性(consistency) 如果系统对一个写操作返回成功,那么之后的读请求都必须读到这个新数据;如果返回失败,那么所有读操作都不能读到这个数据,对调用者而言数据具有强一致性(strong consistency) (又叫原子性 atomic、线性一致性 linearizable consistency) 一致性指