Mysql之事务(上)

1.什么需要为事务?事务的存在是为了保证数据的完整性、一致性、隔离性和持久性(即ACID原则),尤其在面对错误、并发和系统崩溃等不确定性时,能够确保数据库处于一个可靠和一致的状态。保证数据一致性:如果在一个操作过程中

Mysql之事务(上)

1.什么需要为事务?

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

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

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

2.事务的四个特性
1. 原子性(Atomicity)
  • 事务中的一组操作要么全部成功,要么全部失败。如果在某个操作发生错误或中断,系统将回滚到事务开始时的状态,确保不会出现部分操作完成的问题。
2. 一致性(Consistency)
  • 在事务开始前和结束后,数据库必须保持一致的状态。如果事务执行后数据不符合预设的约束条件(如外键、唯一性等),则事务会被回滚。
3. 隔离性(Isolation)
  • 每个事务的执行不应受到其他事务的干扰,保证事务的执行过程是独立的。常见的并发问题包括脏读、不可重复读和幻读,隔离性解决了这些问题。
4. 持久性(Durability)
  • 一旦事务提交,所有的更改都会永久保存在数据库中,即使系统崩溃也能恢复。
3.事务的引擎版本支持

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

4.事务的常见操作方式
4.1事务的提交方式
  • 主动提交
  • 自动提交
4.1.1查看当前的提交方式
代码语言:javascript代码运行次数:0运行复制
show variables like 'autocommit';

4.1.2改变当前的提交方式

4.2事务的常见简单方式
4.2.1查看系统的默认隔离级别
代码语言:javascript代码运行次数:0运行复制
select @@tx_isolation;
4.2.2创建测试表

创建表:

代码语言:javascript代码运行次数:0运行复制
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;

开始事务:

方案一:

代码语言:javascript代码运行次数:0运行复制
begin;

方案二:

代码语言:javascript代码运行次数:0运行复制
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
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。 原始发表:2025-04-01,如有侵权请联系 cloudcommunity@tencent 删除数据库mysql并发事务系统

发布者:admin,转转请注明出处:http://www.yc00.com/web/1748030253a4721056.html

相关推荐

  • Mysql之事务(上)

    1.什么需要为事务?事务的存在是为了保证数据的完整性、一致性、隔离性和持久性(即ACID原则),尤其在面对错误、并发和系统崩溃等不确定性时,能够确保数据库处于一个可靠和一致的状态。保证数据一致性:如果在一个操作过程中

    10小时前
    10

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信