事务的ACID
1,原子性:原子性是说将事务看成一个整体,一个不可分割的单位,操作时要么同时成功,要么同时失败。
2,一致性:一致性是指事务的前后数据的完整性保持一致。
3,隔离性:隔离性是指多个用户并发访问数据库时,数据库给每一个用户开启一个事务,一个事务在操作数据时,不能被其他事务所干扰,并发事务之间要相互隔离。
4,持久性:持久性是指事务一旦被提交,那么对数据库的改变将是永久性的。
事务的隔离级别
1,读未提交:另一个事务修改了数据但未提交,本事务中的select会读到这些违背提交的数据,也叫做脏读。
2,读已提交:事务能看到的数据都是其他事务已经提交修改的数据,也就保证不会看到任何中间性的状态,不会出现脏读。
3,可重复读:保证同一个事务中多次读取的数据是一致的。
4,串行:并发事务之间是串行化的,读取需要获取共享读锁,更新需要获取排他写锁,如果有条件语句,还会获取区间锁,这是最高隔离级别。
不考虑事务的隔离级别会产生什么样的问题?
1,并发事务可能会造成脏读,不可重复读,幻读等问题,这些问题实际上都是数据库读一致性问题,必须由数据库提供一定的隔离机制来解决
什么是脏读?
1,脏读就是一个事务在处理过程中读取了另一个事务未提交的数据。
什么是不可重复读?
1,事务A在多次读取同一数据,事务B在数据A多次读取数据的过程中对数据进行了更新并提交,导致事务A前后读取的数据不一致。
什么是幻读?
1,可重复读的隔离级别解决了不可重复读的问题,保证了同一个事务里查询到的数据都是开始时的状态。
Mysql默认的隔离级别是什么?
1,Mysql默认的隔离级别是可重复读。
2,事务的隔离级别要得到底层数据库引擎的支持,而不是应用程序或者框架的支持。
3,事务的隔离级别越高,越能保证数据的完整性和一致性,同时对并发性能的影响也越大。
4,可以优先把数据库的事务隔离级别设置成Read Committed,它能够避免脏读取,并且有较好的并发性能。尽管它会导致不可重复读和幻读问题,在可能出现这类问题的个别场合,可以由应用程序采用悲观锁或者乐观锁来控制。