MySQL的事务隔离级别
属性
原子性
原子性是指一个事务必须被视为一个不可分割的最小的工作单元,只有事务中所有的数据库操作都执行成功,才算整个事务执行成功。事务中如果有任何一个SQL语句执行失败,已经执行成功的SQL语句也必须撤销,数据库的状态退回执行事务前的状态。
一致性
一致性是指在事务处理时,无论执行成功还是失败,都要保证数据库系统处于一致的状态,保证数据库系统不会返回到一个未处理的事务中。MySQL中的一致性主要由日志机制实现,通过日志记录数据库的所有变化,为事务恢复提供了跟踪记录
隔离性
隔离性是指当一个事务在执行时,不会受到其他事务的影响。保证了未完成事务的所有操作与数据库系统的隔离,直到事务完成为止,才能看到事务的执行结果。隔离性相关的技术有并发控制、可串行化、锁等。当多个用户并发访问数据库时,数据库为每个用户开启的事务,不能被其他事务的操作数据所干扰,多个并发事务之间要相互隔离
持久性
持久性是指事务一旦提交,其对数据库的修改就是永久性。但是打雷劈服务器不算
操作
开启事务
mysqli_query($link,'start transaction')
或者mysqli_query($link,'begin')
回滚事务
mysqli_query($link,'rollback')
提交事务
mysqli_query($link,'commit')
事务使用注意:事务不能内嵌事务,事务处理只是针对数据表里面的数据操作,不针对表结构和数据库。
隔离级别
读取未提交
可以读到其他事务未提交的数据,又叫脏读
读取提交
只能读取其他事务已经提交的数据,避免了脏读数据的现象,但是不可以重复读
可重复读
是MySQL的默认级别,但是会出现幻读的现象。
可串行化
最高级别的隔离级别,它会在每个读取的数据上加锁,从而解决脏读,不可重复读和幻读的问题。但是由于加锁可能导致超时和锁竞争想象。因此除非为了数据的稳定性,需要强制减少并发的情况,才会选择这个级别
特别感谢
参考博客:事务的特性和隔离级别
本作品采用《CC 协议》,转载必须注明作者和本文链接