前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布

事务

作者头像
海盗船长
发布2022-05-05 17:09:33
5020
发布2022-05-05 17:09:33
举报
文章被收录于专栏:基础知识文章基础知识文章

1.事务处理

1.事务的概念

事务是针对数据库的一组操作, 它可以由-一条或多条SQL语句组成。

2.事务的基本操作

在默认情况下,用户执行的每一条SQL语句都会被当成单独的事务自动提交。 如果要将一组SQL 语句作为-一个事务, 则需要先执行以下语句显式地开启一个事务。

代码语言:javascript
复制
START TRANSACTION;

此时,每一条SQL语句不再自动提交,用户需要手动提交操作才会生效。

代码语言:javascript
复制
COMMIT;

如果不想提交当前事务,可以取消事务(即回滚)。

代码语言:javascript
复制
ROLLBACK;

事务的执行要么成功,要么就返回到事务开始前的状态,这就保证了同一事务操作的同步性和数据的完整性。

MySQL中的事务必须满足A、C、I、D这4个基本特性。

  • Atomicity: 原子性

一个事务必须被视为一个不可分割的最小工作单元,只有事务中所有的数据库操作都执行成功,才算整个事务执行成功。

  • Consistency:一致性

一致性是指在事务处理时,无论执行成功还是失败,都要保证数据库系统处于一致的状态,保证数据库系统从不返回到一个未处理的事务中。

  • Isolation: 隔离性

隔离性是指当一个事务在执行时,不会受到其他事务的影响。保证了未完成事务的所有操作与数据库系统的隔离,直到事务完成为止,才能看到事务的执行结果。

  • Durability: 持久性

持久性是指事务一旦提交, 其对数据库的修改就是永久性的。

3.事务的保存点

在回滚事务时,若希望只撤销一部分,可以用保存点来实现。

代码语言:javascript
复制
SAVEPOINT 保存点名;

在设置保存点后,可以将事务回滚到指定保存点。

代码语言:javascript
复制
ROLLBACK TO SAVEPOINT 保存点名;

若不再需要一个保存点,使用如下语句删除。

代码语言:javascript
复制
RELEASE SAVEPOINT保存点名;

一个事务中可以创建多个保存点,在提交事务后,事务中的保存点就会被删除。 在回滚到某个保存点后,在该保存点之后创建过的保存点也会消失。

2.事务的隔离级别

事务隔离级的意义: 数据库是一个多用户的共享资源,MySQL允许多线程并发访问,用户可以通过不同的线程执行不同的事务。 为了保证这些事务之间不受影响,对事务设置隔离级是十分必要的。

1.查看事务隔离级别
代码语言:javascript
复制
#查看全局隔离级
SELECT @@global.transaction_ _isolation;
#查看当前会话中的隔离级
SELECT @@session.transaction_ isolation;
#查看下一个事务的隔离级
SELECT @@transaction_ isolation;

全局的隔离级:影响所有连接MySQL用户。 当前会话隔离级:只影响当前正在登录MySQL服务器的用户。(不会影响其他用户) 下一个事务的隔离级:仅对当前用户的下一个事务操作有影响。

MySQL中事务的隔离级别:
  • REPEATABLE READ:可重复读

MySQL的默认事务隔离级,它解决了脏读和不可重复读的问题, 确保了同一事务的多个实例在并发读取数据时,会看到同样的结果。

  • READ UNCOMMITTED:读取未提交

事务中最低的级别,可以读取到其他事务中未提交的数据。 也称为脏读(Dirty Read) :一个事务读取了另外一个事务未提交的数据。

  • READ COMMITTED:读取提交

大多数DBMS (如SQL Server、Oracle) 的默认隔离级,但不包括MySQL。 只能读取其他事务已经提交的数据,避免了脏读问题。 但是会出现不可重复读(NON-REPEATABLE READ)问题。

  • SERIALIZABLE:可串行化

隔离级的最高级别,它在每个读的数据行上加锁,使之不会发生冲突,解决了脏读、不可重复读和幻读的问题。 由于加锁可能导致超时(Timeout) 和锁竞争(Lock Contention)现象,性能是4种隔离级中最低的。 除非为了数据的稳定性,需要强制减少并发的情况时,才会选择此种隔离级。

2.修改隔离级别

设置事务的隔离级别:

代码语言:javascript
复制
SET [SESSION | GLOBAL] TRANSACTION ISOLATION LEVEL 参数值
  • SESSION: 当前会话
  • GLOBAL:全局
  • 直接省略:下一个事务的隔离级
  • TRANSACTION:事务
  • ISOLATION:隔离
  • LEVEL: 级别
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-09-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.事务处理
    • 1.事务的概念
      • 2.事务的基本操作
        • 3.事务的保存点
        • 2.事务的隔离级别
          • 1.查看事务隔离级别
            • 2.修改隔离级别
            相关产品与服务
            云数据库 SQL Server
            腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档