MySQL事务的基础学习以及心得分享
事务是逻辑上的一组操作,组成这组操作的各个单元,要不全都成功要不全都失败,这个特性就是事务,狼蚁网站SEO优化就是关于MySQL事务学习中的心得分享
事务的特性
1.原子性(Atomicity)原子性是指事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生。
2.一致性(Consistency)在一个事务中,事务前后数据的完整性必须保持一致,可以想象银行转账、火车购票。
3.隔离性(Isolation)多个事务,事务的隔离性是指多个用户并发访问数据库时, 一个用户的事务不能被其它用户的事务所干扰,多个并发事务之间数据要相互隔离。
4.持久性(Durability)持久性是指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,接下来即使数据库发生故障也不应该对其有任何影响。
写这些概念呢,是有点绕!绕就绕吧!反正也不是我规定的,这是官方的,解释是我编的!!!
事务的并发访问问题
如果我们在不考虑隔离性问题时,事务是存在三种并发访问问题的。
1.脏读在一个事务中,当读取数据时,读到了另一个事务未提交的数据。
比如A账户给B账户转了1块钱,A没有提交事务,被B账户通过脏读看到了,这时,B就会以为A已经把钱转过来了,这时,A账户回滚事务。其实钱就没给B转过去,B自己本身以为A已经转过去了,,,有点绕,估计是我描述到绕!
看代码
update aount set money=money+1 where name='B'; --此时A去通知B update aount set money=money -1 where name='A';
2.不可重复读在一个事务中,两次读取的数据内容不一致,这是因为在查询时,有时间间隔,数据被另一个事务已经修改提交了,那就会出现问题。
3.幻读/虚读在一个事务中,两次读取的数据量不一致。
事务的隔离级别
上面介绍了3种事务并发问题!现在介绍一下数据库提供的解决方案!
1.read unmitted : 读取尚未提交的数据 这个最低级,效率肯定最高,哪一个问题都不能解决。
2.read mitted读取已经提交的数据 可以解决脏读 。
3.repeatable read重读读取可以解决脏读 和 不可重复读 。
4.serializable串行化可以解决脏读不可重复读和虚读,效率最差,相当于锁表,开发中一般不用。
上面的“2”是oracle数据库默认设置,“3”是mysql数据库默认的设置。
狼蚁网站SEO优化呢我就重点解释一下mysql数据库在上面各种事务隔离级别上的演示
介绍两个语法
1.查看mysql数据库默认的隔离级别select @@tx_isolation
如图
2.设置mysql的隔离级别set session transaction isolation level 事务的隔离级别
如图
事务的隔离级别演示
注意如果要自己模拟要开启两个mysql客户端,也就是模拟两个用户!
1.read unmitted
如图
我通过语法将数据库的事务隔离级别改为了read unmitted。
我有一张aount表。
如图窗口一
窗口二
数据库表原始数据money都是5000,当我启动事务后,在zhangsan账户增加了1000和在李四账户减去了1000,我的事务还未提交,我查询数据库表时,数据已经发生变化,这就是脏读和不可重复读!
幻读/虚读我就不掩饰了,同样存在!
2.read mitted
如图
我将数据库事务隔离性改为了read mittted。
还是上面那张表
如图窗口一
窗口二
数据库表zhangsan账户的money和lisi账户的money都发生了变化,我未提交事务,在另一个窗口事务开启下查询时,没有出现脏读,当我提交事务时,在另一个窗口的事务下查询,出现了不可重复读的情况,这样可以避免脏读,查询时已经出现不可重复读和幻读/虚读!
3.repeatable read
如图
我将数据库事务隔离性改为了read mittted。
还是上面那张表
如图窗口一
窗口二
我在两个窗口都开启了事务,当窗口一进行数据操作后,并进行事务提交,在窗口二的事务开启情况下,我去查询,没有查询到刚才窗口一的数据操作记录,这样就避免了脏读和不可重复读。
有人说也避免了虚读/幻读,其实没有。
看图
我在操作lisi账户时,数据只是发生修改的变化,当我修改wangwu这个账户时,再去查询出现了wangwu,账户的数据,其实在我未操作前,wangwu账户的数据是查询不出的。这就是幻读/虚读!
如果不理解幻读/虚读这块,可以查一下InnoDB。
4.serializable
我就不演示了,开发不建议用,效率又慢,所有的问题都能避免!!
一下
事务隔离级别的性能
read unmitted>read mitted>repeatable read>serialazable
事务隔离级别的安全性
read unmitted<read mitted<repeatable read<serialazable
mysql 事务控制
开启事务start transaction;
提交mit;
回滚rollback;
编程语言
- 宿迁百度关键词排名指南:实现精准营销的关键
- 四川SEO优化怎么做网络推广
- 立昂技术备案老域名收购:如何为您的业务赋能
- 安徽百度关键词seo贵不贵,一般需要多少钱
- 吉林百度快照排名怎么做电话营销
- 多伦新手做SEO怎么做
- 甘肃优化关键词排名推广怎么做论坛营销
- 沙雅SEO网站推广:提升您的在线可见性
- 四川SEO优化如何提升销售额和销售量
- 聂荣网站排名优化:提升网站可见性的全方位指
- 涞水SEO:提升地方企业在线可见性的策略
- 辽宁百度seo排名怎样做网站排名
- 临湘哪有关键词排名优化:提升网站可见度的关
- 黑龙江百度网站优化有没有优惠
- 凉城优化关键词排名推广:提升您的网络可见性
- 萝北整站优化:提升您网站流量和排名的全面指