事务小结

1、事务定义:同生共死、同时成功或者失败的一组操作数据的操作;

2、设置手动提交事务:set autocommit = 0;  savepoint(回滚点);  rollback(回滚); commit(提交);

3、mysql 默认是自动体积事务,也就是一句sql是一个事务;oracle默认手动提交事务,

4、原子性:每个事务是一个原子

一致性:事务中减少和增加保持整体的一致性

隔离性:当事务操作过程中,对别的事务存在隔离性

持久性:事务提交后数据被持久到数据库,不能还原

5、数据库不设置隔离级别容易存在的错误:

脏读:读到别的事务中未提交的数据

虚度:同一事务中先后两次查询的数量是不一致的

不可重复读:同一个事务中读到数据是不一致的(存在别的事务update的数据)

6、数据库为了解决三中隔离性问题提供了四种隔离级别:

Serializable( 序列):事务完全隔离,不支持脏读、虚度、不可重复读

Repeatable Read: mysql默认支持隔离级别,支持虚度,不支持不可重复读和脏读

Read Commited: oracle默认支持隔离级别,支持虚度、不可重复读,不支持脏读

Read Uncommited : 支持脏读、虚度、不可重复读

7、关于丢失更新问题常见两种解决办法:

1):悲观锁:假设发生丢失的几率很大----利用数据库内部锁机制

 常见数据锁:读锁(共享锁)、写锁(排他锁)

* * 一条数据可以有多个读锁(共享锁),但一条数据只能有一个写锁(写锁和任何锁都互斥)

* * 数据修改会自动添加排他锁,

* * 加锁结合事务使用,事务中加锁,当事务结束锁自动释放。

2):乐观锁

利用数据库记录版本号区分数据是否被修改,timestemp会自动更新

你可能感兴趣的:(事务小结)