事务是指针对数据库的一组操作,这组操作由一条或者多条sql语句组成。事务的执行要么全部成功,要么返回到事务开始前的状态。
//开启事务
START TRANSACTION
//提交事务
COMMIT
//取消提交事务即回滚
ROLLBACK
事务四大特性
- 原子性。一个事务中的sql语句要么全部执行成功,要么全部执行失败,中间如果执行错误会返回到事务开始前的状态。
- 一致性。数据库总是从一个一致性状态到另外一个一致性状态,保证数据库不会返回到一个未处理的事务中。
- 隔离性。一个事务在执行过程中并不会受到其他事务的影响。
- 持久性。指事务一旦提交,对数据库的修改时持久性的。
并发事务的问题
- 脏读。事务读取其他事务未提交的数据。
- 不可重复读。一个事务在读取某个数据一段时间后再去读取该数据时,两次读取的结果不一致。
- 幻读。一个事务按照相同的查询条件进行查询时,读取了其他事务新增的数据。
事务的隔离级别
- 读未提交。一个事务可以读取到其他事务未提交的数据。因此会造成脏读。
- 读已提交。事务只能读取其他事物已经提交的数据,避免了脏读问题。
- 可重复读。解决了脏读与不可重复读问题。在读取数据时,在行记录上加上共享锁避免其他事物对该数据进行修改,因此解决了不可重复读问题。但是并不能避免其他事务insert插入新的数据因此造成幻读问题。
- 可串行化。在每个读的数据行上加锁,使其不会发生冲突,避免了脏读,不可重复读以及幻读问题。