首页 > 数据库 >数据库事务

数据库事务

时间:2024-06-14 22:43:39浏览次数:11  
标签:事务 隔离 幻读 数据库 脏读 提交 级别

事务特性
事务应该具有 4 个属性:原子性、一致性、隔离性、持久性。这四个属性通常称为 ACID 特
性。
 原子性(atomicity)
 一致性(consistency)
 持久性(durability)

 隔离性(isolation)
一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。
(对数据库的并行执行,应该像串行执行一样)

事务的隔离级别

事务的隔离级别是数据库系统中用于控制多个并发事务之间数据访问的方式,以避免出现脏读、不可重复读和幻读等问题。
SQL标准定义了以下四种隔离级别:
读未提交(Read Uncommitted):这是最低级别的隔离级别,一个事务可以读取到其他事务尚未提交的数据,可能导致脏读问题。
脏读 是指读取到了未被其他事务提交的数据之后,其他的事务又回滚了。

提交读(Read Committed):一个事务只能读取到已经提交的数据,避免了脏读问题,但可能出现不可重复读的问题。
不可重复读是指在数据库访问中,一个事务范围内两个相同的查询却返回了不同数据,针对的是对同一条数据的更改。

可重复读(Repeatable Read):在同一个事务中多次读取相同的数据返回的结果是一样的,避免了脏读和不可重复读问题,但幻读依然存在。
幻读(Phantom Read)是指在一个事务内读取某个范围的记录时,另一个并发事务在该范围内插入了新的记录,当原始事务再次读取该范围的记录时,会发现一些之前没有的“幻”记录。针对的是一个范围内的结果集不同

串行化(Serializable):这是最高的隔离级别,通过强制事务串行执行,避免了脏读、不可重复读和幻读问题,但可能导致大量超时和锁竞争问题。
不同隔离级别的选择取决于应用程序对数据一致性和性能的需求。较高的隔离级别提供了更高的数据一致性保证,但可能会牺牲一定的性能。因此,需要根据具体的应用场景和需求来选择合适的隔离级别。

关于读未提交隔离级别是否会出现幻读,答案是会。在读未提交隔离级别下,一个事务可以读取到其他事务尚未提交的数据,这包括其他事务插入的数据,从而导致幻读问题。

MySQL 默认的事务隔离级别为 repeatable-read
查看当前mysql数据库的隔离级别show variables like '%tx_isolation%';

事务的语法
一、开启事务
1、begin
2、START TRANSACTION(推荐)
3、begin work
二、事务回滚
rollback
三、事务提交
commit
四、还原点
savepoint
show variables like '%autocommit%'; 自动提交事务是开启的
set autocommit=0;
insert into testdemo values(5,5,5);
savepoint s1;
insert into testdemo values(6,6,6);
savepoint s2;
insert into testdemo values(7,7,7);
savepoint s3;
select * from testdemo
rollback to savepoint s2
rollback

标签:事务,隔离,幻读,数据库,脏读,提交,级别
From: https://www.cnblogs.com/velloLei/p/18248781

相关文章

  • 成为MySQL DBA后,再看ORACLE数据库(九、用户与权限)
    数据库的用户和权限的管理是DBA日常运维工作中的重要组成部分,不同数据库的用户权限体系及管理方式也会有差别,本文将对ORACLE的用户权限体系和常用操作进行一个总结。一、用户管理ORACLE中创建用户语句和mysql一样,不同的是mysql可以在用户后面加ip以实现ip层面的访问控制。在ORAC......
  • 数据库之存储引擎
    一、InnoDB是一种事务型存储引擎,完全支持acid事务特性,redolog和undolog,使用行级锁,并发程度最高。二、MyISAMMyISAM对整张表加锁,而不是针对行,并发程度低。读取时会对需要读到的所有表加共享锁,写入时则对表添加排它锁。但是在表有读取查询时,也可以往表中插入新的记录。......
  • 数据库中的锁
    一、MySQL中的锁表级锁:开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突的概率最高,并发度最低。行级锁:开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也最高。页面锁(gap锁,间隙锁):开销和加锁时间界于表锁和行锁之间;会出现死锁;锁定粒度界于表锁和行锁......
  • Java与数据库连接技术JDBC关键核心之PreparedStatement以及SQL注入演示解决和原理
    PreparedStatementSQL注入执行预编译的SQL对象这样也能登录成功模拟SQL注入是这个原因现在基本上不存在SQL注入的问题解决SQL注入就是传一些语句导致原来的SQL语句改变了修改代码通过设置参数的方式就能防止SQL注入实际上我们进行了一个转化将字符和关......
  • 数据库原理前三章
    第一章1. 试说明数据、数据库、数据库管理系统和数据库系统的概念。答:数据是数据库中存储的基本对象,数据库是存放数据的场所,数据库管理系统是管理数据库数据以及其功能的系统软件,数据库系统是由数据库、数据库管理系统、数据库管理员和数据库应用程序共同构成的系统。5. 比较......
  • MySQL数据库管理
    目录1.MySQL数据库管理1.1常用的数据类型​编辑1.2char和varchar区别2.增删改查命令操作2.1查看数据库结构2.2SQL语言2.3创建及删除数据库和表2.4 管理表中的数据记录2.5修改表名和表结构3.MySQL的6大约束属性1.MySQL数据库管理1.1常用的数据类型1.2c......
  • 数据库SQL优化
    数据库SQL优化通常涉及以下方面:1.查询优化:确保使用正确的索引来优化查询。2.避免全表扫描:避免不必要的全表扫描,使用索引就是为了避免全表扫描。3.使用EXPLAIN分析查询:检查SQL查询的执行计划,判断sql语句存在的问题。4.使用JOIN代替子查询:适当情况下,使用JOIN来合并表。5.使用视......
  • 数据库之SQL语法大全
    DISTINCTcolumn_name去除字段的重复WHERE条件筛选操作AND、OR用于where条件后的多条件连接如果第一个条件和第二个条件都成立,则用AND运算符连接这两个条件。如果第一个条件和第二个条件中只要有一个成立,则用OR运算符连接这两个条件。如:SELECT*FROMWebsitesWHER......
  • golang与数据库报错解决
    在这里插入图片描述提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录一、前言......
  • 数据库之理解SQL
    初识SQL结构化查询语言(StructuredQueryLanguage)简称SQL,是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库管理系统(RelationalDatabaseManagementSystem:RDBMS)的语言,和我们所熟悉的Java、php、python等程序语言一样,也是......