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

广州家具网站建设上海建网站的公司

广州家具网站建设,上海建网站的公司,菜鸟教程网站是怎么做的,建设银行怎么从网站上改手机号码简单来说,事务就是要保证一组数据库操作,要么全部成功,要么全部失败。 在 MySQL 中,事务支持是在引擎层实现的。 MySQL 是一个支持多引擎的系统,但并不是所有的引擎都支持事务。 如 MySQL 原生的 MyISAM 引擎就不支持…

简单来说,事务就是要保证一组数据库操作,要么全部成功,要么全部失败。

在 MySQL 中,事务支持是在引擎层实现的。

MySQL 是一个支持多引擎的系统,但并不是所有的引擎都支持事务。

如 MySQL 原生的 MyISAM 引擎就不支持事务,这也是 MyISAM 被 InnoDB 取代的重要原因之一。

事务的四大特性(ACID)

  • 原子性: 事务是最小的执行单位,不允许分割。事务的原子性确保动作要么全部完成,要么完全不起作用;

  • 一致性: 执行事务前后,数据保持一致,例如转账业务中,无论事务是否成功,转账者和收款人的总额应该是不变的;

  • 隔离性: 并发访问数据库时,一个用户的事务不被其他事务所干扰,各并发事务之间数据库是独立的;

  • 持久性: 一个事务被提交之后。它对数据库中数据的改变是持久的,即使数据库发生故障也不应该对其有任何影响

事务的并发问题

  • 脏读(Dirty read): 当一个事务正在访问数据并且对数据进行了修改,而这种修改还没有提交到数据库中,这时另外一个事务也访问了这个数据,然后使用了这个数据。因为这个数据是还没有提交的数据,那么另外一个事务读到的这个数据是“脏数据”,依据“脏数据”所做的操作可能是不正确的。

  • 丢失修改(Lost to modify): 指在一个事务读取一个数据时,另外一个事务也访问了该数据,那么在第一个事务中修改了这个数据后,第二个事务也修改了这个数据。这样第一个事务内的修改结果就被丢失,因此称为丢失修改。 例如:事务1读取某表中的数据A=20,事务2也读取A=20,事务1修改A=A-1,事务2也修改A=A-1,最终结果A=19,事务1的修改被丢失。

  • 不可重复读(Unrepeatableread): 指在一个事务内多次读同一数据。在这个事务还没有结束时,另一个事务也访问该数据。那么,在第一个事务中的两次读数据之间,由于第二个事务的修改导致第一个事务两次读取的数据可能不太一样。这就发生了在一个事务内两次读到的数据是不一样的情况,因此称为不可重复读。

  • 幻读(Phantom read): 幻读与不可重复读类似。它发生在一个事务(T1)读取了几行数据,接着另一个并发事务(T2)插入了一些数据时。在随后的查询中,第一个事务(T1)就会发现多了一些原本不存在的记录,就好像发生了幻觉一样,所以称为幻读。

不可重复度和幻读区别:

不可重复读的重点是修改,针对的数据是多行。
幻读的重点在于新增或者删除,针对数据是多行。

事务的隔离级别

SQL 标准定义了四个隔离级别:

  • READ-UNCOMMITTED(读取未提交): 最低的隔离级别,允许读取尚未提交的数据变更,可能会导致脏读、幻读或不可重复读。
  • READ-COMMITTED(读取已提交): 允许读取并发事务已经提交的数据,可以阻止脏读,但是幻读或不可重复读仍有可能发生。
  • REPEATABLE-READ(可重复读): 对同一字段的多次读取结果都是一致的,除非数据是被本身事务自己所修改,可以阻止脏读和不可重复读,但幻读仍有可能发生。
  • SERIALIZABLE(可串行化): 最高的隔离级别,完全服从ACID的隔离级别。所有的事务依次逐个执行,这样事务之间就完全不可能产生干扰,也就是说,该级别可以防止脏读、不可重复读以及幻读。

MySQL InnoDB 存储引擎的默认支持的隔离级别是 REPEATABLE-READ(可重读,RR),
Oracle和sql server的默认隔离级别是READ-COMMITTED(读取已提交,RC)。

我们可以通过

SELECT @@tx_isolation;

命令来查看,MySQL 8.0 该命令改为

SELECT @@transaction_isolation;

MySQL InnoDB 的 REPEATABLE-READ(可重读)并不保证避免幻读,需要应用使用加锁读来保证。
而这个加锁度使用到的机制就是 Next-Key Locks。

因为隔离级别越低,事务请求的锁越少,所以大部分数据库系统的隔离级别都是 READ-COMMITTED(读取提交内容) ,但是你要知道的是 InnoDB 存储引擎默认使用 REPEATABLE-READ(可重读,RR) 并不会有任何性能损失

事务隔离的实现

在实现上,数据库里面会创建一个视图,访问的时候以视图的逻辑结果为准。

  • 在“可重复读”隔离级别下,这个视图是在事务启动时创建的,整个事务存在期间都用这个视图。
  • 在“读提交”隔离级别下,这个视图是在每个 SQL 语句开始执行的时候创建的。
  • 这里需要注意的是,“读未提交”隔离级别下直接返回记录上的最新值,没有视图概念;
  • 而“串行化”隔离级别下直接用加锁的方式来避免并行访问。

每条记录在更新的时候都会同时记录一条回滚操作。
同一条记录在系统中可以存在多个版本,这就是数据库的多版本并发控制(MVCC)

回滚日志什么时候删除?

系统会判断当没有事务需要用到这些回滚日志的时候,回滚日志会被删除。

什么时候不需要了?

当系统里么有比这个回滚日志更早的read-view的时候。

为什么尽量不要使用长事务?

长事务意味着系统里面会存在很老的事务视图,在这个事务提交之前,回滚记录都要保留,这会导致大量占用存储空间
除此之外,长事务还占用锁资源,可能会拖垮库。

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

相关文章:

  • 专门型网站深圳极速网站建设报价
  • 国际网站 建设运动网站建设教程
  • 免展网站后台注册分销商城的服务商
  • 各大企业网站文案在溧水做新店推广那家网站好
  • 英语网站建设费用要建一个网站该怎么做
  • 网站支付怎么做网站建设三合一 500元
  • 建设银行 u盾不弹出网站如何侵入网站服务器
  • 网站的差异去视频网站做编辑
  • 东莞网站建设网站推广价钱广西住建网官网
  • 岳阳市住房和城乡建设局网站wordpress安卓源码分析
  • 做视频链接网站免费网站建设福州
  • 网站开发基本流程图html代码注释符号
  • 备案 网站内容邦邻网站建设
  • c 写网站建设框架电子商务网站开发形式选择
  • 铁岭市网站建设公司星星影院在线观看
  • 网站建设后台编程自己做外贸网站能接到单吗
  • 东莞做网站做什么赚钱wordpress 主题 打包
  • 评论网站建设软件著作权和专利的区别
  • 多种语言的网站事件营销的案例有哪些
  • 如何不让百度收录网站商业策划
  • 前程无忧招聘网站标记怎么做青岛做网站建设哪家好
  • 京东网站建设目标是什么人性本私wordpress
  • go语言视频网站开发wordpress网站被黑
  • 自己站网站北京门户网站制作费用
  • 怎样让google收录网站编程课适合多大孩子学
  • 重庆网站平台如何推广高端网站建设怎么做
  • 网站开发费用无形资产帮卖货平台
  • 南海网站建设价格山西做网站运营的公司
  • 金坛建设银行总行网站做平面有什么好的网站
  • 河南专业做网站app软件开发平台游戏