数据库中的事务

一、事务(Transaction)是由一系列相关的SQL语句组成的最小逻辑工作单元。Oracle系统以事务为单位来处理数据,用以保证数据的一致性。对于事务中的每一个操作,要么全部完成,要么全部不执行。

二、事务的特性?

1、原子性:事务是原子的,也就是说一个事务中包含的所有SQL操作都是一个不可分割的工作单元。

2、一致性:事务必须保持数据库的状态保持一致,也就是说事务开始的时候,数据库的状态是一致的;在事务结束时,数据库的状态也应该是一致的。

3、隔离性:多个事务可以独立运行,而不会互相影响。

4、持久性:一旦事务被提交以后,对数据库的修改会被永久的保存下来,即使运行数据库软件的机器后来崩溃也是如此。

三、什么是数据库的并发?

     数据库软件支持同时多个用户与数据库进行交互,每个用户都可以同时运行自己的事务,这种事务就是并发事务。

四、事务的隔离级别

下面例子,其中两个并发的事务T1和T2正在访问相同的行,这个例子可以展示出事务处理中可能存在的3中问题。

1、幻像读取:事务T1读取一条指定where子句所返回的结果集。然而事务T2新插入了一行记录,而这行记录正好满足事务T1所使用的查询条件。然后T1又使用相同的查询条件再此对表进行检索,但是却看到了事务T2刚刚说插入的那条数据,而这条刚刚插入的数据就称为“幻像”。

2、不可重复读取:事务T1读取了一条记录,紧接着事务T2又对事务T1读取的那条数据做了修改,然后事务T1又读取了这条记录,发现和刚才读取的数据内容不一样了。这种现象成为"不可重复读"。

3、脏读:事务T1更新了一条记录的内容,但是并没有提交所做的修改。而事务T2读取了更新后的行,然后事务T1又做了回滚操作,取消了修改。这时候发现事务T2所读取的数据无效了(也称为脏数据)。因为T2在读取这行数据的时候,T1并没有提交事务。

为了处理这些可能出现的问题,数据库实现了不同级别的事务隔离性,以防止事务的互相影响。

1、read uncommitted 幻像读、不可重读读和脏读都允许。

2、read committed 允许幻像读和不可重复读,但是不允许脏读。

3、repeaable read 允许幻像读,不允许不可重复读和脏读。

4、serializable 幻像读、不可重读度和脏读都不允许。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值