Mysql之事务(上)

发布于:2025-04-02 ⋅ 阅读:(26) ⋅ 点赞:(0)


 

🏝️专栏:Mysql_猫咪-9527的博客-CSDN博客
🌅主页:猫咪-9527-CSDN博客 

“欲穷千里目,更上一层楼。会当凌绝顶,一览众山小。”

目录

1.什么需要为事务?

2.事务的四个特性

        1. 原子性(Atomicity)

        2. 一致性(Consistency)

        3. 隔离性(Isolation)

        4. 持久性(Durability)

3.事务的引擎版本支持

4.事务的常见操作方式

4.1事务的提交方式

4.1.1查看当前的提交方式

​编辑 4.1.2改变当前的提交方式

 4.2事务的常见简单方式

4.2.1查看系统的默认隔离级别

 4.2.2创建测试表


1.什么需要为事务?

        事务的存在是为了保证数据的完整性、一致性、隔离性和持久性(即ACID原则),尤其在面对错误、并发和系统崩溃等不确定性时,能够确保数据库处于一个可靠和一致的状态。

  • 保证数据一致性
    • 如果在一个操作过程中,部分成功、部分失败,事务可以保证要么所有操作成功,要么所有操作都回滚,避免数据库处于不一致的状态。
  • 处理错误和异常
    • 在应用程序操作数据库时,可能会遇到各种意外情况,比如断电、网络问题等。事务能够在发生异常时保证数据库恢复到操作前的状态。
  • 简化并发控制
    • 多个用户同时操作数据库时,事务确保了并发操作的正确性,不会出现数据竞争或修改错误。比如两个用户同时修改同一条数据时,事务能够控制他们的操作顺序。
  • 提高程序可靠性
    • 对于开发者来说,事务提供了一种简化的编程模型,不需要编写复杂的错误处理逻辑。开发者只需关注如何设计业务逻辑,数据库的事务机制自动保证数据的一致性和完整性。

因此事务本质上是为了应用层服务而特别创建的,而不是伴随着数据库系统天生就有的。

2.事务的四个特性

        1. 原子性(Atomicity)
  • 事务中的一组操作要么全部成功,要么全部失败。如果在某个操作发生错误或中断,系统将回滚到事务开始时的状态,确保不会出现部分操作完成的问题。

        2. 一致性(Consistency)
  • 在事务开始前和结束后,数据库必须保持一致的状态。如果事务执行后数据不符合预设的约束条件(如外键、唯一性等),则事务会被回滚。

        3. 隔离性(Isolation)
  • 每个事务的执行不应受到其他事务的干扰,保证事务的执行过程是独立的。常见的并发问题包括脏读、不可重复读和幻读,隔离性解决了这些问题。

        4. 持久性(Durability)
  • 一旦事务提交,所有的更改都会永久保存在数据库中,即使系统崩溃也能恢复。

3.事务的引擎版本支持

在 MySQL 中只有使用了 Innodb 数据库引擎的数据库或表才支持事务, MyISAM 不支持。

4.事务的常见操作方式

4.1事务的提交方式
  • 主动提交
  • 自动提交
4.1.1查看当前的提交方式
show variables like 'autocommit';
 4.1.2改变当前的提交方式
关闭自动提交 开启自动提交
set autocommit=0;
set autocommit=1;

 4.2事务的常见简单方式

4.2.1查看系统的默认隔离级别
select @@tx_isolation;

 4.2.2创建测试表

创建表:

create table if not exists account(
id int primary key,
name varchar(50) not null default '',
blance decimal(10,2) not null default 0.0
)ENGINE=InnoDB DEFAULT CHARSET=UTF8;

开始事务:

方案一:

begin;

方案二:

start transaction;

简单回滚演示: 

Mysql当发生客户端崩溃时,未主动commit的事务,会主动回滚,不受是否自动提交的影响

主动提交 未主动提交

数据存在 数据回滚,丢失

自动提交开 自动提交关

 

 

结论:

  • 只要输入begin或者start transaction,事务便必须要通过commit提交,才会持久化,与是否设置set autocommit无关。
  • 事务可以手动回滚,同时,当操作异常,MySQL会自动回滚
  • 对于InnoDB 每一条SQL 语言都默认封装成事务,自动提交。(select有特殊情况,MySQL 有MVCC )
  • 从上面的例子,我们能看到事务本身的原子性(回滚),持久性(commit)

事务操作注意事项

  • 如果没有设置保存点,也可以回滚,只能回滚到事务的开始。直接使用 rollback(前提是事务还没有提交)
  • 如果一个事务被提交了(commit),则不可以回退(rollback)
  • 可以选择回退到哪个保存点
  • InnoDB 支持事务, MyISAM 不支持事务
  • 开始事务可以使 start transaction 或者begin 

网站公告

今日签到

点亮在社区的每一天
去签到