一、什么是事务?事务的定义:事务由各个mysql语句相互依赖的单独单元中的一个或多个sql语句组成。 整个单元作为一个不可分割的整体,如果单元中的sql语句执行失败或出现错误,则整个单元将回滚,所有受影响的数据将恢复到事务开始前的状态。 如果单元中的所有sql语句都成功执行,则事务将成功执行。
事务的四个属性:
- A、原子:不能分割一个事务。 两者要么执行,要么不执行。 - C、一致性:执行一个事务会将数据从一个一致性状态切换到另一个一致性状态。 - I、隔离性:一个事务的执行不受其他干扰- D、持久性:提交一个事务后,数据库中的数据会永久更改,这四个特性简称为ACID特性。为什么要用事务?
如果不用办公的话,以银行转帐为例,即使一个用户的钱增加了,另一个用户的钱可能也不会改变。 由于事务的原子性、完整性和隔离性,操作事务可以避免这种情况。
Oracle的事务与MySQL的事务区别
Oracle事务仅针对DML操作,即select/insert/update/delete
MySQL事务处理开始:开始事务处理Oracle事务处理开始:第一个DML操作是事务处理的开始
Oracle的提交事务
(1)显示提交: commit
((2)隐藏提交(DDL/DCL/exit ) sqlplus工具) ) ) ) ) )。
注:提交是事务处理从开始到提交的中间内容,提交到ORCL数据库中的DBF二进制文件
二.什么是回滚事务? 3358www.Sina.com/(1)回滚:显示回滚
)2)关闭(隐藏回滚)窗口(sqlplus工具),冻结,电源关闭
注:回滚到事务处理启动的位置
Oracle的回滚事务
什么是回滚点?为什么要设置回滚点?
在操作期间设置的标志位。 用于前后滚动。
什么是回滚点?
如果未设置回滚点,则Oracle必须回滚到事务处理开始的位置,并且在此期间进行的正确操作也会被取消。
为什么要设置回滚点?
savepoint a;
使用savepoint 回滚点,设置回滚点a
rollback to savepoint a;
使用rollback to savepoint,回滚到回滚点a处
注意:如果事务提交后,则之前设置的回滚点就将无效。
主要机制是实例池中三四种类型的事务的隔离级别Oracle之所以能回滚的原因是?
) read uncommitted无法解决任何缺点
) read committed脏读,Oracle默认值
)3) reapatableread不可重复、脏读、MySQL默认值
(4)可序列化幻读、不可重复阅读、肮脏阅读、低效
扩展注意: jdbc/dbutils速度很快,但写起来很麻烦
mybaits速度中等,但写作“中等”
hibernate虽然慢,但写为“爽”
1 .未提交的读取(Read Uncommitted )脏读取(读取未提交的数据)2.提交的读取(Read Committed )这是大多数数据库系统的默认设置只有已提交事务所做的更改才会导致不可重复的读取,而无法读取意味着同一事务正在执行完全相同的select语句。——出现这种情况的原因如下: (1)交叉)2)如果一个数据库由多个实例操作,则同一事务的其他实例在处理该实例时可能会发生新的commit多个commit提交。 在只读模式下,一次会发生结果不一致。 3 .可重复(Repeatable Read )这是MySQL的默认事务隔离级别,在同一事务的多个实例同时读取数据时,在此级别可能会出现的同一数据行问题---幻读当用户读取某个范围内的数据行时,另一个事务会在该范围内插入新行,当用户读取该范围内的数据行时, 可以看到新的“幻影”行InnoDB和Falcon存储引擎同时由多个版本控制) mvcc多版本咨询控制机制解决了这一问题4 .可串行化(serrer ) 简单来说,在要读取的数据的每一行上添加共享锁。 可能导致大量超时现象和锁定竞争MySQL支持的四种事务隔离级别及能够解决的问题
Oracle支持:读命令和序列化
Oracle支持的二种事务隔离级别及能够解决的问题
settransactionisolationlevelserializable