zoukankan      html  css  js  c++  java
  • 事务

    事务具有4个特性:

    原子性:事务中所有操作视为一个原子,要么完全提交,要么完全回滚

    一致性:事务在完成时,使所有数据从一种一致性状态变更为另外一种一致性状态

    隔离性:事务与事务隔离,进行事务查看数据所处的状态,要么是被另一个并发事务修改前,要么修改后,通过锁机制实现

    持久性:事务完成后,所做修改对数据的影响是永久的,即使系统重启或出现故障扔可恢复

    InnoDB支持事务,引入了UNDO日志和REDO日志

    REDO日志:事务执行时需要将执行的事务日志写入到日志文件里,即REDO日志,当每条SQL进行数据库更新操作时,首先将REDO日志写入到缓冲区,当客户端执行COMMIT提交时,日志缓冲区的内容被刷新到磁盘

    UNDO日志:与REDO日志想法,UNDO日志主要用于事务异常时的数据回滚,就是复制事务前的数据库内容到UNDO缓冲区,然后在合适的时间内将内容刷新到磁盘,与REDO不同,磁盘上不存在单独的UNDO文件,UNDO被放在表空间对应的.ibd数据文件中

    UNDO保证了事务的原子性

    REDO保证事务的持久性

    数据不需要在事务提交前写入磁盘,而是缓存在内存中

    事务控制语句:

    开启事务:BEGIN;

    事务过程: UPDATE....

    提交事务:COMMIT;

    MYSQL事务隔离级别:4种

    设置语句:SET GLOBAL TRANSACTION ISOLATION LEVEL 未提交读(READ UNCOMMITTED)|提交读(READ COMMITTED)|可重复读(REPEATABLE READ)|可串行化(SERIALIZABLE)

    未提交读:可能脏读、不可重复读、幻读

    提交读:可能不可重复读、幻读

    (默认隔离级别)可重复读:可能幻读

    可串行化:事务隔离最高级别,通过强制事务排序,使之不可能冲突,解决幻读问题,通过对每个读的数据行上加锁实现

    脏读:事务B读取了事务A未提交的数据

    不可重复读:事务A读取了数据,事务B更新并提交了数据,事务A在此读取数据,在一个事务中前后两次读取的结果并不致,导致了不可重复读

    幻读:幻读的重点在于新增或者删除,其他类似不可重复读

  • 相关阅读:
    2013 蓝桥杯B组C++
    Kruskal 算法 && Kruskal 重构树
    并查集与其优化(启发式合并、压缩路径)
    【2021 首祭】一周晴天
    Docker以过时,看Containerd怎样一统天下
    史上最全的Nginx配置文档
    Windows环境Android studio运行RN项目,Node突然闪退
    solr docker 配置
    腾讯2017暑期实习生编程题详解
    华为2016研发工程师编程题详解
  • 原文地址:https://www.cnblogs.com/zawjdbb/p/7435831.html
Copyright © 2011-2022 走看看