首页 > 数据库 >Mysql事务详解

Mysql事务详解

时间:2023-05-17 16:23:20浏览次数:31  
标签:事务 读取 数据库 详解 提交 Mysql 操作 数据

事务

  • 数据库管理系统执行过程中的一个逻辑单位,由一个有限的数据库操作序列构成
  • 事务指的是数据库一种保护数据的方式
  • 事务一般由增删改操作自动调用,事务根据数据库不同提交的时机也是不同的
    • MySQL数据库默认执行增删改就会提交事务
    • 我们可以设置为手动提交 set @@autocommit=0; -------------- 前面写begin或者start transaction
  • 事务的特征
    • ACID原则
      • 原子性、一致性、隔离性、持久性
    • 原子性
      • 事务是操作数据的最小单元,不可以再分
    • 一致性
      • 事务提交之后,整个数据库所看到的数据都是最新的数据
      • 所有人看到的数据都是一致的
    • 隔离性
      • 别人无法访问到我们未提交的数据,而且一旦这个数据被我修改,别人也无法进行操作
    • 持久性
      • 事务一旦被提交,数据库就进入一个全新的状态
      • 数据也不能返回上一个状态
  • 事务如何开启和提交?
    • 开启
      • 当我们执行增删改操作的时候就会默认开启一个事务
      • 这个事务和当前操作的窗口有关,别人是无法共享这个事务的
    • 提交
      • 手动
        • 显式
          • commit 提交
          • rollback 回滚
        • 隐式
          • 执行DDL操作会默认提交当前事务
          • 用户退出,事务统一进行回滚(mysql)
      • 自动
        • mysql数据库执行DML操作之后会自动提交事务
        • 好处
          • 方便
        • 坏处
          • 不能将多个sql纳入到一个事务,不便于管理
          • 当我们大批量插入数据的时候,数据库会频繁的开启关闭事务影响插入效率

事务的隔离级别

  • 根据数据库的不同用途,我们可以对数据库的事务进行级别的设置
  • 级别越高数据越安全,效率越低
    • 读未提交
      • 我们可以读取到别人未提交的数据
      • 有可能产生脏读问题
    • 读已提交
      • 只能读取别人提交后的数据
      • 不能达到可重复读,但是可以避免脏读
      • 有可能产生虚读或者幻读的情况
    • 可重复读
      • 当数据被我查询后,别人就不能修改这个数据了
      • 说明在我查询的时候已经有了事务操作到这个数据,查询都会开启事务
      • 但是不能防止别人查询别的数据
    • 序列化
      • 当前数据库只能存在一个事务,我操作数据库的时候,别人是不能访问数据库的
      • 这对于用户来讲数据相当安全,一般在倒库的时候才会开启这种级别
  • 脏读
    • 读取别人未提交的数据,这个数据是不安全的
  • 虚读
    • 第一次读取的数据,第二次读取的时候可能被人修改了
  • 幻读
    • 第一次读取的数据,第二次多了一条或者少了一条

标签:事务,读取,数据库,详解,提交,Mysql,操作,数据
From: https://www.cnblogs.com/dimension0116/p/17409156.html

相关文章

  • mysql 调优-sql 优化
    连接查询原理涉及到indexnested-loopjoin,blocknested-loopjoin,joinbuffersize,hashjoin(mysql8)等,感觉没必要记那么多需要知道会一次性把驱动表的数据加载到内存中(如果joinbuffersize放得下),然后循环每个驱动表去对比被驱动表的数据就好了保证被驱动表的JOIN字......
  • mysql 调优-索引失效
    范围条件放最后面,不管单列还是多列索引,把能过滤最多的索引放前面用不用索引最终都是优化器决定的,EXPLAINjson格式里的执行成本决定最左匹配,如果是联合索引,查找索引树的时候,只能根据第一个索引才能找到第二个第三个,如果顺序没对就不会走索引--联合索引(name,code,ad......
  • [MySQL事务一文搞懂]
    [MySQL事务一文搞懂]1、什么是事务?事务(Transaction),顾名思义就是要做的或所做的事情,数据库事务指的则是作为单个逻辑工作单元执行的一系列操作(SQL语句)。这些操作要么全部执行,要么全部不执行。2、为什么需要事务把一系列sql放入一个事务中有两个目的:为数据库操作提供了一个......
  • MySQL回表 索引覆盖02
    资料来源:  https://zhuanlan.zhihu.com/p/401198674?utm_id=0  ......
  • mysql 调优-利用索引覆盖和下推
    回表只查询一次索引得不到想要的数据,典型的场景就是非聚簇索引查询:先拿到主键ID,再根据id查询一次得到数据(再次查询这就是回表)索引覆盖:根据普通索引查询不回表就能得到数据--联合索引(age,addr)selectage,addrfromt_userwhereage>10;--单列索引(不一定非要联合索引......
  • mysql 事务与隔离级别
    ACIDAtomicity:原子性(UNDOLOG实现),一组操作要么都成功,要么都失败Consistency:一致性(UNDOLOG实现),从一个合法状态变为另一个合法状态(语义上不是语法上)。比如转账之后余额为负数,虽然也能守恒,但是明显不合法。或者转账时A账户钱少了,B账户钱没多,也是不合法的Isolation:隔离性(锁机制实......
  • mysql 锁机制
    表锁:InnoDB支持行锁,不代表着就不支持表锁表锁的S和X锁,MyISAM的锁(不建议在InnoDB中使用)--查看当前有表锁的表showopentableswherein_use>0;--给表加S锁(所有事务都能读,所有事务都不能写)locktablestable_nameread;--给表加X锁(拿到锁的事务可写可读......
  • mysql 底层数据存储结构
    内存和磁盘每次交互都是完整的页,数据页里面存放的是行(不仅仅是数据库的数据行,还有行格式等)页(16k,计算机与内存的最小单位)的上层单位还有区(一个区存放64个页,64*16k=1024k,刚好1M),区上面是段(一个或多个区组成),段上面是表空间(一个或多个段组成)行格式showtablestatuslike't_u......
  • docker 部署nacos单机版并配置mysql支持
    1.配置mysql数据库选用mysql5.7表名为nacos_config,附上建表SQLSETNAMESutf8mb4;SETFOREIGN_KEY_CHECKS=0;--------------------------------Tablestructureforconfig_info------------------------------DROPTABLEIFEXISTS`config_info`;CREATETABLE......
  • CST为什么要关闭 GPU 卡的 ECC 模式而开启 TCC 模式?操作使用【详解】
    在使用CST软件之前,我们一般建议大家关闭GPU卡的ECC模式而开启TCC模式。那么,为什么要进行这样一个操作呢?在此之前,给大家科普一下什么是“ECC”和“TTC”。 “ECC” 其实是ErrorCorrectionCode的缩写,是NVIDIA(英伟达) 内自带的错误纠正代码,一般是用来检查和在某些情......