数据库复习之(二)--mysql事务

事务:transaction

事务用来维护数据库的完整性。

事务的4个特性(ACID):

  1. 原子性(A):执行事务时,要么都成功,要么都不成功,由恢复机制实现
  2. 一致性(C):执行后,保持数据的一致,由用户负责
  3. 隔离性(I):事务之间相互独立,互不影响,通过系统的并发控制机制实现
  4. 持久性(D):数据永久存储在数据库中,通过恢复机制实现
    事务的ACID原则保证了一个事务或者成功提交,或者失败回滚,二者必居其一。

事务控制语句

  • 开始事务: begin 或start transaction
  • 提交事务:commit,使对数据库的所有修改成为永久性的
  • 回滚事务:rollback,回滚结束的事务,并撤销正在进行的所未提交的修改
  • 创建保存点:savepoint identifier,允许在事务中创建一个保存点,一个事务可以有多个savapoint
  • 删除保存点:release savapoint identifier
  • 事务回滚到标记点:rollback to idetifier
  • 设置事务的隔离级别:set transaction

mysql 事务处理的两种方法

  1. begin commit rollback实现
  2. 直接用set 来改变mysql的自动提交模式
       - set autocommit=0禁止自动提交
       - set autocommit=1 开启自动提交

事务测试

1. 第一种方式开启事务

  • 查看mysql事务自动提交方式 select @@autocommit;    : ‘@@’ 表示内置对象
      查看mysql事务自动提交方式
  • 关闭自动提交事务:set autocommit = 0
      
    关闭自动提交事务

2. 第二种方式开启事务

  • 开始一个事务
    开始一个事务,并插入数据
    在没有commit之前查询如上图所示,但是数据库内部显示如下所示,并没有显示新插入的数据33。
    没有commit之前数据库的显示
    commit后,数据库的显示如下,出现了新插入的数据,证明在事务未被提交之前不会改变数据库。且commit之后rollback无效。
    commit后数据库显示新插入的数据

实例

  • 背景描述
    背景描述背景描述
  • 场景设置
    场景设置
  • 操作
  1. 创建数据库和表,并插入数据
create database shop; # 创建数据库
use shop; # 使用数据库
create table account  #创建表
     (
     id int not null primary key auto_increment,
     name varchar(32) not null,
     cash decimal(9,2) not null
    );
 # 插入数据
 insert into account(name,cash) values('A',2000.00),('B',10000.00);

在这里插入图片描述

  1. 开始事务
begin;
update account set cash = cash - 500 where name = 'A';  #A账户减少500元
update account set cash = cashh + 500 where name = 'B'; # 模拟B账户增加出错
select * from account ; #查看当前状态
rollback ;# 回滚
select * from account ; #查看当前状态
commit ; #提交

在这里插入图片描述在这里插入图片描述

事务的隔离级别

隔离等级

   1. Read Uncommitted(读取未提交的内容):在该隔离级别,所有的事务都可以看到其他未提交事务的执行结果,也称之为脏读(Dirty Ready)
   2. Read Committed(读取提交内容):一个事务在提交之前对其他事务是不可见的,这个级别支持不可重复读取,避免脏读。
   3. Repeatable Read(可复读):mysql默认的隔离级别,他确保同一事务的多个实例在并发读取数据时,会看到同样的数据,但是会导致幻读,幻读指当用户读取某一范围的数据行时,另一个事务又在该范围内插入了新行,当用户再读取该范围内的数据时,会发现有新的"幻影"行,Innodb和Falcon存储引擎通过多版本并发控制(MVCC)机制解决了该问题。
   4. Serializerable(可串行化):最高的隔离级别,通过强制事务排序,使之不可能相互冲突,解决了幻读问题,它是在每个读的数据行上加上共享锁,在这个级别可能导致大量的超时和锁竞争。
脏读:当一个事务的数据未提交时,另一个事务在查看数据时将刚才未提交的数据查询到
幻读:读取到数据,因某一个事务的原因,导致刚才数据消失

查看隔离级别

  • 查看当前会话的隔离级别
      select @@tx_isolation; :mysql8.0之前
      select @@transaction_isolation; :mysql8.0之后
  • 查看系统的隔离级别
      select @@global.tx_isolation; :mysql8.0之前
      select @@global.transaction_isolation; :mysql8.0之后

设置隔离级别

  set transaction_isolation =’ 隔离方式’

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
CSDN(中国软件开发网)是一个技术交流平台,其中涵盖了各种领域的技术内容,包括数据库数据库复习是指回顾和巩固数据库的相关知识和技能。 数据库是存储、管理和组织数据的一种数据结构。在软件开发中,数据库起到储存数据的作用,同时也提供了数据操作、查询和管理的功能。因此,深入理解数据库的原理和技术对于开发人员来说非常重要。 数据库复习的内容可以包括以下几个方面: 1. 数据库基础知识:了解数据库的概念、特点、分类和常用的数据库系统,如关系型数据库(如MySQL、Oracle)和非关系型数据库(如MongoDB、Redis)。 2. SQL语言:掌握SQL语言的基本语法、查询、更新、删除和插入数据的操作,熟悉常用的SQL函数和操作符,能够编写复杂的SQL查询语句和数据操作语句。 3. 数据库设计:了解数据库设计的基本原则和范式,能够进行数据库的逻辑设计和物理设计,并能评估和调整数据库的性能。 4. 数据库索引和优化:理解数据库索引的原理和类型,了解索引的创建、使用和优化策略,能够通过合理的索引设计和优化来提升数据库的查询性能。 5. 数据库事务和并发控制:掌握数据库事务的概念和特性,理解并发访问引起的数据一致性问题,学会应对并发访问的技巧和控制策略。 6. 数据库备份和恢复:了解数据库备份和恢复的重要性,掌握常用的数据库备份和恢复方法和工具,能够制定和执行数据库的备份和恢复策略。 7. 数据库安全性:熟悉数据库的安全性问题和常见的安全攻击,能够使用数据库的安全机制和技术来防护和保护数据的安全。 通过对CSDN中数据库相关文章的阅读、学习和实践,可以加深对数据库的理解和掌握,提高数据库的设计和开发能力。此外,还可以通过访问CSDN的论坛和社区,与其他开发者交流和分享经验,进一步提升自己的技术水平。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值