
在这里我们将对MS SQL Server和Oracle数据库事务处理的一些不同进行对比,希望通过对比能帮助大家更好的理解事务处理的本来面貌。
背景
在吉日嘎拉的软件编程走火入魔之:数据库事务处理入门(适合初学者阅读)文章中关于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)
Oracle的事务类型
Oracle的事务处理类型有点像SQL Server的隐式事务。当执行到第一个可执行的SQL语句时自动打开事务,然后需要调用方执行commit或者rollback来提交或者回滚事务,如果有DDL语句,Oracle也会自动提交事务的。
参考:Transaction Management
Oracle的事务的实现
Oracle的结构分逻辑上和物理上的区别。逻辑上的结构是表空间,而物理上的结构是数据文件。
逻辑实现
Oracle下实现事务在逻辑上是由Undo Tablespace来实现的。Undo Tablespace包含Undo Segements(段),而Undo Segements包含Undo>
阿里巴巴数据分析师招聘
sql语言在你说这三个软键之间有些略微的区别,但是如果你掌握了一个软件的语言 其他两个软键能够大致上互通。 掌握这个语言是因为 阿里巴巴的数据都是存在放sql的数据库里面的,一方面可能需要你通过sql代码编写重新组织数据库构将,另一方面需要你能够灵活的从sql中导出你想要的数据进行分析。 。 。 所以这个是必备的
总结mysql,Mssql,Oracle的优缺点和异同
1。 oracle体积最大,MsSQL体积大,MySQL体积小。 2。 MsSQL只能用在Windows下,MySQL、oracle是多平台的. 要钱,MySQL免费的(windows下是收费的,但很少),oracle(免费使用)官方提供下载,呵呵 如果要技术支持 巨贵。
工作!选网管还是用ERP 维护SQL数据库?哪个工作好??
网管是一份技术含量比较低的工作ERP 维护SQL数据库学好了学精了以后是很有前景的企业信息化是很有前景的个人愚见呵呵
发表评论