事务相关概念

事务是一组操作的集合,这些操作要么一起提交成功,要么一起失败;

事务的四大特性:ACID:

原子性(Atomicity):事务是不可分割的最小操作单元,要么全部成功,要么全部失败。

一致性(Consistency):事务完成时,必须使所有的数据都保持一致状态。

隔离性(Isolation):数据库系统提供的隔离机制,保证事务在不受外部并发操作影响的独立 环境下运行。

持久性(Durability):事务一旦提交或回滚,它对数据库中的数据的改变就是永久的。 上述就是事务的四大特性,简称ACID。

事务并发问题

脏读:事务A读取了事务B未提交的数据。

不可重复度:事务A两次读取同一条数据的结果不一样;

幻读:一个事务查询时没有发现记录R,但插入记录R时却无法插入,再次查询R时仍未发现。这称为幻读。

  1. 开启事务A,查询id为5的记录,结果是没有该记录;
  2. 开启事务B,插入id为5的记录,并提交;
  3. 事务A,插入id为5的记录,提示主键冲突,说明id为5的记录存在
  4. 事务A,再次查询id为5的记录,结果仍然没有该记录;

总结:对于事务A来说,id为5的记录不存在,但却插入不上,这就是幻读。

事务的隔离级别

隔离级别 脏读 不可重复读 幻读
Read uncommitted (读未提交) 会出现 会出现 会出现
Read committed (读已提交,Oracle默认) 能解决 会出现 会出现
Repeatable Read(可重复读,MySQL默认) 能解决 能解决 会出现
Serializable (串行化) 能解决 能解决 能解决

事务的隔离级别由上表,从低到高,隔离级别越高性能越差

MySQL事务相关操作

START TRANSACTION 或 BEGIN ;--开启事务
commit;--提交事务
rollback;--回滚事务
 SELECT @@TRANSACTION_ISOLATION;--查看事务的隔离级别
 
 --修改事务的隔离级别
SET [ SESSION | GLOBAL ] TRANSACTION ISOLATION LEVEL { READ UNCOMMITTED |
READ COMMITTED | REPEATABLE READ | SERIALIZABLE }