1.事务特性:
原子性:指事务是一个不可再分割的工作单位,事务中的操作要么都发生,要么都不发生。如果有任一任务执行失败,则整个工作单元或事务就会被终止。即此前对数据所作的任何修改都将被撤销。如果所有任务都被成功执行,事务就会被提交,即对数据所作的修改将会是永久性的。
一致性:一个事务执行之前和执行之后数据库都必须处于一致性状态(就是不管怎么加减,总数是不变的)。
隔离性:多个事务并发访问时,事务之间是隔离的,一个事务不应该影响其它事务运行效果。
持久性:持久性意味着当系统或介质发生故障时,确保已提交事务的更新不能丢失。
2.隔离级别:
1.读未提交(脏读):
一个事务没有commit,你就读了,可能存在的情况是它回滚,你之前读的就是修改的数据,但实际数据没有修改。
2.读提交(不可重复读):
若有事务对数据进行更新(UPDATE)操作时,读操作事务要等待这个更新操作事务提交后才能读取数据,可以解决脏读问题。
提升级别后,不存在脏读,即事务A未commit,你读的不会是它修改的数据,还是原始数据,它commit后,你读的就是修改后的数据。这两次读的数据不一样,可能就叫不可重复读。
3.重复读(幻读):就是在开始读取数据(事务开启)时,不再允许修改操作(update),但当你查记录数时,另外一个执行insert操作,造成两次记录数不一样。
4.序列化:事务串行化顺序执行,事务只能一个接着一个地执行。
幻读:在事务中,前后两次查询,记录数量是不一样的。和不可重复读差不多,这个是查总记录数。mysql可重复读一并解决了幻读。
不可重复读对应的是修改,即UPDATE操作。但是可能还会有幻读问题。因为幻读问题对应的是插入INSERT操作,而不是UPDATE操作。