发布网友 发布时间:2023-02-20 04:06
共1个回答
热心网友 时间:2023-09-28 13:00
事务( )
在上面的例子中 在发出了MIT语句之后 只有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已经实现了 种事务隔离级别 SERIALIZABLE READ MITTED和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 MITTED隔离级别(实际上 它确保一行数据保持不变)
UNMITTEDREAD(UR)隔离级别与SQL标准中的定义相同 不获取任何锁 因此可能发生脏读(脏读指的是一个事务在读取数据时 另外一个事务正在修改这些数据 因此可能产生不确定的结果)
Microsoft SQL Server 不但支持SQL标准定义的所有 种隔离级别 它还添加了一个SNAPSHOT隔离级别 用于保证在事务期间读取的数据与在事务一开始时的数据保持一致 隔离级别是为整个会话设置的 而不是为会话中的单个事务设置的
表 列出了SQL标准中定义的 种隔离级别 以及在每一种隔离级别下的行为 脏读指的是读取了还未提交到数据库的数据 不可重复读指的是在事务访问数据期间 数据可能发生改变 幻读则与不可重复读有关 它描述了这样一种情形 对一个相同的数据集执行同样的查询 每次返回的查询结果不相同
表 SQL中的事务隔离级别
返回目录 SQL实战新手入门
编辑推荐
Oracle索引技术
高性能MySQL
lishixin/Article/program/SQL/201311/16447