首页 > 数据库 >Mysql中的事务

Mysql中的事务

时间:2024-05-05 15:55:22浏览次数:21  
标签:事务 读取 -- SAVEPOINT 提交 Mysql 数据

  1. 事务的四大特性:
特性 解释
原子性(Atomicity) 原子性是指事务是一个不可分割的工作单位,事务中的操作要么全部成功,要么全部失败。
一致性(Consistency) 事务发生前后,数据的完整性要保持一致。
隔离性(Isolation) 隔离性是多个用户并发访问数据库时,数据库为每一个用户开启的事务,不能被其他事务的操作数据所干扰,多个并发事务之间要相互隔离。
持久性(Durability) 持久性是指一个事务一旦被提交,它对数据库中数据的改变就是永久性的,接下来即使数据库发生故障也不应该对其有任何影响。
  1. 事务并发的时候存在的问题:
问题 解释
脏读(Dirty Read) 脏数据所指的就是未提交的数据,而脏读是指在一个事务处理过程里读取了另一个未提交的事务中的数据。
不可重复读(Non-repeatable Read) 一个事务先后读取同一条记录,而事务在两次读取之间该数据被其它事务所修改,则两次读取的数据不同,称之为不可重复读。
幻读(Phantom Read) 一个事务按相同的查询条件重新读取以前检索过的数据,却发现其他事务插入了满足其查询条件的新数据,这种现象就称为幻读。
不可重复读和脏读的区别 脏读是某一事务读取了另一个事务未提交的脏数据,而不可重复读则是在同一事务内读取了前一事务提交的数据,即前一次读到的数据是另一个事务提交前,后一次读到的数据是提交后的。

3.mysql中事务控制语句

BEGIN 或 START TRANSACTION 显式地开启一个事务;

COMMIT 也可以使用 COMMIT WORK,不过二者是等价的。COMMIT 会提交事务,并使已对数据库进行的所有修改成为永久性的;

ROLLBACK 也可以使用 ROLLBACK WORK,不过二者是等价的。回滚会结束用户的事务,并撤销正在进行的所有未提交的修改;

SAVEPOINT identifier,SAVEPOINT 允许在事务中创建一个保存点,一个事务中可以有多个 SAVEPOINT;

RELEASE SAVEPOINT identifier 删除一个事务的保存点,当没有指定的保存点时,执行该语句会抛出一个异常;

ROLLBACK TO identifier 把事务回滚到标记点;

SET TRANSACTION 用来设置事务的隔离级别。InnoDB 存储引擎提供事务的隔离级别有READ UNCOMMITTED、READ COMMITTED、REPEATABLE READ 和 SERIALIZABLE。

-- mysql简单示例:
-- 开始事务
START TRANSACTION;

-- 执行一些SQL语句
UPDATE accounts SET balance = balance - 100 WHERE user_id = 1;
UPDATE accounts SET balance = balance + 100 WHERE user_id = 2;

-- 判断是否要提交还是回滚
IF (条件) THEN
    COMMIT; -- 提交事务
ELSE
    ROLLBACK; -- 回滚事务
END IF;

标签:事务,读取,--,SAVEPOINT,提交,Mysql,数据
From: https://www.cnblogs.com/hytip/p/18173560

相关文章

  • 解析mysql奇葩语句
    首先看看完整的表如下图那么看看一个比较奇葩的语句select*fromuserswherename='aa'='bb'这个语句为啥能执行成功以及为什么打印出了除了两个aa之外的所有行数据呢。我们来解释一下原理。当我们使用where语句的时候,where是会一行一行的匹配的,同时where的执......
  • 如何选择配置 MySQL innodb_log_file_size
    配置InnoDB的redo空间大小是写密集型工作负载最重要的配置选项之一。不过,这需要权衡利弊。配置的redo空间越大,InnoDB就能更好地优化写IO。不过,增加redo空间也意味着在系统断电或因其他原因崩溃时需要更长的恢复时间。 对于特定的innodb_log_file_size值,要预测系统......
  • 构建包含mysql和redis服务的docker镜像
    直接上dockerfile代码1FROMcentos:centos7.9.20092RUNyuminstall-ywget&&\3wgethttps://dev.mysql.com/get/mysql80-community-release-el7-11.noarch.rpm&&\4yum-ylocalinstallmysql80-community-release-el7-11.noarch.rpm......
  • MySQL 数据库自增主键生成的优缺点
    MySQL数据库中使用自增主键(AUTO_INCREMENT)作为表的主键有以下显著的优点和缺点:**优点**:1.**简化开发**:开发人员不需要手动指定每条记录的唯一标识,减少了出错的可能性。2.**性能优化**:自增主键通常会导致数据在物理存储上近乎顺序地排列,这能够提升基于主键的查询效率,特别......
  • mysql 锁,和加锁机制
    背景间隙锁是MySQL在RR可重复读隔离级别下用来修复幻读才引入的一种锁,间隙锁也只有在RR可重复读隔离级别下才会存在,如果是在RC读已提交隔离级别下,是没有间隙锁的存在的。另外,我们也知道,幻读这种现象也只有在当前读的时候才会发生,在一致性快照读的情况下是没有幻读现象的。那么间......
  • MySQL 8.4 初探
    MySQL8.4现已正式发布,这是一个具有重大意义的版本,因为它被指定为长期支持(LTS)版本。LTS软件的引入意味着MySQL8.0.34+将成为一个仅修复错误的版本。创新版本可能每季度发布一次,新的长期支持版本大约每两年发布一次。8.4版本将持续到2026年初。但请记住,将它们纳入主流长期......
  • MySQL-08.索引的创建和设计原则
    C-08.索引的创建和设计原则1.索引的声明和使用1.1索引的分类MySQL的索引包括普通索引、唯一性索引、全文索引、单列索引、多列索引和空间索引等。从功能逻辑上分类,索引主要有4种,分别是普通索引,唯一索引,主键索引,全文索引。按照物理实现方式,索引可以分为2种,聚簇索引和非聚簇......
  • MySQL分页查询优化
    CREATETABLEteacher( `id`BIGINT(20)NOTNULLAUTO_INCREMENTPRIMARYKEY,`teacher_id`CHAR(30)NOTNULLUNIQUEKEY, `name`VARCHAR(30)NOTNULL)ENGINE=INNODB;insertintoteacher(teacher_id,name)values('aaa','aaa');inserti......
  • DAPPER 事务 TRANSACTION
    https://www.cnblogs.com/friend/p/16754184.html\ publicasyncTask<int>Save(longmoldProducedProductId,List<MoldStandardResource>list){intresult=0;stringdelSql="DeleteMoldStandardResourceWhereMoldProducedProductId......
  • Mysql中的DQL语句
    1.基本语法SELECTcolumn1,column2,...FROMtable_name[WHEREcondition][ORDERBYcolumn_name[ASC|DESC]][LIMITnumber];*ORDERBYcolumn_name[ASC|DESC]是一个可选的子句,用于指定结果集的排序顺序,默认是升序(ASC)。*LIMITnumber是一个可选的子句,用于限制......