MySQL 基础---事务

简介: 事务的实现机制与实际应用:事务概述事务控制语句事务隔离级别InnoDB锁机制事务概述事务特性:原子性(Atomicity): 事务中所有的操作视为一个原子单元,即对事务所进行的数据修改等操作只能是完全提交或者完全回滚。

事务的实现机制与实际应用:

  • 事务概述
  • 事务控制语句
  • 事务隔离级别
  • InnoDB锁机制
  1. 事务概述
    事务特性:
  • 原子性(Atomicity): 事务中所有的操作视为一个原子单元,即对事务所进行的数据修改等操作只能是完全提交或者完全回滚。
  • 一致性(Consistency): 事务在完成时,必须使所有的数据从一种一致性状态变更为另外一种一致性状态,所有的变更都必须应用于事务的修改,以确保数据的完整性。
  • 隔离性(Isolation):一个事务中的操作语句所做的修改必须与其他事务所做的修改相隔离。在进行事务查看数据时,数据所处的状态,要么是被另一并发事务修改之前的状态,要么是被另一并发事务修改之后的状态,即当前事务不会查看由另一个并发事务正在修改的数据。这种特性通过锁机制实现。
  • 持久性(Durability): 事务完成之后,所做的修改对数据的影响是永久的,即使系统重启或者出现系统故障数据仍可以恢复。

(1) REDO日志
事务执行时需要将执行的事务日志写入到日志文件里,对应的文件为REDO日志。日志缓冲区的刷新方法或者时间间隔可以通过参数innodb_flush_log_at_trx_commit控制。
REDO日志对应磁盘上的ib_logfileN文件,该文件默认为5MB,建议设置为512MB以便容纳较大的事务。其中ib_logfile0和ib_logfile1为REDO日志。


img_0cf41776e095cfa2c1a3dbf058f2c7ed.png
REDO日志路径.png

(2) UNDO日志
与REDO日志相反,UNDO日志主要用于事务异常时的数据回滚,具体内容就是复制事务前的数据库内容到UNDO缓冲区,然后在合适的时间将内容刷新到磁盘。

  1. 事务控制语句
 # 查看MySQL隔离级别
 show variables like 'tx_isolation';
# 创建测试需要的表,注意存储引擎为InnoDB
use test
# 创建表
create table test_1(
          id int,
          username varchar(20)
)engine=InnoDB;
# 插入语句
 insert into test_1
          values(1,'petter'),
          (2,'bob'),(3,'allen'),(4,'aron');
# 查询数据
select * from test_1;

 # 开启一个事务
 begin;

 # 更新一条记录
 update test_1 set username='test' where id=1;
OK, 1 row affected (0.00 sec)

 # 提交事务
 commit;

 # 查询数据
 select * from test_1;

 # 开启另一个事务
 begin;
# 更新数据
 update test_1 set username='petter' where id=1;
# 查询数据
 select*from test_1;
 # 回滚事务
 rollback;
 # 查询数据
 select * from test_1;
  1. 事务隔离级别
# 未提交读
set global transaction isolation level read uncommitted;
# 提交读
set global transaction isolation level read committed;
# 可重复读
set global transaction isolation level repeatable read;
# 可串行读
set global transaction isolation level serializable;

(1)READ-UNCOMMITTED(读取未提交内容)
在该隔离级别,所有事务都可以看到其他未提交事务的执行结果。读取未提交的数据被称为脏读(Dirty Read);
(2)READ-COMMITTED(读取提交内容)
这是大多数数据库系统的默认隔离级别,但不是MYSQL的默认隔离级别。满足了隔离的简单定义: 一个事务从开始到提交前所做的任何改变都是不可见的,事务只能看见已经提交事务所做的改变。这种隔离级别也支持所谓的不可重复读(Nonrepeatable Read),因为同一事务的其他实例在该实例处理期间可能会有新的数据提交导致数据改变,所以同一查询可能返回不同结果,此级别导致不可重复读。
(3)REPEATABLE-READ(可重读)
这是MYSQL默认的事务隔离级别,能确保同一事务的多个实例在并发读取数据时,会看到同样的数据行。理论上会导致幻读(Phantom Read)。
(4) Serializable(可串行化)
这是最高的隔离级别,通过强制事务排序,是之不可能相互冲突,从而解决幻读问题。简言之,就是在每个读的数据行上加上共享锁实现。这个级别,可能会导致大量的超时现象和所竞争,一般不推荐使用。

  1. InnoDB锁机制
    (1) 锁的类型(共享锁/排他锁/意向锁)
  • 共享锁
    共享锁代号是S,是Share的缩写,共享锁的所力度是行或者元组(多个行)。一个事务获取了共享锁之后,可以对锁定范围内的数据执行读操作。
  • 排他锁
    排他锁的代号是X,是eXclusive的缩写,排他锁的粒度与共享锁相同,也是行或者元组。一个事务获取了排他锁之后,可以对锁定范围内的数据执行写操作。
  • 意向锁
    意向锁是一种表锁,锁定的粒度是整张表,分为意向共享锁(IS)和意向排他锁(IX)两类。意向共享锁表示一个事务有意对数据上共享锁或者排他锁。“有意”表示事务想执行操作但还没有真正执行。
    (2) 锁粒度
    锁的粒度主要分为表锁和行锁。
    表锁管理锁的开销最小,同时允许的并发量也是最小的锁机制。行锁可以支持最大的并发。
相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
目录
相关文章
|
存储 SQL 关系型数据库
mysql底层原理:索引、慢查询、 sql优化、事务、隔离级别、MVCC、redolog、undolog(图解+秒懂+史上最全)
mysql底层原理:索引、慢查询、 sql优化、事务、隔离级别、MVCC、redolog、undolog(图解+秒懂+史上最全)
mysql底层原理:索引、慢查询、 sql优化、事务、隔离级别、MVCC、redolog、undolog(图解+秒懂+史上最全)
|
11月前
|
SQL 关系型数据库 MySQL
MySQL锁机制:并发控制与事务隔离
本文深入解析了MySQL的锁机制与事务隔离级别,涵盖锁类型、兼容性、死锁处理及性能优化策略,助你掌握高并发场景下的数据库并发控制核心技巧。
|
存储 监控 Oracle
MySQL事务
MySQL事务具有ACID特性,包括原子性、一致性、隔离性和持久性。其默认隔离级别为可重复读,通过MVCC和间隙锁解决幻读问题,确保事务间数据的一致性和并发性。
MySQL事务
|
10月前
|
关系型数据库 MySQL 数据库
【赵渝强老师】MySQL的事务隔离级别
数据库并发访问时易引发数据不一致问题。如客户端读取到未提交的事务数据,可能导致“脏读”。MySQL通过四种事务隔离级别(读未提交、读已提交、可重复读、可序列化)控制并发行为,默认为“可重复读”,以平衡性能与数据一致性。
497 0
|
11月前
|
关系型数据库 MySQL 数据库
MySql事务以及事务的四大特性
事务是数据库操作的基本单元,具有ACID四大特性:原子性、一致性、隔离性、持久性。它确保数据的正确性与完整性。并发事务可能引发脏读、不可重复读、幻读等问题,数据库通过不同隔离级别(如读未提交、读已提交、可重复读、串行化)加以解决。MySQL默认使用可重复读级别。高隔离级别虽能更好处理并发问题,但会降低性能。
349 0
|
安全 关系型数据库 MySQL
mysql事务隔离级别
事务隔离级别用于解决脏读、不可重复读和幻读问题。不同级别在安全与性能间权衡,如SERIALIZABLE最安全但性能差,READ_UNCOMMITTED性能高但易导致数据不一致。了解各级别特性有助于合理选择以平衡并发性与数据一致性需求。
350 1
|
SQL 安全 关系型数据库
【MySQL基础篇】事务(事务操作、事务四大特性、并发事务问题、事务隔离级别)
事务是MySQL中一组不可分割的操作集合,确保所有操作要么全部成功,要么全部失败。本文利用SQL演示并总结了事务操作、事务四大特性、并发事务问题、事务隔离级别。
6067 56
【MySQL基础篇】事务(事务操作、事务四大特性、并发事务问题、事务隔离级别)
|
SQL 关系型数据库 MySQL
MySQL事务日志-Undo Log工作原理分析
事务的持久性是交由Redo Log来保证,原子性则是交由Undo Log来保证。如果事务中的SQL执行到一半出现错误,需要把前面已经执行过的SQL撤销以达到原子性的目的,这个过程也叫做"回滚",所以Undo Log也叫回滚日志。
1028 7
MySQL事务日志-Undo Log工作原理分析
|
SQL 关系型数据库 MySQL
MySQL进阶突击系列(04)事务隔离级别、AICD、CAP、BASE原则一直搞不懂? | 看这篇就够了
本文详细介绍了数据库事务的四大特性(AICD原则),包括原子性、隔离性、一致性和持久性,并深入探讨了事务并发问题与隔离级别。同时,文章还讲解了分布式系统中的CAP理论及其不可能三角关系,以及BASE原则在分布式系统设计中的应用。通过具体案例和图解,帮助读者理解事务处理的核心概念和最佳实践,为应对相关技术面试提供了全面的知识准备。
|
关系型数据库 MySQL 数据库
MySQL事务隔离级别及默认隔离级别的设置
在数据库系统中,事务隔离级别是一个关键的概念,它决定了事务在并发执行时如何相互隔离。MySQL提供了四种事务隔离级别,每种级别都解决了不同的并发问题。本文将详细介绍这些隔离级别以及MySQL的默认隔离级别。

热门文章

最新文章

推荐镜像

更多