前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MySQL(事务)

MySQL(事务)

作者头像
全栈开发日记
发布2022-05-12 21:11:26
2.2K0
发布2022-05-12 21:11:26
举报
文章被收录于专栏:全栈开发日记全栈开发日记

目录:

事务四大特性 数据库的并发问题 数据库事务的隔离性 隔离级别 设置隔离级别 隐式事务 显式事务

事务四大特性

原子性

原子性是指事务是最小单位,不可分割,事务中的所有操作要么全部成功,要么全部失败;

一致性

事务必须使数据库从一个状态到另一个状态;

隔离性

一个事务在执行过程中不受其他事务的干扰;

持久性

事务一旦提交,数据就会被持久化的数据库中;

数据库的并发问题

对于同时运行的多个事务,当这些事务访问数据库中的相同的数据时,如果没有采取必要的隔离机制,就会导致以下并发问题;

读写的问题

脏读(dirty read)

例如:有两个事务,t1读取了t2更新但没有提交的数据,如果t2回滚后,t1读取的内容是无效。 不可重复读(unrepeatable read)

例如:有两个事务,t1读取一个字段,然后t2更新该字段,之后,t1再次去读取同一个字段;t1两次读取同一个字段读到的数据是不同的。 幻读(phantom read)

例如:有两个事务,t1从一个表中读取了一个字段,然后t2在该表中插入了一些新的数据,之后,t1再次读取同一个表,就会出现不同行数;

数据库事务的隔离性

数据库必须具有隔离并运行各个事务的能力,使他们不会相互影响,尽量避免各种各种并发问题。

隔离级别

一个事务与其他事务隔离的程度称为隔离级别,数据库中规定了4种事务隔离级别,不同隔离级别对应不同的干扰程度,隔离级别越高,数据一致性越好,但是并发越差

四种隔离级别

MySQL支持4种隔离级别,默认使用的repeatable read;

Oracle支持2种隔离级别,read committed,serializable,默认是同read committed;

SQL Server 支持4种隔离级别,默认使用read committed隔离级别;

设置隔离级别

每次启动一个mysql程序时,都会获取一个单独的数据库连接,每个连接都有一个全局变量用于记录数据库当前的隔离级别@@transation_isolation

查看当前连接的数据库隔离级别:

代码语言:javascript
复制
SELECT @@transaction_isolation;

设置当前的隔离级别:

代码语言:javascript
复制
set session transaction isolation level READ COMMITTED;

设置数据库全局的隔离级别:

代码语言:javascript
复制
SET GLOBAL transaction isolation level READ COMMITTED;
-- 不推荐修改

隐式事务

默认情况下,MySQL,SQL Server,Oracle开启了自动提交的事务。

查看事务:

代码语言:javascript
复制
show variables like 'autocommit';

显式事务

显式事务是需要手动开启事务,并且提交事务的。

在使用显式事务前必须将隐式事务改为显式事务。

将隐式事务改为显式事务:

代码语言:javascript
复制
SET autocommit=0;

开启事务:

代码语言:javascript
复制
START TRANSACTION; 
INSERT INTO t1(s1) VALUES(1); 
INSERT INTO t1(s1) VALUES(2);

事务提交:

代码语言:javascript
复制
COMMIT;

事务回滚,将INSERT,UPDATE,DELETE到数据库中的数据,恢复为原样。对已经提交的数据没有办法回滚:

代码语言:javascript
复制
ROLLBACK;
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-05-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 全栈开发日记 微信公众号,前往查看

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

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

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