Mysql事务以及加锁机制详解
这篇文章主要讲解了"Mysql事务以及加锁机制详解",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"Mysql事务以及加锁机制详解"吧!
事务的特征ACID,即原子性、一致性、隔离性、持久性。
原子性保证一个事务为一个最小的单元,内部不可分割;
一致性保证事务中的每个操作线程不可单独提交,成功则一起提交,不成功则事务回滚;
隔离性保证不同事务间看到的数据视图相互独立,相互隔离(隔离级别可设置);
持久性保证事务提交后数据会持久的保存下来;
sql规范定义的事务的隔离级别:
1.READ UNCOMMITTED(读取未提交内容)
所有事务可以看到未提交事务的执行结果,本隔离级别很少用到实际应用中,读取未提交的数据,又称为"脏读"。
2.READ COMMITTED(读取提交内容)
大多数的默认隔离级别是此级别,但不是默认的。一个事务在开始的时候只能看见已提交事务所做的改变。一个事务从开始到提交前所做的任何改变都是不可见的,除非提交。这种隔离级别也称为不可重复读。
3.REPEATABLE READ(可重复读)
此隔离级别是为了解决可重复读隔离级别导致的问题即一个事务多个实例并发读取数据时会看到不同的结果。此隔离级别不会看到其他事务提交后的结果,即事务即使提交了我也看不到。此级别也称为"幻读"。
4.SERIALIZABLE(可串行化)
可串行化是最高的隔离级别,它通过强制事务排序,使之不可重读,解决了幻读的问题。此隔离级别会在每个读的数据行上加共享锁,使用这种隔离级别会产生大量的超时现象,一般实际开发中不会用到。
mysql加锁机制 :
根据类型可分为共享锁(SHARED LOCK)和排他锁(EXCLUSIVE LOCK)或者叫读锁(READ LOCK)和写锁(WRITE LOCK)。
根据粒度划分又分表锁和行锁。表锁由数据库服务器实现,行锁由存储引擎实现。
mysql提供了3种事务型存储引擎,InnDB、NDB Cluster和Falcon。
一个事务执行的任何过程中都可以获得锁,但是只有事务提交或回滚的时候才释放这些锁。这些都是隐式锁定,也可以显式锁定,InnoDB支持显式锁定,例如:
SELECT .... LOCK IN SHARE MODE (加共享锁)
SELECT .....FOR UPDATE(加排他锁)
感谢各位的阅读,以上就是"Mysql事务以及加锁机制详解"的内容了,经过本文的学习后,相信大家对Mysql事务以及加锁机制详解这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!