zoukankan      html  css  js  c++  java
  • 事务基础

    事务(transaction)

    事务:一个最小的不可再分的工作单元;通常一个事务对应一个完整的业务(例如银行账户转账业务,该业务就是一个最小的工作单元)。一个完整的业务需要批量的DML(insert、update、delete)语句共同联合完成。

    事务只和DML语句有关,或者说DML语句才有事务。这个和业务逻辑有关,业务逻辑不同,DML语句的个数不同。例如银行转账交易,input和output的两条dml语句必须同时完成或失败。

    特性:ACID(酸)

    原子性(Atomicity):一个事务不可再分割,要么都执行要么都不执行

    一致性(Consistency):一个事务执行命令使数据从一个一致状态切换成另外一个一致状态

    隔离性(Isolation):一个事务的执行不受其他事务的干扰

    持久性(Durability):一个事务一旦提交,则会永久的改变数据库的数据

     数据库的并发问题:

    脏读:对于两个事务T1、T2,T1读取了意境被T2更新但还没有提交的字段。之后,若T2回滚,则T1读取的内容是临时且无效的。(类似区块链中的分叉攻击,未提交指没有确认六个区块)

    不可重复读:对于两个事务T1、T2,T1读取了一个字段,然后T2更新了该字段(已提交)。T1再次读会得到不同值。

    幻读:对于两个事务T1、T2,T1从表中读取字段,然后T2在表中插入新行。T1再次读取会多出几行。

     隔离级别:

    (解决)--> 脏读 不可重复读 幻读
    read uncommitted × × ×
    read committed × ×
    repeatable read ×
     

    查看mysql8默认隔离级别:

     select @@transaction_isolation;
    +-------------------------+
    | @@transaction_isolation |
    +-------------------------+
    | REPEATABLE-READ         |
    +-------------------------+
    1 row in set (0.00 sec)

    更改隔离级别:

    set autocommit=false;
    set global transaction isolation level read committed;

     global更改所有连接的隔离级别,单个连接则改为session。一个cmd窗口为一个连接:Your MySQL connection id is 8

  • 相关阅读:
    Asynchronous AOF fsync is taking too long (disk is busy?). Writing the AOF buffer without waiting for fsync to complete, this may slow down Redis.
    DHCP "No subnet declaration for xxx (no IPv4 addresses)" 报错
    Centos安装前端开发常用软件
    kubernetes学习笔记之十:RBAC(二)
    k8s学习笔记之StorageClass+NFS
    k8s学习笔记之ConfigMap和Secret
    k8s笔记之chartmuseum搭建
    K8S集群集成harbor(1.9.3)服务并配置HTTPS
    Docker镜像仓库Harbor1.7.0搭建及配置
    Nginx自建SSL证书部署HTTPS网站
  • 原文地址:https://www.cnblogs.com/faded828x/p/13195888.html
Copyright © 2011-2022 走看看