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会自动更新