Mysql必知必会:管理事务处理

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介: Mysql必知必会:管理事务处理

事务处理


事务处理(transaction processing)是一种机制, 用来管理必须成批执行的 SQL` 操作,保证数据库不包含不完整的操作结果。利用事务处理,可以保证一组操作不会中途停止,它们要么完全执行,要么完全不执行(除非明确指示)。如果没有错误发生,整组语句提交给(写到)数据库表;如果发生错误,则进行回退(撤销),将数据库恢复到某个已知且安全的状态,以此来维护数据库的完整性。


事务处理术语:

  • 事务(transaction):指一组 SQL 语句;
  • 回退(rollback):指撤销指定 SQL 语句的过程;
  • 提交(commit):指将未存储的 SQL 语句结果写入数据库表;
  • 保留点(savepoint):指事务处理中设置的临时占位符(placeholder), 可以对它发布回退(与回退整个事务处理不同)。

事务处理用来管理 INSERTUPDATEDELETE 语句。不能回退 SELECT 语句(回退 SELECT 语句也没有必要),也不能回退 CREATEDROP 操 作。事务处理中可以使用这些语句,但进行回退时,这些操作也不撤销。


一般来说,事务是必须满足4个条件(  ACID )::原子性(Atomicity,或称不可分割性)、一致性(Consistency)、隔离性(Isolation,又称独立性)、持久性(Durability)。

  • 原子性: 一个事务( transaction )中的所有操作,要么全部完成,要么全部不完成,不会结束在中间某个环节。事务在执行过程中发生错误,会被回滚( Rollback )到事务开始前的状态,就像这个事务从来没有执行过一样。
  • 一致性: 在事务开始之前和事务结束以后,数据库的完整性没有被破坏。这表示写入的资料必须完全符合所有的预设规则,这包含资料的精确度、串联性以及后续数据库可以自发性地完成预定的工作。
  • 隔离性: 数据库允许多个并发事务同时对其数据进行读写和修改的能力,隔离性可以防止多个事务并发执行时由于交叉执行而导致数据的不一致。事务隔离分为不同级别,包括读未提交( Read uncommitted )、读提交( read committed )、可重复读( repeatable read )和串行化( Serializable)。
  • 持久性: 事务处理结束后,对数据的修改就是永久的,即便系统故障也不会丢失。

在 MySQL 命令行的默认设置下,事务都是自动提交的,即执行 SQL 语句后就会马上执行 COMMIT 操作。因此要显式地开启一个事务务须使用命令 BEGIN 或 START TRANSACTION,或者执行命令 SET AUTOCOMMIT=0,用来禁止使用当前会话的自动提交。


控制事务处理


  • BEGIN / START TRANSACTION :显式地开启一个事务;
  • COMMIT / COMMIT WORK :提交事务,使已对数据库进行的所有修改成为永久性的;
  • ROLLBACK / ROLLBACK WORK :回滚会结束用户的事务,并撤销正在进行的所有未提交的修改;
  • SAVEPOINTSAVEPOINT 允许在事务中创建一个保存点,一个事务中可以有多个 SAVEPOINT
  • RELEASE SAVEPOINT :删除一个事务的保存点,当没有指定的保存点时,执行该语句会抛出一个异常;
  • ROLLBACK TO :把事务回滚到标记点;
  • SET TRANSACTION :用来设置事务的隔离级别。InnoDB 存储引擎提供事务的隔离级别有 READ UNCOMMITTED(读未提交)、READ COMMITTED(读已提交,项目中常用)、REPEATABLE READ(可重复读,Mysql 默认隔离级别) 和 SERIALIZABLE(串行化)。


简单示例:

mysql> use test;
mysql> CREATE TABLE transaction_test(id int(5)) ENGINE = INNODB;  # 创建数据表
mysql> SELECT * FROM transaction_test;
Empty set (0.01 sec)
mysql> BEGIN;  # 开始事务
mysql> INSERT INTO runoob_transaction_test VALUE(1);
mysql> INSERT INTO runoob_transaction_test VALUE(2);
mysql> COMMIT; # 提交事务
mysql>  SELECT * FROM transaction_test;
+------+
| id   |
+------+
| 1    |
| 2    |
+------+
mysql> BEGIN;    # 开始事务
mysql> INSERT INTO transaction_test VALUES(3);
mysql> SAVEPOINT first_insert;    # 声明一个保存点
mysql> INSERT INTO transaction_test VALUES(4);
mysql> SAVEPOINT second_insert;    # 声明一个保存点
mysql> INSERT INTO transaction_test VALUES(5);
mysql> ROLLBACK TO second_insert;    # 回滚到 second_insert 保存点
mysql> SELECT * FROM transaction_test;    # 因为回滚所以数据没有插入
+------+
| id   |
+------+
|    1 |
|    2 |
|    3 |
|    4 |
+------+
mysql> ROLLBACK TO first_insert;
mysql> SELECT * FROM transaction_test;
+------+
| id   |
+------+
|    1 |
|    2 |
|    3 |
+------+
mysql> COMMIT;    # 执行 COMMIT 或 ROLLBACK 后保存点自动释放
复制代码


相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
7月前
|
运维 监控 安全
云HIS医疗管理系统源码——技术栈【SpringBoot+Angular+MySQL+MyBatis】
云HIS系统采用主流成熟技术,软件结构简洁、代码规范易阅读,SaaS应用,全浏览器访问前后端分离,多服务协同,服务可拆分,功能易扩展;支持多样化灵活配置,提取大量公共参数,无需修改代码即可满足不同客户需求;服务组织合理,功能高内聚,服务间通信简练。
233 4
|
5天前
|
存储 SQL 关系型数据库
MySQL事务处理:如何确保数据一致性与可靠性
事务(Transaction)是数据库管理系统(DBMS)中的一个核心概念。MySQL 事务是指**一组数据库操作**,作为一个整体进行处理,确保要么全部成功,要么全部失败。
36 15
MySQL事务处理:如何确保数据一致性与可靠性
|
4月前
|
SQL 存储 关系型数据库
MySQL事务处理
MySQL事务处理
49 0
|
5月前
|
存储 关系型数据库 MySQL
MySQL数据库开发进阶:精通数据库表的创建与管理22
【7月更文挑战第22天】数据库的创建与删除,数据表的创建与管理
53 1
|
6月前
|
SQL 关系型数据库 MySQL
MySQL数据库——SQL(4)-DCL(管理用户、权限控制)
MySQL数据库——SQL(4)-DCL(管理用户、权限控制)
59 1
|
7月前
|
存储 数据可视化 关系型数据库
【MySQL进阶之路 | 基础篇】创建和管理数据库
【MySQL进阶之路 | 基础篇】创建和管理数据库
|
6月前
|
SQL 关系型数据库 MySQL
MySQL的事务处理
MySQL的事务处理
|
6月前
|
SQL 关系型数据库 MySQL
MySQL管理与连接
MySQL管理与连接
|
7月前
|
安全 关系型数据库 MySQL
|
7月前
|
Java 数据挖掘 BI
Java医院绩效考核系统源码B/S+avue+MySQL助力医院实现精细化管理
医院绩效考核系统目标是实现对科室、病区财务指标、客户指标、流程指标、成长指标的全面考核、分析,并与奖金分配、学科建设水平评价挂钩。
82 0