SQL和Oracle对数据库事务处理的差异性

来源:asp之家 时间:2009-10-14 09:43:00 

背景

在吉日嘎拉的软件编程走火入魔之:数据库事务处理入门(适合初学者阅读)文章中关于MS SQL Server和Oracle对数据库事务处理的差异性引起一些争论,因此记录我对数据库事务处理的想法。

简介

本文讲述MS SQL Server和Oracle对数据库事务处理的差异性,以及Oracle如何对事务处理的实现。

什么是事务

数据库事务(Database Transaction)是一组数据库操作的处理单元。事务符合ACID的特性:

Atomic:原子性,要么全部要么一无所有。All or None.

Consistent:一致性,所有依赖关系以及约束一致。

Isolated:分离性,不同事务不互相影响。

Durable:持久性,提交事务的数据需要持久化。

为什么要使用事务

实现事务主要有两大功能:

1.保证数据库的consistent(一致性状态),保持所有依赖关系以及约束一致)。哪怕数据库管理系统出现故障时(例如断电),也能恢复到一致性状态。例如一个银行转帐系统,张三给李四转3000圆RMB,张三帐号上减3000和李四帐号上加3000需要同时完成,否则系统的帐就不平了。也例如有些销售系统的汇总表和明细表,是一个主表和一个从表,需要同步更新。

2.并发时分离不同事务操作。例如编辑过程中的数据不给其他事务查询到。这也是相对的,在特效需求下可能要支持dirty read(脏读),但不是这里讨论的范围了。

SQL Server 2008 的事务类型

1.自动提交事务 Autocommit Transactions

这是SQL Server默认的事务类型,每一条单独的SQL语句(SQL statement)都是单独的一个事务,语句执行完毕后自动提交。调用方不需要手工控制事务流程。

2.显示事务 Explicit Transactions

调用方需要调用API或者使用T-SQL的BEGIN TRANSACTION 语句来打开事务。需要调用COMMIT 或者 ROLLBACK TRANSACTION 来提交或者回滚。

3.隐式事务 Implicit Transactions

使用SET IMPLICIT_TRANSACTIONS ON把事务模式变成隐式模式。调用方不需要执行BEGIN TRANSACTION 语句来打开事务。数据库引擎执行到SQL语句的时候自动打开事务。调用方需要调用COMMIT 或者 ROLLBACK TRANSACTION 来提交或者回滚。当数据库引擎执行下一个SQL语句时又自动打开一个新事务。

参考:Controlling Transactions (Database Engine)


标签:SQL,Oracle,数据库,事务处理,差异
0
投稿

猜你喜欢

  • PHP bin2hex()函数基础实例讲解

    2023-06-12 16:30:44
  • Python定时任务sched模块用法示例

    2021-12-17 12:49:42
  • 从MySQL 5.5发布看开源数据库新模式

    2010-01-03 19:54:00
  • 如何设置mysql允许外部连接访问

    2024-01-15 05:22:14
  • python常用数据结构元组详解

    2022-08-14 08:14:44
  • mysql 8.0.18 压缩包安装及忘记密码重置所遇到的坑

    2024-01-28 18:01:35
  • pytest中配置文件pytest.ini使用

    2021-01-22 17:04:02
  • SQL语法CONSTRAINT约束操作详情

    2024-01-23 16:24:20
  • python实现获取Ip归属地等信息

    2022-10-24 00:13:31
  • Python必备基础之闭包和装饰器知识总结

    2022-05-21 22:34:30
  • 通过Jython调用Python脚本的实现方法

    2022-07-08 23:21:42
  • 站长如何活用"nofollow"标签

    2008-05-13 12:40:00
  • 对Python新手编程过程中如何规避一些常见问题的建议

    2021-04-01 19:27:16
  • 教你快速上手Selenium爬虫,万物皆可爬

    2022-01-02 18:44:31
  • 无闪烁更新网页内容JS实现

    2024-05-09 10:37:18
  • 基于 Dubbo Admin 动态调整服务超时时间的操作步骤

    2023-01-06 13:53:54
  • 详解flask入门模板引擎

    2023-06-27 00:05:41
  • 详解pandas.DataFrame.plot() 画图函数

    2021-06-02 21:41:49
  • 超简单使用Python换脸实例

    2021-07-31 17:03:36
  • 优化代码 改善CSS文件可读性

    2008-06-13 13:50:00
  • asp之家 网络编程 m.aspxhome.com