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

购物网站建设网站龙岗建设招标局网站

购物网站建设网站,龙岗建设招标局网站,大连市自然资源局,无锡seo推广公司一)事务的特性: 一致性:主要是在数据层面来说#xff0c;不能说执行扣减库存的操作的时候用户订单数据却没有生成 原子性:主要是在操作层面来说#xff0c;要么操作完成#xff0c;要么操作全部回滚#xff1b; 隔离性:是自己的事务操作自己的数据#xff0c;不会受到到其… 一)事务的特性: 一致性:主要是在数据层面来说不能说执行扣减库存的操作的时候用户订单数据却没有生成 原子性:主要是在操作层面来说要么操作完成要么操作全部回滚 隔离性:是自己的事务操作自己的数据不会受到到其他事务的影响 持久性:事务进行提交以后数据要真实的修改在磁盘上面不能说系统宕机数据就丢失了 二)脏写: 2.1)数据丢失或者是脏写:当有两个事务或者是多个事务选择同一行然后基于最初的值选定该行的时候由于每一个事务都不知道其他事务的存在就会发生数据丢失更新问题最后的更新覆盖了其他事务所做的更新 乐观锁:就是假设两个事务并发执行一个事务想要把库存扣减3另一个事务想要把库存扣减2那么两个事务并发执行的时候此时就会发生脏写问题如何解决呢可以使用版本号机制给库存字段再加上一个版本号每进行一次数据的更新操作版本号1此时就可以解决脏写问题此时一定会出现一个事务版本号小于等于内存版本号更新失败 悲观锁:一个事务针对于要操作的数据加锁其他事务想要操作数据只能阻塞等待 2.2)脏读:事务A读取到了事务B已经修改但是没有提交的数据因为数据不稳定发生脏读一定会发生不可能重复读和幻读 2.3)不可重复读:事务A相同的查询语句在不同的时间查询到了不同的结果 可重复读就是不管其他变量对数据是否修改第一查询只要查询的结果是true后面只要当前事务不修改当前这个布尔值那么读取到的始终是一条结果侧重于已经存在但是修改过的数据 2.4)幻读:一个事务A会读取到事务B新增的数据 表锁:每次操作锁住整张表开销小加锁快不会出现死锁锁定粒度大发生锁冲突的概率最高并发度最低一般用在整表数据迁移的场景防止数据迁移数据发生变动 手动增加表锁:lock table 表名称1 read(write)表名称2 read(write) 查看加上的表锁:show open tables 删除表锁:unlock tables 加读锁:只能读取该表不能写该表 加写锁:即可以读又可以写其他事务既不能读也不可以写 行锁:每一次操作锁住一行记录开销大加锁慢锁定粒度最小发生所冲突的概率最低并发程度最高InnoDB和MYSIM存储引擎有两个区别: 1)InnoDB支持事务 2)InnoDB支持行级锁 行锁演示:一个Session开启事务以后不提交另一个Session更新同一条记录的时候会发生阻塞更新不同的记录的时候不会发生阻塞 3)表锁开销小加锁块但是行锁开销大加锁慢这样子理解很简单对于表来说只要找到这一张表就可以直接给他加锁速度很快但是对于行锁来说先要找到表再来找行效率很低行锁的粒度肯定是比表锁小的粒度越大锁冲突的概率还是比较高的 4)MYSIM存储引擎在执行Select语句之前会自动给设计所有的表加读锁在执行updateinsertdelete操作的时候会自动给涉及到的表加写锁但是InnoDB存储引擎在执行查询语句Select操作的时候因为有MVCC机制所以不加锁但是updateinsert和delete操作会加行锁总而言之就是读锁会阻塞写但是不会阻塞读但是写锁会把读和写都会阻塞 在数据库没有提交数据的时候你更新的数据是在缓存进行更新的事务与事务在并发进行的时候就叫作隔离级别只有在提交之后数据才从日志中把数据更新到数据库里面 三)MVCC:无论事务是否提交undolog版本链的数据都是要记录下来的因为事务要回滚所以要记录基于快照结果集undolog版本链undolog版本链只有一份 1)begin和start transaction并不是一个事务的起点在执行到第一个DML语句的时候也就是执行到他们的第一个修改操作InnoDb的语句的时候事务才算是真正的进行启动才会向MYSQL中申请事务id执行select操作是不会生成事务ID的 2)insert新插入的数据的版本连上面的记录的回滚指针的地址就是null因为当前数据已经是最早的纪录了不管事务是否提交update更新的数据都会存放到undolog版本链中一行数据由四个部分组成当前事务操作操作完以后的数据完整记录当前事务操作完成后的数据ID聚簇索引ID版本链(指针)) 3)当一个事务id60的事务新增了一条数据那么这一行记录就变成 (userID1username李四60聚簇索引IDnull(因为是事务新插入的第一条数据) 此时再来一个事务修改这条user数据username王五此时版本链的数据就变成了这样子: 0X666 (userID1username王五100聚簇索引ID0X777)| ---------------------------------------------------- | 0X777 (userID1username李四60聚簇索引IDnull(因为是事务新插入的第一条数据) 4)在可重复读级别当事务开启以后执行任何的查询SQL都会生成当前事务的一致性视图也叫做readView该视图只会生成一次且在事务提交前不会发生任何变化但是是如果是读已提交隔离级别下每一次执行查询SQL都会生成读视图(必须是当前读)但是从版本连中取数据一定是从最新的undolog版本连中的数据查找的 5)当前进行比对的过程中是从当前undolog版本链的最新的记录的事务ID开始和读视图readView进行比对从而来确定最终MYSQL读取的是哪一条记录如果这条记录不符合要求那么按照undolog版本链单向链表查询下一条符合要求的记录 6)MYSQL会根据读视图中的最小事务ID和最大事务ID来划分区间 从而确定已提交事务和未提交事务 7)根据undolog版本链上的每一条记录的事务ID来判断当前这条记录是否已经在生成读视图之前提交了小于min_id的一定是已提交事务大于max_id一定是未提交事务但是在min_id和max_id之间的记录有可能是已提交也有可能是未提交 8)事务操作中update操作更新的是MYSQL中真实的数据 比较规则:一个事务想要并可以读取到读视图生成之前事务提交的记录 1)trx_idcreator_trx_id如果这条记录的事务ID等于创建读视图的事务ID那么该数据记录的最后一次操作的事务就是当前事务当前记录对当前事务可见 2)trx_idcreator_trx_id说明在生成读视图的时候这条记录的事务ID不在活跃列表里面说明修改这条记录的事务已经在生成读视图之前提交了所以当前记录可见 3)trx_idmax_trx_id如果trx_id 值小于 Read View 中的 min_trx_id 表示这个版本的记录是在创建 Read View后才启动的事务生成的所以该版本的记录对当前事务不可见否则会发生不可重复读的问题 4)min_trx_id trx_id max_trx_id:判断 trx_id 是不是在当前事务ID集合(m_ids)里面 四)一条SQL语句的执行流程:update user set name张三 where userID1 1)执行器:调用执行引擎的接口把SQL语句丢给存储引擎层来进行执行 2)首先检查buffer pool缓冲池中有没有对应的数据如果没有就去加载缓存数据把id1的记录所在的16K页的数据加载到buffer pool中 3)写入更新数据的旧值用于回滚将老的值写入到undolog回滚日志文件里面
http://www.ihoyoo.com/news/71558.html

相关文章:

  • c 网站开发案例大全wordpress 英语
  • 做站长建不好网站龙岩关键词优化排名
  • 河源网站建设工作室北京杰诚 做网站
  • 佛山做外贸网站自己怎么做网站首页
  • 有做医学手术视频的网站杭州外贸网站建设公司排名
  • 做苗木网站哪个公司好饲料行业建设网站方案设计免费下载ppt
  • 软件下载网站如何建设如何做公司网站优化
  • 网站刷收益是怎么做的商会网站的建设
  • 网上做问卷调查赚钱哪些网站好wordpress oyester
  • 茂名公司网站建设网站建设与运营公司市场开方案
  • 利用影视网站做cpa手游发号网站模板
  • 健康类网站模板wordpress评论删除
  • 深圳官方网站上海十大it外包公司
  • 佛山营销型建设网站互联网保险经纪公司排名
  • 对网站建设的意见广州商砼建站规范
  • 仿淘宝网站源码 asp无锡网站制作哪家强
  • 免费做视频网站wordpress怎样切换语言
  • 中山cms建站模板带论坛的网站模板下载地址
  • 自动app优化下载aso优化服务站
  • 台州有哪些做网站的公司免费的网站cms
  • 网站怎样添加百度地图国家免费技能培训
  • 网站数据库设置权限杭州做肉松饼的网站有多少家
  • 做网站的公司怎么推广产品创意设计
  • 巴音郭楞蒙古自治州建设局网站企业微信后台管理系统
  • 网站两边的悬浮框怎么做做监控的有哪些网站
  • 织梦网站下载地址视频做动图的网站
  • 成都分想设计公司网站对百度网站进行分析
  • 石家庄自己的网站怎么把网站改为正在建设中
  • 芜湖市住房和城乡建设厅网站网站建设联系
  • dedecms公司网站怎么做催收网站开发