数据库

位置:IT落伍者 >> 数据库 >> 浏览文章

SQL实战新手入门:事务(4)


发布日期:2022年04月22日
 
SQL实战新手入门:事务(4)

事务(

在上面的例子中在发出了COMMIT语句之后只有UPDATE操作会提交到数据库所有的DELETE操作都被回滚保存点first_delete将被清除该查询所占用的所有资源也被释放

在当前事务中保存点的名称必须是唯一的如果使用相同的名称声明了一个新的保存点则之前的保存点将被销毁

Microsoft SQL Server 在定义保存点的语法中添加了TRAN关键字它建立保存点的语法如下所示

SAVE TRAN[SACTION] <savepoint name>

要使前面的代码能在Microsoft SQL Server中正常运行只需要将SAVEPOINT关键字替换为SAVE TRANSACTION关键字即可

涉及多个数据库的事务称为分布式事务分布式事务本身就非常复杂要求许多高级的技术和知识分布式事务涉及使用两阶段提交它允许在一个事务中使用多种混杂的数据源万一网络连接中断分布式事务必须尽可能地减少数据丢失的风险分布式事务使用的是两阶段提交协议各个RDBMS对此的具体实现上存在一定的差异但通常都遵循相同的两阶段原则

事务的隔离级别

SQL标准定义了多种事务隔离级别隔离级别指的是事务在自己的作用域内查看外部世界(即被任何其他事务修改了的数据)的能力列出了SQL标准定义的几种隔离级别

SQL标准定义的事务隔离级别

Oracle g/g已经实现了种事务隔离级别SERIALIZABLEREAD COMMITTED和READ ONLY

DB 定义事务隔离级别的术语与SQL标准的术语存在一定的混淆SQL标准中定义的SERIALIZABLE隔离级别在DB 中名为REPEATABLEREAD(RR)这是DB 中最高的隔离级别DB 也支持使用SQL标准的关键字作为RR的同义词SQL标准中的REPEATABLEREAD在DB 中是READSTABILITY(RS)另外DB 还引入了一个新的隔离级别

CURSORSTABILITY

最后一个隔离级别CURSORSTABILITY(CS)是IBM DB 中默认的事务隔离级别它类似于SQL标准中的READ COMMITTED隔离级别(实际上它确保一行数据保持不变)

UNCOMMITTEDREAD(UR)隔离级别与SQL标准中的定义相同不获取任何锁因此可能发生髒读(髒读指的是一个事务在读取数据时另外一个事务正在修改这些数据因此可能产生不确定的结果)

Microsoft SQL Server 不但支持SQL标准定义的所有种隔离级别它还添加了一个SNAPSHOT隔离级别用于保证在事务期间读取的数据与在事务一开始时的数据保持一致隔离级别是为整个会话设置的而不是为会话中的单个事务设置的

列出了SQL标准中定义的种隔离级别以及在每一种隔离级别下的行为髒读指的是读取了还未提交到数据库的数据不可重复读指的是在事务访问数据期间数据可能发生改变幻读则与不可重复读有关它描述了这样一种情形对一个相同的数据集执行同样的查询每次返回的查询结果不相同

SQL中的事务隔离级别

返回目录SQL实战新手入门

编辑推荐

Oracle索引技术

高性能MySQL

数据仓库与数据挖掘培训视频教程

               

上一篇:SQL实战新手入门:事务(3)

下一篇:SQL实战新手入门:理解锁