事务指的是一系列的操作,要么都完成,要么都不完成。即所有操作都成功执行,事务才能成功执行,否则,一旦有操作执行不成功,那么之前执行的操作会被撤销和回滚。
事务的四个特征:原子性( Atomicity )、一致性( Consistency )、隔离性( Isolation )和持续性( Durability )。这四个特性简称为 ACID 特性。
1、原子性。各操作要么都做,要么都不做
2、一致性。事务提交后数据库应处于一致的状态。
3、隔离性。并非执行的事务应该隔离开,互不干扰。
4、持续性。一旦事务成功提交,那么修改后的数据变化是永久性的。
1、Read Uncommitted(读取未提交内容)
假设,A,B客户端先后启动事务,B修改test表的内容未提交,但A在事务未提交时已经可以查看到修改的内容。即各个事务的修改内容会理解被其它事务所看到。
2、Read Committed(读取提交内容)
假设,A,B客户端先后启动事务,B修改test表的内容未提交,A在事务未提交时不能看到修改的内容,必须等到B的事务提交后,A在事务未提交时才能看到修改的内容。即各个事务只能看到自己所修改的内容,其它事务不能看到未提交的事务。
3、Repeatable Read(可重读)
假设,A,B客户端先后启动事务,B修改test表的内容未提交,A在事务未提交时不能看到修改的内容,这时候,B把事务提交后,A在事务未提交时还是不能能看到修改的内容,A必须在自己的事务提交后才能看到B提交事务所修改的内容。即各个事务只能看到自己所修改的内容,且自己的事务未提交时,即使其它事务已经提交,但也不能看到修改的内容。这是MySQL的默认事务隔离级别
4、Serializable(可串行化)
假设,A,B客户端先后启动事务,A先启动事务,B这时候往test表里面插入数据,那么B会进入等待状态,A在事务未提交时,B会一直处于等待插入状态,当A提交事务后,B就会执行插入操作。这是最高的隔离级别,强制使事务的执行有先后顺序,从而解决冲突问题,但可能会导致大量的超时现象和锁竞争。