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

优猫券网站怎么做制作app需要先做网站

优猫券网站怎么做,制作app需要先做网站,揭阳网站建设揭阳,天津工程建设协会网站目录 一、什么是幻读#xff1f; 1.1 幻读的定义 1.2 幻读的示例 1.3 幻读产生的原因#xff1f; 1.4 读已提交#xff08;Read Committed#xff09; 1.4.1 确定事务等级 1.4.2 非锁定读取 准备 示例 结论 1.4.3 锁定读取 准备 示例 分析 结论 1.5 可重复读…目录 一、什么是幻读 1.1 幻读的定义 1.2 幻读的示例 1.3 幻读产生的原因 1.4 读已提交Read Committed 1.4.1 确定事务等级 1.4.2 非锁定读取 准备 示例 结论 1.4.3 锁定读取 准备 示例 分析 结论 1.5 可重复读Repeatable Read 1.5.1 确定事务等级 1.5.2 非锁定读取 准备 示例 结论 1.5.3 锁定读取 准备 示例 分析 结论 二、怎么解决幻读 2.1 提高事务隔离等级 2.2 间隙锁Gap Locking 三、间隙锁 3.1 定义 3.2 工作原理 无间隙锁 有间隙锁 3.3 间隙锁的类型 范围查询 相等查询 参考资料 一、什么是幻读 1.1 幻读的定义 幻读Phantom Read 是数据库事务中的一种并发问题指的是在一个事务执行过程中另一个事务插入、删除或修改了符合查询条件的记录导致前一个事务读取到不同的数据集从而产生“幻觉”般的读操作。 1.2 幻读的示例 具体来说事务A执行过程中事务B插入或者修改了记录导致事务A在相同查询条件下读取到的结果发生了改变。 假设有用户表users包含列username、password、state。 1.事务A查询所有状态启用的用户 select count(id) from users where state1; 2.事务B插入新用户state1 insert into users(username, password, state) values(test11, 123456, 1); 3.事务A再次执行相同的sql select count(id) from users where state1; 事务A两次查询得到了不同的结果。 1.3 幻读产生的原因 1.对表进行了插入或删除 2.事务隔离等级 幻读Phantom Read通常在较低的事务隔离等级中产生如 读已提交READ COMMITTED、可重复读REPEATABLE READ。 读已提交Read Committed可以读取到已提交的记录但无法保证查询过程中数据不被改变因此会发生幻读 可重复读Repeatable Read可以保证事务中多次查询的结果一致但仍然可能出现幻读因为在非锁定读取时允许新记录的插入即事务 A 查询的范围可能会变化。 两种隔离等级下产生幻读的情况看下文具体示例。 1.4 读已提交Read Committed 1.4.1 确定事务等级 查看当前事务隔离等级 SELECT transaction_isolation; 将事务隔离等级设为【读已提交】 #设置事务隔离等级 SET SESSION TRANSACTION ISOLATION LEVEL {level}; #{level}可选项: #读未提交: READ UNCOMMITTED· #读已提交: READ COMMITTED #可重复读: REPEATABLE READ #可串行化: SERIALIZABLE 1.4.2 非锁定读取 准备 准备一组数据进行以下测试事务A执行查询事务B插入一条记录事务A再次执行查询。 示例 1.事务A执行查询 select * from tmp where id2; 2.事务B插入数据并提交 insert into tmp(id,value) values (4, dd); 3.事务A再次执行查询 结论 事务A两次查询结果不一致可以读取到事务B已提交的记录出现【幻读】 1.4.3 锁定读取 准备 准备一组数据进行以下测试事务A执行查询事务B插入一条记录事务A再次执行查询。 示例 1.事务A进行锁定读取 select * from tmp where id 4 for update; 2.事务B在间隙插入数据并提交 insert into tmp(id,value) values (5, dd); 3.事务A再次执行查询两次读取结果不一致发现间隙并没有锁住 并且事务B插入的行已经落库。 分析 然后我们看MySQL文档解释 意思就是在【读已提交】隔离等级下针对锁定读取共享锁or排它锁、UPDATE语句和DELETE语句innodb只锁定索引到的记录锁定记录的前后都能插入新记录。也就说“间隙”并没有被锁住。 再看【间隙锁】这边的解释间隙锁在读已提交隔离等级下在查询和索引扫描被禁用了。 结论 虽然使用了锁定读取但读已提交Read Committed下幻读依然存在。 1.5 可重复读Repeatable Read 1.5.1 确定事务等级 查看当前事务隔离等级 SELECT transaction_isolation; 1.5.2 非锁定读取 准备 准备一组数据进行以下测试事务A执行查询事务B插入一条记录事务A再次执行查询。 示例 1.事务A执行查询 select * from tmp where id4; 2.事务B插入一条记录, 并commit insert into tmp( id, value ) values (5, dd); 3.事务A再次执行查询 select * from tmp where id4; 事务B执行commit后由于事务隔离等级缘故事务A再次查询结果不影响具备可重复读特性事务A结束后再次查询多了一条数据5, ‘dd’。 结论 在可重复读Repeatable Read隔离等级下事务内部具备可重复读特性 但由于“间隙”并未锁住非锁定读取会出现“幻读”。 1.5.3 锁定读取 准备 准备一组数据进行以下测试事务A执行查询事务B插入一条记录事务A再次执行查询。 示例 事务A执行查询 select * from tmp where id4 for update; 事务B插入一条记录 insert into tmp( id, value ) values (5, dd); 这时发现插入操作被阻塞了。 分析 我们看一下执行的查询语句 select * from tmp where id4 for update; Id4 所在的行Id4 与 id6 之间的间隙Id6 所在的行Id6 之后的间隙 这就意味着在间隙插入记录会被阻止直到事务A结束。 共享锁与示例的排它锁相同都是通过阻止其他会话变更来避免对当前会话的影响。 UPDATE语句、DELETE语句与锁定读取Locking Reads同理在执行时会根据使用的查询条件进行加锁 相等、inInnoDB只锁定找到的索引记录范围BETWEEN、、InnoDB锁定扫描的索引范围 要注意的是对于使用唯一索引的语句完全没必要进行加锁。 注 我们知道默认情况下MySQL是在autocommit开启的状态下运行。开启事务START TRANSACTION后自动提交模式(autocommit)会隐式禁用所有的纯SELECT语句会被转化成SELECT.....LOCK IN SHARE MODE, 但是如果想要锁住间隙或是锁住索引记录的话需要显示触发锁定行为。 结论 在可重复读Repeatable Read隔离等级下针对锁定读取共享锁or排它锁、UPDATE语句和DELETE语句不会出现“幻读”。 二、怎么解决幻读 2.1 提高事务隔离等级 使用可串行化Serializable提事务隔离等级来避免。在可串行化隔离等级下,数据库会对查询和写进行加锁确保事务的完全顺序执行但是并发效率低下。 2.2 间隙锁Gap Locking 间隙锁是加在索引记录之间间隙的锁又或者是在索引区间第一条记录之前、或最后一条记录之后。 示例 select * from users where age between 10 and 30 FOR UPDATE;  age10-30范围内所有现有值之间的间隙都被锁定防止其他事务将值等于15插入列age中无论该列中是否已有该值。 三、间隙锁 3.1 定义 间隙锁Gap Lock是一种数据库锁定机制常见于支持行级锁的数据库如 MySQL 的 InnoDB 存储引擎中主要用于解决并发事务中的“幻读”问题。 3.2 工作原理 假定有数据表 ----------- | id | title | ----------- |  1 | aa | |  2 | bb | |  3 | cc | ----------- 无间隙锁 事务A查询id 2 的记录并锁定这条记录然后事务B插入一条id4的新纪录事务A再次查询时会得到不同的结果集。 有间隙锁 事务A执行查询 id 2时这条查询会锁定 id 2 的记录、所有行之间的间隙。 3.3 间隙锁的类型 范围查询 当事务执行范围查询如BETWEEN、、等时数据库会在查询范围内加上间隙锁。 例如 select * from tmp where id 5 for update; 可重复读Repeatable Read隔离等级下可能会锁定 id 5 的所有间隙. 相等查询 当事务执行相等查询如 时数据库会锁定对应的索引记录。如果索引记录不存在则会锁定对应的间隙防止其他事务插入重复的记录。 示例 ----------- | id | value | ----------- |  2 | aa    | |  4 | bb    | |  6 | cc    | ----------- 事务A, 执行查询, 锁住id5的间隙 select * from tmp where id5 for update; 事务B, 尝试在id5插入数据 insert into tmp( id, value ) values ( 5, bb ); 发现事务B在事务A未结束的情况下一直被阻塞直至超时 参考资料 MySQL数据库事务隔离等级The InnoDB Engine: Transaction Isolation Levels InnoDB一致性非锁定读取The InnoDB Engine | Consistent Nonlocking Reads InnoDB幻影行幻读The InnoDB Engine | Phantom Rows InnoDB间隙锁The InnoDB Engine | Gap locking
http://www.w-s-a.com/news/722632/

相关文章:

  • 上海网站建设市场医药网站怎么做
  • 宁夏成城建设集团网站网店美工课本
  • 哪些网站的简历做的比较好政务服务 网站 建设方案
  • 如何建设个人网站凡科怎么样vps安装wordpress后怎样登录
  • 学seo朝阳区seo
  • 网站开发团队成员皮具网站建设
  • 国外外贸需求网站响应式布局网页
  • 手机端便民服务平台网站建设昆明网络哪家好
  • 产品网站建设找哪家舟山信息港
  • 唐山网站建设汉狮怎么样seol英文啥意思
  • 深圳小程序网站开发公司网页制作模板视频教程
  • 电子商务网站开发开题报告wordpress更改后台地址
  • 网站静态前端是什么工作
  • 餐饮门户网站 方案怎么做创业好项目
  • 做百度手机网站推广普通话的宣传标语
  • 记事本可以做网站吗网站服务器是主机吗
  • 手机网站被拦截怎么办怎么解决东营建设信息网网
  • 外贸网站模板免费微信网站开发技术
  • 视频盗版网站怎么做福州网站seo
  • 成都金铭 网站建设做网站包含的技术
  • 长沙的网站建设公司哪家好做网站应选那个主题
  • 公司网站百度搜不到如何自己做一个网站
  • 学生如何建设网站网站开发程序
  • 网站建设公司哪家好 皆来磐石网络网站建设"淘宝网" 在颜色选取和搭配方面有哪些值得学习的地方.
  • 网站如何做移动规则适配北京住房与城乡建设部网站
  • 课堂阵地建设网站wordpress运行机制
  • 网站建设的需求方案企业网站建设费用明细
  • 创口贴网站模板京创影视app
  • 团购网站建设目的网站有很多304状态码
  • 运用阿里云怎么做网站外资企业可以在中国境内做网站吗