MySql数据库事务相关

MqlSQL的事务是由存储引擎所决定的,比如MYISAM,MEMORY,ARCHIVE都不支持事务,而事务的存在则保证了一组查询要么全部成功,要么全部失败。mySql的事务采取的是自动提交的模式,除非显示开始一个事务修改自动提交模式,值得注意的是,修改自动提交对非事务类型的表是无效的,因为它们本身不存在提交和回滚的概念,还有一些命令则是强制自动提交的,如DLL命令、lock table等。
(SHOW VARIABLES LIKE ‘AUTOCOMMIT’
SET AUTOCOMMIT = OFF 或 SET AUTOCOMMIT = 0)

原子性(Atomic)
整个事务包含的所有操作要么全部执行要么全不执行,失败回滚

一致性(Consistent)
数据能够满足完整性约束,两个关联的数据一个改变另一个也随之改变(一致状态)

隔离性(Isolation)
是指多个事务编发执行操作时一个事务的执行不应该影响其他事务的执行
这种属性有时称为串行化,为了防止事务操作之间的混淆,必须串行化或序列请求,使得在同一时间仅有同一请求用于同一数据

持久性(Durability)
一个事务的提交,它对数据库的修改应该永久保存到数据库中,持久性意味着当系统或者介质发生故障时,确保已提交的事务的更新不丢失,可以恢复一个事务被提交

事务隔离级别以及各级别下的并发访问问题

MySQL会利用锁机制创造出不同的事务隔离级别
四种事务隔离级别
读未提交(READ UNCOMMITTED):未提交读也叫读脏,就是事务可以读取其他事务未提交的数据

读已提交(READ COMMITTED):在其他数据库系统比如SQLSERVER默认的隔离级别就是提交读,已提交读就是在事务未提交之前所做的修改其他事务是不可见的

可重复读(REPEARABLE READ):保证同一事务中多次相同的查询结果是一致的,比如一个事务一开始查询了一条记录然后过了几秒钟又执行了相同的查询,保证两次查询结果是相同的,此隔离级别也是mySQL默认隔离级别。

可串行化(SERIALIZABLE):可串行化就是保证读取的范围内没有新的数据插入,比如事务第一次查询得到的某个数据范围,第二次查询也同样得到了相同的结果,中间并没有新的数据插入到该范围中。

并发访问问题

1.更新丢失—MySQL所有的事务隔离级别在数据库层面上均可避免

2.脏读—READ-COMMITED事务隔离级别以上均可避免(已提交读)oracle默认级别

3.不可重复读—事务A在多次读取同一数据的过程中,事务B对数据进行更新并提交,导致事务A多次读取到同一数据时结果不一致

4.幻读—事务A读取若干行数据,事务B以插入或删除行的方式来修改事务A的结果集

发布了1 篇原创文章 · 获赞 3 · 访问量 81

猜你喜欢

转载自blog.csdn.net/yujunlingqwer/article/details/104653118
今日推荐