MySQL事务

本文详细阐述了事务处理在数据库中的关键概念,包括原子性、一致性、隔离性和持久性,以及MySQL中事务的开启、回滚和提交操作。特别介绍了不同隔离级别的特点和脏读、不可重复读和幻读现象。同时讲解了如何在InnoDB引擎下启用事务,并演示了设置自动提交和事务隔离级别的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        事务处理可以用来维护数据库的完整性,保证成批的SQL语句要么全部执行,要么全部不执行。

1、事务必须满足四个条件(ACID):原子性、一致性、隔离性、持久性。

        原子性(Atomicity,不可分割性):一个事务(transaction)中的所有操作要么全部完成,要么全部不完成,不会在中间结束。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像这个事务从来没有被执行过一样。


        一致性(Consistency):在事务开始之前和事务结束之后,数据库的完整性没有被破坏。这表示所有写入的资料符合预设规则,这包含资料的精准度、串联性以及数据库后续可以自发的完成预设的工作。


        隔离性(Isolation,独立性):数据库允许多个并发事务同时对其数据进行读写和修改的能力,隔离性可以防止多个事务同时执行时由于交叉执行导致的数据不一致。事务的隔离性分为不同级别,包括读未提交(Read uncommitted)、读提交(Read committed)、可重复读(repeatable read)和序列化(Serializable)。

        当数据库执行事务操作时,mysql会在被作用的表上加锁,防止其他用户改表。        

脏读不可重复读幻读

Read uncommitted

读取未提交

可能出现可能出现可能出现

Read committed

读取已提交数据

不可能出现可能出现可能出现

Repeatable read

重复读数据

不可能出现不可能出现可能出现

Serializable

序列化

不可能出现不可能出现不可能出现

        读取未提交:这个隔离级别是最低的,一个事务可以读取到另一个事物提交事务前的数据。这种读取称为脏读。

        读取已提交:两个并发执行的事务,一个事务对数据进行操作,同一时刻另一个事务可以只可以读取不可以进行修改,可能导致两次读取的结果不一致。称为不可重复读。

        重复读取数据:两个并发的事务,一个事务操作时,同一时刻另一个事务不可以查询,需要在查询结束后在读取,导致两次读取结果不一致。称为幻读。

        序列化:最高级别的事务隔离,性能很低,不会出现幻读等场景。


       持久性(Durability):事务处理结束后,对数据的修改是永久的,不会因为系统故障导致丢失。

2、事务处理

        在MySQL中只有使用了Innodb数据库引擎才支持事务。

        在MySQL命令行的默认设置下,事务都是自动提交的。因此在开启一个事务之前,需要显示的开启事务命令start transaction,或者执行命令set autocommit=0,用来禁止自动提交。

        begin—开启一个事务                Rollback—回滚                commit—事务确认

        set autocommit=0设置手动提交                set autocommit=1设置自动提交

查看事务级别:select @@tx_isolation;

设置事务级别:set session transaction isolation level 事务级别;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值