数据库事务

Sqlite事物与锁

坚强是说给别人听的谎言 提交于 2019-12-29 02:58:07
1事务 事务定义了一组SQL命令的边界,这组命令或者作为一个整体被全部执行,或者都不执行。事务的典型实例是转帐。 2事务的范围 事务由3个命令控制:BEGIN、COMMIT和ROLLBACK。BEGIN开始一个事务,之后的所有操作都可以取消。COMMIT使BEGIN后的所有命令得到确认;而ROLLBACK还原BEGIN之后的所有操作。如: sqlite> BEGIN; sqlite> DELETE FROM foods; sqlite> ROLLBACK; sqlite> SELECT COUNT(*) FROM foods; 上面开始了一个事务,先删除了foods表的所有行,但是又用ROLLBACK进行了回卷。再执行SELECT时发现表中没发生任何改变。 SQLite默认情况下,每条SQL语句自成事务(自动提交模式)。 3冲突解决 违反约束会导致事务的非法结束。大多数数据库(管理系统)都是简单地将前面所做的修改全部取消。 SQLite有其独特的方法来处理约束违反(或说从约束违反中恢复),被称为冲突解决。如: sqlite> UPDATE foods SET id=800-id; SQL error: PRIMARY KEY must be unique SQLite提供5种冲突解决方案:REPLACE、IGNORE、FAIL、ABORT和ROLLBACK。 REPLACE:

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

SQLite的WAL机制

孤街醉人 提交于 2019-12-29 02:55:25
1.什么是WAL? WAL的全称是Write Ahead Logging,它是很多数据库中用于实现原子事务的一种机制,SQLite在3.7.0版本引入了该特性。 2.WAL如何工作? 在引入WAL机制之前,SQLite使用rollback journal机制实现原子事务。 rollback journal机制的原理是:在修改数据库文件中的数据之前,先将修改所在分页中的数据备份在另外一个地方,然后才将修改写入到数据库文件中;如果事务失败,则将备份数据拷贝回来,撤销修改;如果事务成功,则删除备份数据,提交修改。 WAL机制的原理是:修改并不直接写入到数据库文件中,而是写入到另外一个称为WAL的文件中;如果事务失败,WAL中的记录会被忽略,撤销修改;如果事务成功,它将在随后的某个时间被写回到数据库文件中,提交修改。 同步WAL文件和数据库文件的行为被称为checkpoint(检查点),它由SQLite自动执行,默认是在WAL文件积累到1000页修改的时候;当然,在适当的时候,也可以手动执行checkpoint,SQLite提供了相关的接口。执行checkpoint之后,WAL文件会被清空。 在读的时候,SQLite将在WAL文件中搜索,找到最后一个写入点,记住它,并忽略在此之后的写入点(这保证了读写和读读可以并行执行);随后,它确定所要读的数据所在页是否在WAL文件中,如果在

亚博体育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 备份和还原全攻略

与世无争的帅哥 提交于 2019-12-28 10:03:47
一、 知识点 完全备份: 备份全部选中的文件夹,并不依赖文件的存档属性来确定备份那些文件。(在备份过程中,任何现有的标记都被清除,每个文件都被标记为已备份,换言之,清除存档属性)。完全备份也叫完整备份。 差异备份: 差异备份是针对完全备份:备份上一次的完全备份后发生变化的所有文件。(差异备份过程中,只备份有标记的那些选中的文件和文件夹。它不清除标记,即:备份后不标记为已备份文件,换言之,不清除存档属性)。 增量备份: 增量备份是针对于上一次备份(无论是哪种备份):备份上一次备份后,所有发生变化的文件。(增量备份过程中,只备份有标记的选中的文件和文件夹,它清除标记,即:备份后标记文件,换言之,清除存档属性。) 事务日志备份: 在特定事务日志备份之前执行的完整数据库备份和上次差异备份(如果有)。在完整数据库备份之后执行的所有事务日志备份或在特定事务日志备份之前执行的差异备份(如果您还原了差异备份)。如果你设置了恢复模式为【简单】,你将无法使用【事务日志】备份。SQL Server 2000 和 SQL Server 2005: 创建事务日志备份,您必须使用完整恢复或大容量日志记录恢复模型。 部分备份: 通过指定 READ_WRITE_FILEGROUPS 创建的备份称为“部分备份”。在简单恢复模式下,只允许对只读文件组执行文件组备份。还原的数据备份类型:数据库备份、部分备份或文件备份

SQL Server 备份和还原全攻略

允我心安 提交于 2019-12-28 10:03:28
SQL Server 备份和还原全攻略 2011-06-29 17:03 by 听风吹雨, 17466 阅读, 21 评论, 收藏 , 编辑 一、 知识点 完全备份: 备份全部选中的文件夹,并不依赖文件的存档属性来确定备份那些文件。(在备份过程中,任何现有的标记都被清除,每个文件都被标记为已备份,换言之,清除存档属性)。完全备份也叫完整备份。 差异备份: 差异备份是针对完全备份:备份上一次的完全备份后发生变化的所有文件。(差异备份过程中,只备份有标记的那些选中的文件和文件夹。它不清除标记,即:备份后不标记为已备份文件,换言之,不清除存档属性)。 增量备份: 增量备份是针对于上一次备份(无论是哪种备份):备份上一次备份后,所有发生变化的文件。(增量备份过程中,只备份有标记的选中的文件和文件夹,它清除标记,即:备份后标记文件,换言之,清除存档属性。) 事务日志备份: 在特定事务日志备份之前执行的完整数据库备份和上次差异备份(如果有)。在完整数据库备份之后执行的所有事务日志备份或在特定事务日志备份之前执行的差异备份(如果您还原了差异备份)。如果你设置了恢复模式为【简单】,你将无法使用【事务日志】备份。SQL Server 2000 和 SQL Server 2005: 创建事务日志备份,您必须使用完整恢复或大容量日志记录恢复模型。 部分备份: 通过指定 READ_WRITE

SQL Server 备份和还原全攻略

萝らか妹 提交于 2019-12-28 10:03:12
原文: SQL Server 备份和还原全攻略 一、 知识点 完全备份: 备份全部选中的文件夹,并不依赖文件的存档属性来确定备份那些文件。(在备份过程中,任何现有的标记都被清除,每个文件都被标记为已备份,换言之,清除存档属性)。完全备份也叫完整备份。 差异备份: 差异备份是针对完全备份:备份上一次的完全备份后发生变化的所有文件。(差异备份过程中,只备份有标记的那些选中的文件和文件夹。它不清除标记,即:备份后不标记为已备份文件,换言之,不清除存档属性)。 增量备份: 增量备份是针对于上一次备份(无论是哪种备份):备份上一次备份后,所有发生变化的文件。(增量备份过程中,只备份有标记的选中的文件和文件夹,它清除标记,即:备份后标记文件,换言之,清除存档属性。) 事务日志备份: 在特定事务日志备份之前执行的完整数据库备份和上次差异备份(如果有)。在完整数据库备份之后执行的所有事务日志备份或在特定事务日志备份之前执行的差异备份(如果您还原了差异备份)。如果你设置了恢复模式为【简单】,你将无法使用【事务日志】备份。SQL Server 2000 和 SQL Server 2005: 创建事务日志备份,您必须使用完整恢复或大容量日志记录恢复模型。 部分备份: 通过指定 READ_WRITE_FILEGROUPS 创建的备份称为“部分备份”。在简单恢复模式下,只允许对只读文件组执行文件组备份

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