IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> MySQL基础之事务处理 -> 正文阅读

[大数据]MySQL基础之事务处理

MySQL事务处理

默认情况下,Mysql启用自动提交模式(autocommit为on),这就意味着执行DML语句之后会立即隐式的提交事务
MYSQL 事务处理主要有两种方法:

  • 用 BEGIN, ROLLBACK, COMMIT来实现
    • BEGIN; / START TRANSACTION;开始一个事务
    • ROLLBACK 事务回滚
    • COMMIT 事务确认
  • 直接用set来改变Mysql的自动提交模式
    • set session/global autocommit = 0;禁止自动提交
    • set session/global autocommit = 1;开启自动提交

查看autocommit模式

  • SHOW SESSION VARIABLES LIKE ‘autocommit’
  • SHOW GLOBAL VARIABLES LIKE ‘autocommit’

查看当前会话隔离级别:

  • mysql5: SHOW VARIABLES LIKE ‘tx_isolation’;
  • mysql8:SELECT @@global.transaction_isolation,@@transaction_isolation;

设置当前会话隔离级别:

  • SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ
  • conn.setTransactionIsolation(int level) — 设置事务的隔离级别.

事务的基本要素ACID

A(Atomicity) 原子性:

  • 整个事务中的所有操作,要么完成,要么全部不完成,不可能停滞在中间某个环节。

C(Consistency) 一致性:

在事务开始之前和事务结束之后,数据库的完整性约束没有被破坏

  • 实体完整性:规定表的每一行在表中是惟一的实体。
  • 参照完整性:是指两个表的主关键字和外关键字的数据应是一致的,保证了表之间的数据的一致性,防止了数据丢失或无意义的数据在数据库中扩散。
  • 用户定义完整性:
    • 即deafult(默认值),not null(非空,列约束),

    • unique(唯一,列约束值可以为null但只能有一个null值,也可以为表约束)。

      # 联合唯一
      create table t17(
          id int,
          host varchar(50),
          ip varchar(50), 
          port int,
          unique(id),
          unique(ip,port)   # 这两个参数不能同时出现两次,它两组合起来是唯一的
          );
      
    • primary key(主键)等价于not null unique,字段的值不为空且唯一

    • auto_increment(自增约束)约束的字段必须同时被key约束

    • foreign key(外键,可以为null,但是必要时加上not null),foreign key(关联表id) references(被关联表id)

      # 被关联表
      create table dt(
            id int not null unique,
            部门  varchar (50),
            人数 int 
      );
      
      # 关联表
      create table mes(
            id int primary key auto_increment,
            姓名 varchar(50) not null,
            年龄 int not null,
            d_id int,
            constraint main_id foreign key(d_id) references dt(id)
            on delete cascade   # 同步删除
            on update cascade   # 同步更新    
      );
      
      # 从表插入记录
      insert into dt values
            (1,'教育部',25),
            (2,'通信部',28),
            (3,'稽查部',19),
            (4,'安全部',8);    
      
      # 主表插入记录
      insert into mes values
            (1,'张三',18,1),
            (2,'李四',20,3),
            (3,'王五',28,2),
            (4,'赵六',22,3);
      
      # 插入记录
      insert into mes(姓名,年龄,d_id) values('棱七',88,4);
      # 更改id
      update dt set id=666 where id=3;
      
    • check(效验,主要用于增删改查)

I(Isolation) 隔离性:

  • 一个事务在执行其他事务不能干扰。

D(Durability) 持久性:

  • 在事务完成后,该事务所对数据库所作的更改应持久的保存在数据库之中,并不会回滚。

事务隔离级别

想要查看mysql的事务隔离级别,前提

  • 1,查看是否修改了提交改为了禁止自动提交
  • 2,在不同的事务隔离级别设置不同的事务级别

更新丢失(lost update)

也称为丢失修改(Lost to modify):两个事务同时更新一行数据,最后一个事务的更新会覆盖掉第一个事务的更新,从而导致第一个事务更新的数据丢失,这是由于没有加锁造成的

读未提交(Read-Uncommitted)

  • 特点:B事务读取了A事务未提交的数据,读到未提交(可能回滚)的事务数据
  • 存在问题:脏读(dirty Reads)

一个事务读到了另一个事务未提交的更新数据;
当事务读取尚未提交的数据时,就会发生这种情况

读已提交(Read-Committed)------------>(Oracle默认隔离级别)

  • 特点:B事务能读到A事务已经提交的事务
  • 存在问题:不可重复读(Non-Repeatable Reads)

在同一个事务开启后,两次读取同一数据,得到内容不同,也就是有其他事务更改了这些数据;也就是说读到最新的数据

可重复读(Repeatable-Read)------------->(mysql默认隔离级别)

  • 特点:B事务开启,没有关闭之前读到的数据都是一致的,不会读到已经更改的数据
  • 存在问题:幻读(Phantom Reads)

一个事务在执行过程中读取到了另一个事务已提交的插入数据;即在第一个事务开始时读取到一批数据,但此后另一个事务又插入了新数据并提交,此时第一个事务又读取这批数据但发现多了一条,即好像发生幻觉一样

可串行化(Serializable)

  • 特点:解决所有的问题,一次只执行一个事务
  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-02-22 20:40:12  更:2022-02-22 20:40:31 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 10:39:36-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码