当前位置: 首页 > news >正文

阳江营销网站开发中山专业网站建设公司

阳江营销网站开发,中山专业网站建设公司,桂林最新情况最新消息今天,新手做网站需要哪些软件目录 1.为什么要有隔离性 2.事务的隔离级别 读未提交 读提交 可重复读 串行化 3.演示事务隔离级别的操作 查看与设置事务的隔离级别 演示读提交操作 演示可重复读操作 1.为什么要有隔离性 在真正的业务场景下,MySQL服务在同一时间一定会有大量的客户端进程…

目录

1.为什么要有隔离性

2.事务的隔离级别

读未提交

读提交

可重复读

串行化

3.演示事务隔离级别的操作

查看与设置事务的隔离级别

演示读提交操作

演示可重复读操作


1.为什么要有隔离性

        在真正的业务场景下,MySQL服务在同一时间一定会有大量的客户端进程并发的去访问同一个MySQL服务,而且一定会同一时间有多个客户端访问和操作同一张表。而且我们在业务层面,一个事务很多情况下都需要多条SQL语句组成,那么这样的话,操作虽然是原子性的,但是过程却可以明显的分成执行前、执行中以及执行后三个阶段。

        那么在执行中的阶段,一个客户端在执行事务操作数据库表,但是事务还没有完成提交,其其他客户端如果查看到该客户端没有提交的数据,会不会有问题呢?如果客户端查看了另一个客户端没有提交的数据,但是另一个客户端最后执行了回滚操作,那么该客户端查看的数据就不是真实的数据了,出现了数据的二义性。

        所以说为了保证数据库在执行事务操作过程中尽量不受到干扰,就有了一个重要的特性就是隔离性。但是也并非客户端在执行事务的时候,不能让其他客户端查看自己没有提交的数据,在一些更关注数据的实时性的业务操作中,就能够接受短暂的数据不一致问题。

2.事务的隔离级别

        事务的隔离级别分为读未提交、读提交、可重复读、串行化,不同的隔离界别可以让蛇舞收到不同程度的干扰,可以用于不同的业务场景。对于隔离级别的实现基本上都是通过锁实现了,因为多客户端访问也相当于是多线程的并发访问,所以说还是要用锁。对于不同的隔离级别,锁的使用是不同的,常见的有表锁、行锁、读锁、写锁等等。

        对于事务的隔离级别是相对于自己而言的,如果说一个客户端A是读未提交,客户端B是读提交,那么客户端B想要提取客户端A在事务中操作的结果就需要在客户端A提交之后才可以看得到。

读未提交

        该隔离级别属于是最低的隔离界别,相当于没隔离一样,所有的事物都可以看到其他事物没有提交的执行结果,这种隔离界别在实际的业务中基本上是不会使用的。会有很多的并发问题,例如脏读、幻读、不可重复读等问题。

事务的并发问题

脏读

一个事务读取到了另一个事务未提交的操作结果就是脏读。由于未提交的事务数据可能回因为事务的回滚而改变,所以读到的数据可能回出问题。

幻读

在一个事务内,按照某个条件进行数据查询的时候,第一次查询和第二次查询的结果集不同。可能是因为其他事务在这个期间对数据进行了操作。

不可重复读

在一个事务内,对于同一个数据的多次读取结果不一致叫做不可重复读。可能因为在该事务执行期间,其他事务对这个数据进行了修改等操作,导致了读取数据的变化,造成了该问题。

        脏读更加聚焦于数据的插入和删除操作,两次查看的数据量不一样,而不可重复读更聚焦于数据的修改和删除的操作,两次查看的数据量可能一样,但是里面的数据不一样。

读提交

        该隔离级别是大多数数据库的默认隔离级别(但不是MySQL的),也是普遍理解上最合适的一个隔离级别。该隔离级别规定了,一个事务只能看到其他的已经提交的事务所改变的数据操作。这种级别的隔离就不会产数据的脏读问题了。因为只能读取到提交之后的存放在磁盘当中的永久化数据。但是还是会有不同重复读取的问题,因为多次查看表数据的时候,在此其他其他事务可能回修改表并提交事务。

可重复读

        这是MySQL的默认隔离级别,他确保同一个事务,在执行的过程中多次读取操作数据的时候,回看到同样的数据行。使得数据不会出现脏读、不可重复读取的问题,但是会有幻读的问题。

串行化

        串行化是数据库事务隔离级别中最高的级别。在串行化隔离级别下,事务的执行是顺序的,一个事务必须等待前一个事务完成(提交或者回滚)之后才能开始执行,在等待过程中就会放入等待队列。就好像多个事务是在一条单行道上排队依次通过一样,完全避免了并发事务之间的相互干扰。他会在每个读的数据行上面加上共享锁,但是加锁就会有锁的竞争问题,会大大降低效率。这种级别不会有任何的事务之间相互影响的问题了。

3.演示事务隔离级别的操作

查看与设置事务的隔离级别

        事务隔离级别的设置分为全局的和会话级别的设置,如果设置会话级别的话,就相当于是对于一个客户端连接的设置,关闭之后再重启还是会重制事务的隔离级别,会按照全局的事务隔离界别来定义。

        对于设置会话级别的事务隔离性不需要重启服务器,但是设置全局级别话需要重启,因为事务的隔离级别是受会话影响的,客户端启动的会话隔离级别是从全局隔离级别复制过来的,所以说全局隔离级别决定了客户端启动的时候的事务隔离级别,但是事务在操作的时候,是看会话的事务隔离级别的。

查看语法:SELECT @@[SESSION | GLOBAL].TRANSACTION_ISOLATION;

设置语法:SELECT [SESSION | GLOBAL] TRANSACTION ISOLATION LEVEL { READ UNCOMMITTED | READ COMMITTED | REPEATABLE READ | SERIALIZABLE };

演示读提交操作
//客户但A————————————————————————————————————————————————————————
//设置会话隔离级别为读提交
mysql> set session transaction isolation level read committed;
Query OK, 0 rows affected (0.00 sec)//开启事务
mysql> begin;
Query OK, 0 rows affected (0.00 sec)//插入与提交事务
mysql> insert into account values(1, '张三', 100), (2, '李四', 200);
Query OK, 2 rows affected (0.00 sec)
Records: 2  Duplicates: 0  Warnings: 0mysql> commit;
Query OK, 0 rows affected (0.01 sec)//客户但B————————————————————————————————————————————————————————
//设置会话隔离级别为读提交
mysql> set session transaction isolation level read committed;
Query OK, 0 rows affected (0.00 sec)//开启事务
mysql> begin;
Query OK, 0 rows affected (0.00 sec)//在客户端A提交之前查看表数据
mysql> select * from account;
Empty set (0.00 sec)//在客户端A提交之后查看表数据
mysql> select * from account;
+----+--------+--------+
| id | name   | blance |
+----+--------+--------+
|  1 | 张三   | 100.00 |
|  2 | 李四   | 200.00 |
+----+--------+--------+
2 rows in set (0.00 sec)//提交数据
mysql> commit;
Query OK, 0 rows affected (0.00 sec)

        该操作,客户端B在事务期间,两次查看表数据的数据不一样,这就是不可重复读。

演示可重复读操作
//客户但A————————————————————————————————————————————————————————
//设置会话隔离级别为可重复读
mysql> set session transaction isolation level repeatable read;
Query OK, 0 rows affected (0.00 sec)//开启事务,插入数据,提交事务
mysql> begin;
Query OK, 0 rows affected (0.00 sec)
mysql> insert into account values(3, '王五', 300);
Query OK, 1 row affected (0.00 sec)
mysql> commit;
Query OK, 0 rows affected (0.00 sec)//客户但B————————————————————————————————————————————————————————
//设置会话隔离级别为可重复读
mysql> set session transaction isolation level repeatable read;
Query OK, 0 rows affected (0.00 sec)//开启事务
mysql> begin;
Query OK, 0 rows affected (0.00 sec)
//客户端A提交之前
mysql> select * from account;
+----+--------+--------+
| id | name   | blance |
+----+--------+--------+
|  1 | 张三   | 100.00 |
|  2 | 李四   | 200.00 |
+----+--------+--------+
2 rows in set (0.00 sec)//客户端A提交之后
mysql> select * from account;
+----+--------+--------+
| id | name   | blance |
+----+--------+--------+
|  1 | 张三   | 100.00 |
|  2 | 李四   | 200.00 |
+----+--------+--------+
2 rows in set (0.00 sec)//提交事务
mysql> commit;
Query OK, 0 rows affected (0.00 sec)//自己提交事务之后查看表数据
mysql> select * from account;
+----+--------+--------+
| id | name   | blance |
+----+--------+--------+
|  1 | 张三   | 100.00 |
|  2 | 李四   | 200.00 |
|  3 | 王五   | 300.00 |
+----+--------+--------+
3 rows in set (0.00 sec)

http://www.yayakq.cn/news/246034/

相关文章:

  • 专门设计网站的公司叫什么专业做外贸网站的公司
  • 德阳建设银行招聘网站网站建设项目的预算
  • 旌阳区黄河开发建设网站wordpress激活码充值
  • 网站做等级保护国外做的比较好的网站有哪些
  • 福建建设厅网站官网东莞seo建站投放
  • 商业网站策划书范文百度正版下载
  • 成都建设银行网站做网站的软件叫什么软件
  • 网站可以有二维码吗北京vi设计公司有哪些
  • 有没有免费做编辑网站管理系统做文字图片的网站
  • 为企业规划一个网站上海注册公司注册资金
  • 国内外优秀设计网站wordpress建站网
  • 网站版面布局对seo怎么自己做网站挂到百度上
  • 工信部网站备案登录小城镇建设有关网站
  • 微网站 杭州wordpress用户注册后台
  • 3d建模网站公司品牌logo设计
  • 陕西网站设计视频网站建设难吗
  • 免费注册163邮箱网站内部优化策略
  • 手机网站开发公司哪家最专业广西南宁网站设计
  • 格力电器的网站建设评价成立公司的可行性报告
  • 外贸网站推广 雅虎问答有用吗jsp制作网站
  • 安徽望江县城乡建设局官方网站上海市建设执业注册中心网站
  • 成都网站设计成功柚v米科技东莞松山湖凯悦酒店
  • 5173游戏交易网站源码网站开通流程
  • wordpress小说网站主题有哪些网站可以免费看电影
  • 一个网站的二维码怎么做建立音乐网站
  • 网站换程序301杭州百度快照优化公司
  • 千享科技网站建设合肥网站优化平台
  • 网站开发需要哪些人才养老保险网站
  • 网站名超链接怎么做深圳航空公司订票电话
  • 课程精品网站开发建筑工程最新规范查询