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

十大网站免费常用网站建设技术是什么意思

十大网站免费,常用网站建设技术是什么意思,小广告怎么举报,wordpress 邮箱变更目录 一、什么是幻读#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 间隙锁G****ap Locking 间隙锁是加在索引记录之间间隙的锁又或者是在索引区间第一条记录之前、或最后一条记录之后。 示例 select * from users where age between 10 and 30FOR 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.zqtcl.cn/news/596064/

相关文章:

  • 室内设计师灵感网站汕头网站制作全过程
  • 网站改版是什么意思自己做的小网站分享
  • 秦皇岛公司做网站wordpress社交分享非插件
  • 做物流的都是上什么网站网络维护工程师工资多少
  • 莱芜市网站建设设计设计师互联网
  • 中国设计网网址山东seo网络营销推广
  • 常德市做公司网站的公司网站连接如何做二维码
  • 淮安网站设计蜜雪冰城网络营销论文
  • 网页设计与网站建设 入门必练宝安网站建设(深圳信科)
  • 黄石网站开发joomla 宠物网站模板
  • 网站建设公司成就需要详细填写
  • 培训机构网站如何建设商务网站建设目的
  • 好看响应式网站模板制作商城公司
  • 网站的主题有哪些专业做律师网站的公司
  • 大连做网站 选领超科技网站建设公司的成本有哪些方面
  • 文章网站是怎么做的宁波网站建设lonoo
  • 做网站学cdr吗企业年金险是什么意思
  • 芜湖炎黄做的网站北京高端网站公司哪家好
  • 帮人做网站一定要先收费网站构建免费
  • 营销型网站的优缺点如何在腾讯云做网站
  • 现在做网站怎么样网站运营与管理规划书
  • 国际物流公司网站建设有关应用网站
  • 网站后台维护技能娱乐公司网站模板
  • 有建网站的公司吗p2p理财网站开发要求
  • 做私单的网站高端html5网站设计工作室织梦模板 dedecms5.7
  • 视频网站切片怎么做如何做网站结构及栏目策划
  • 公司和网站备案查询龙江网站建设公司
  • 建一个平台网站需要多少钱安徽网站建设大全
  • 做网站接广告网站注册页面怎么做
  • 西安建站价格表电脑做视频的网站比较好