MySQL事务处理

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

1. MySQL 事务

一、事务简介

事务是可以将一系列DML语句分组操作执行的一种机制

可以根据业务需要将多个DML语句进行分组,每一组操作对应一个事务

在组内的所有DML操作步骤或者都成功,或者都失败

如果组内所有步骤都执行正常,则提交,使数据库记录其操作状态

如果组内有些步骤出现错误或不完整,则取消组内执行的所有操作,使数据库回到操作之前的状态

事务需要遵从ACID原则

二、事务必要性

有些业务领域对数据的一致性,安全性和完整性要求很高,对于数据的存储和操作必须要由支持事务的数据库来承担

银行业务

电信业务

证券业务

政府部门各类审批业务

在线交易业务

……

有些业务领域对数据安全性要求不高,因数据库服务器的意外故障丢失一些数据是可以接受的,因此可以选择不支持事务的数据库

聊天论坛

产品评论

……

三、选择是否使用事务的因素

使用事务的弊端

耗费更多的CPU资源

耗费更多的内存

耗费更多的磁盘空间

如果保证数据完整性比增加系统开销带来的成本重要,那么使用事务

例如:财务系统、银行系统、证券交易系统、电信计费系统、审批系统等

如果访问数据库时由于意外导致丢失几条数据或造成数据不够完整对于业务可以接受,性能更重要,那么不用使用事务

例如:论坛,聊天,评论信息等

四、ACID原则

ACID是事务的四个属性,支持事务的数据库一般都要符合ACID原则

Atomic (原子性)

一个事务中的所有语句作为一个单元要么都成功,要么都取消

Consistent (一致性)

数据库中的数据要满足完整性约束,能确保数据库状态从一个一致性状态转变为另一个一致性状态;例如:前述的银行转账示例中事务开始前张三储蓄账户与信用账户余额之和是10000+(-1000)=9000,事务结束后余额之和也是9000+0=9000,数据要保持前后一致;同时也包括读一致性要求,例如:9:00中发起一个查询,9:10才得到最终结果,期间查询的数据被修改过,9:10得到的查询结果只能是9:00中发起查询那一刻数据的状态,其后修改过的数据不能出现在最终查询结果中

Isolated (隔离性)

事务之间相互隔离,不互相影响。即:未完成的事务对于数据产生的变化对于并发的其他事务不可见

Durable (持久性)

事务成功完成后,所做的所有对数据的变更都会准确地记录在数据库中,这些变更通常以日志的形式记录下来,以确保所做的变更不会丢失

2. MySQL事务存储引擎

INNODB是MySQL的默认存储引擎

INNODB支持事务

mysql> show engines\G

3. MySQL事务控制语句 (TCL)

语句                                                                                                       说明

START TRANSACTION(或BEGIN)             显式开始一个新事务,直到通过COMMIT 或ROLLBACK 显式结束

SAVEPOINT spname                                        事务中可以回滚到的位置的唯一标识符

COMMIT                                                          永久记录当前事务所做的更改,事务显示结束

ROLLBACK                                                    取消当前事务所做的更改,事务显示结束

ROLLBACK TO spname                                    取消在savepoint 之后执行的更改,事务未结束

RELEASE SAVEPOINT                                   删除savepoint 标识符,不会删除任何事务语句

SET AUTOCOMMIT                                         为当前连接禁用或启用默认autocommit 模式

4. MySQL AUTOCOMMIT模式

默认情况下,MySQL AUTOCOMMIT 模式处于启用状态

意味着每一条DML语句都会产生一个事务

每一条DML语句执行完了都会自动提交commit;因此无法通过commit 或rollback 作为一个单元提交或回滚多个DML语句

有时,会将这种情况误认为根本没有事务,但是情况并非如此

通常使用start transaction;语句来改变autocommit,以显示的方式开启一个事务

start transaction 后面的所有DML语句会当成一个事务的一组操作,直到输入了commit;或rollback;命令事务才已显示的方式结束

MySQL使用commit和rollback语句显示地提交或回滚一个事务

但有些语句会造成事务已隐式的方式按照提交(commit)来结束,这些语句如下所示:

create; alter; drop; grant; revoke; set password; start transaction; truncate 等

例如:start transaction之后执行了一系列DML操作,产生了一个事务,但是执行了一个建表语句,create table a (id int); 这会导致事务以提交(commit)的方式结束,即还没有执行commit命令就使事务以提交的方式提前结束了,所以叫做隐式提交

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
5月前
|
SQL 关系型数据库 MySQL
MySQL的事务处理
MySQL的事务处理
|
6月前
|
SQL 关系型数据库 MySQL
|
6月前
|
关系型数据库 MySQL
Mysql基础第二十九天,管理事务处理
Mysql基础第二十九天,管理事务处理
29 0
Mysql基础第二十九天,管理事务处理
|
6月前
|
SQL 前端开发 关系型数据库
MYSQL基础之【正则表达式,事务处理】
MYSQL基础之【正则表达式,事务处理】
42 0
|
SQL 关系型数据库 MySQL
MySQL---数据库从入门走向大神系列(六)-事务处理与事务隔离(锁机制)
MySQL---数据库从入门走向大神系列(六)-事务处理与事务隔离(锁机制)
137 0
MySQL---数据库从入门走向大神系列(六)-事务处理与事务隔离(锁机制)
|
SQL 存储 安全
Mysql必知必会:管理事务处理
Mysql必知必会:管理事务处理
|
关系型数据库 MySQL 数据库
MySQL 事务处理
事务是一系列操作,将它们综合为一个整体,这些操作必须全部完成,如果有一个操作失败,那么事务就回滚到最开始的状态,仿佛什么都没发生过一样。
|
存储 SQL 缓存
Spring事务专题(三)事务的基本概念,Mysql事务处理原理
本文主要介绍了事务的基本概念跟MySQL中事务的实现原理
154 0
|
存储 安全 关系型数据库
|
SQL 关系型数据库 PHP