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

黄骅港防疫办电话优化教程

黄骅港防疫办电话,优化教程,百度人气榜,dede 网站名称 空的事务 事务概念:事务是一个完整的操作单元,不可分割,事务中的操作要么全部成功,要么全部失败。 1. 事务特性 ACID 1.1 原子性(A) 一个事务中所有操作是不能被分割的,要么所有的操作都成功&am…

事务

事务概念:事务是一个完整的操作单元,不可分割,事务中的操作要么全部成功,要么全部失败。

1. 事务特性


ACID

1.1 原子性(A)

一个事务中所有操作是不能被分割的,要么所有的操作都成功,要么都失败

1.2 一致性(C)

事务开始前到事务结束后,数据总量保持不变的

  • 示例

    • 转账

      jack 钱数kucy 钱数总钱数
      开始前jack:200lucy:200400
      结束后jack:100lucy:300400
    • 买书

      书本数量单价存款
      开始前2100300
      结束后1100200

1.3 隔离性(I)

两个不同的事务之间是隔离的,互不影响

1.4 持久性(D)

事务一旦提交,数据永久保存磁盘上

2. 隔离级别【不同隔离级别产生的问题】

2.1 读未提交

read uncommitted

会出现脏读、幻读、不可重复读。

脏读:一个事务读到了另一个事务没有提交的数据

例如:A 欠 B 300元

还钱流程:

  1. A、B 开启事务
  2. B 查询余额,1000
  3. A 开始向 B 转账,A 打电话给 B,说我把钱转给你了,你看看
  4. B 再查询余额,1300,跟 A 说,是的,我收到了
  5. A 执行了 rollback
  6. B 再查余额,1000,因为 A 回滚了操作

2.2 读已提交

read committed :oracle 默认

只解决了脏读,会出现幻读及不可重复读。

不可重复读:在同一个事务中,连续两次读取到的数据不一致

2.3 可重复读

repeatable read :mysql 默认

只会出现幻读(对于增加)

  • A 事务执行查询,查到 3 条数据

  • B 事务插入一条数据,并提交

  • A 事务执行了更新,发现更新的数量是 4 条,感觉像出现了幻觉

幻读处理:可重复读隔离级别在一定程度上解决了幻读问题,但并非完全避免。它主要通过以下机制来减少幻读的可能性:

  1. 快照读:对于普通的 SELECT 查询,MySQL 使用多版本并发控制(MVCC)来提供一个数据的一致性快照。事务在执行第一个查询操作时会创建一个一致性视图(Read View),之后的查询都会基于这个视图进行。这意味着即使其他事务在此期间插入了新记录,当前事务也无法看到这些新记录,从而避免了幻读(在大多数情况下)。
  2. 当前读:对于需要修改数据的操作(如 INSERT、UPDATE、DELETE)或使用锁定读(如 SELECT … FOR UPDATE),MySQL 使用 Next-Key Locking 机制。这是一种特殊的锁,它包括了记录锁和间隙锁,可以防止其他事务在已锁定的记录附近插入新记录,从而进一步减少幻读的可能性。
  3. 然而,即使在可重复读隔离级别下,幻读在某些特定场景下仍然可能发生。例如,当事务在更新记录时改变了记录的隐藏 trx_id 值,或者其他事务在间隙锁的范围内插入了新记录时,就可能出现幻读。

2.4 串行化

Serializable

不会有任何问题。相当于锁表,效率极低

2.5 实际开发会用到的隔离级别

  1. read committed :oracle默认

    缺点:不可重复读

  2. repeatable read :mysql 默认

扩展:read committed 已经可以解决大部分问题,为什么 MySQL 的默认隔离级别还会设置成 repeatable read

  1. 可重复读
  2. SELECT @@transaction_isolation;

3. MVCC

MVCC 是数据库中一种保证并发性与数据安全性的思想

3.1 生效时间

只有在数据事务隔离级别是读已提交或者可重复读时生效

  1. 读是从缓存中拿数据
    • 第一次查询时,查询表,获取数据,写入数据库缓存
    • 后期的查询,只要是缓存中有的数据,直接查缓存,不查询表。以此来保证并发性
  2. 写的时候会把数据库把最新的数据同步到缓存
    • 保证安全性

3.2 使用三种日志

  1. Undolog 日志:在执行更新语句之前,需要先将旧的数据拷贝到 Undo Log 中。Undo 日志在事务提交或回滚的时候用于还原数据。
  2. Redo 日志:当事务提交时,MySQL 会将事务修改写入到 Redo Log 中。如果 MySQL 突然崩溃并且缓存数据不能恢复,Redo 日志就可以帮助 MySQL 恢复数据。
  3. Binlog 日志:Binlog 日志主要用于主从复制。当从库需要和主库数据保持一致时,需要从主库中读取 Binlog 的数据进行同步。

在执行插入、更新和删除操作时,MySQL 需要进行两个操作。第一个操作是将旧数据的快照保存到 Undolog 日志中。第二个操作是将新的数据记录到 InnoDB 表空间中,并同时将新数据的变更写入到 Redolog 日志和 Binlog 日志中。当事务提交时,MySQL 只有收到了所有三种类型的日志都写入成功的信号,才会返回成功事务提交的响应。这就实现了 MySQL 的 ACID 事务的特性。

http://www.dtcms.com/wzjs/575467.html

相关文章:

  • 网站建设重要vs2010 网站开发源码
  • 中国建设银行网站用户是什么武威做网站
  • 网站编程培训公司广告logo设计软件
  • 公司网站建设开源平台诸暨公司做网站
  • 奎屯市住房和城乡建设局网站免费做海报的app
  • 南京网站开发价格腾讯云服务器学生机
  • 做专属淘客网站成功的软文推广
  • wordpress点击慢福州seo代理计费
  • 广州网站建设一般多少钱淘宝网站怎么做
  • 高邮城乡建设局网站我要在58上面做网站
  • 网络平台指网站 建设项目所在地什么网站可以做效果图
  • 装修队做网站高端网站鉴赏
  • 建设银行储蓄卡申请网站什么是搜索关键词
  • 网站开发合同及报价wordpress主题对比
  • 建设企业官方网站官网wordpress图片禁止保存下载
  • 便利的集团网站建设在静安正规的设计公司网站
  • 个人网站怎么维护做高仿表网站容易被k吗
  • 情侣做记录网站源码开发一个企业网站需要多少钱
  • 有哪些网站用vue做的wordpress 爱奇艺插件下载失败
  • 在线购物网站 模版怎么建设网站是什么
  • 网站为什么百度搜不到了张家界网络营销
  • 景区网站建设教程网站怎样自己做推广
  • 计算机网站怎么做东莞网站建设公司辉煌大厦
  • 网页设计制作一个餐饮网站做网站的html框架
  • 深圳做网站的公司哪个好百度一下就会知道了
  • 怎样让百度收取我的网站wordpress 修改
  • 网站交换链接怎么做?推广app用什么平台比较好
  • 黄山购物网站建设成都官网搭建公司
  • 苏州做网站比较好的公司横峰县建设局网站
  • 网页设计跟做网站一样吗遵义营商环境建设局网站