简单介绍MySQL开启事务的两种方式

本文详细介绍了如何在MySQL中通过START TRANSACTION/BEGIN、SET autocommit=0来开启事务,并对比了两种方式的使用场景和注意事项。了解事务级别与手动提交的重要性。
导读本篇文章给大家分享MySQL 是如何开启一个事务的,原文通过两种方式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧

方式 1

START TRANSACTION 或 BEGIN 开始新的事务 COMMIT 提交当前事务 ROLLBACK 回滚当前事务

这是大家熟知的一种方式,其中开启事务的方式 start transaction 和 begin 是相同的。

简单介绍MySQL开启事务的两种方式简单介绍MySQL开启事务的两种方式

方式 2

SET autocommit = 0;

默认情况下 autocommit = 1,是自动提交事务的。autommit 是 session 级别的,就是当前连接更改了 autocommit,对其他连接没有影响。设置 autocommit 之后,本次连接的所有 sql 都是事务的形式,比如每次 commit 提交。

简单介绍MySQL开启事务的两种方式简单介绍MySQL开启事务的两种方式

通过截图可以看出,有一个事务在执行,因为设置了 set autocommit = 0;,所以后面的 update 操作修改结果,其他 session 并不会查到(RR 级别)。

这时候就需要自己手动执行 commit。

注意的是,autocommit 没有进行更改,此时 autocommit 值还是 0,也就意味着这个 session 后续的 sql 都是需要手动 commit 的。

简单介绍MySQL开启事务的两种方式简单介绍MySQL开启事务的两种方式

到此这篇关于MySQL开启事务的方式的文章就介绍到这了。Linux就该这么学

<think>好的,我现在需要回答用户关于MySQL中如何手动开启提交事务的问题。用户之前已经问过如何查看事务中的锁,现在这个问题是事务管理的基础部分,可能用户正在学习事务相关的知识。首先,我需要确认MySQL事务的基本语法。手动开启事务通常有三种方式START TRANSACTIONBEGIN,或者设置autocommit=0。提交事务使用COMMIT,回滚则是ROLLBACK。需要详细说明这些语句的用法区别。接下来,要给出具体的代码示例,展示如何正确使用这些语句。比如,在一个事务中执行多个更新操作,然后提交。同时,要注意说明在哪些情况下事务会被隐式提交,比如执行DDL语句时。 另外,可能需要解释事务的ACID特性,但用户的问题比较具体,可能不需要深入这部分,但可以简要提及事务的作用,比如保证数据一致性。 用户可能还会想知道设置autocommit的影响,比如默认情况下autocommit是开启的,每个语句自动提交,而关闭后需要显式提交。这部分需要明确说明,避免混淆。 示例代码应该包括开启事务、执行SQL语句、提交事务,以及回滚的案例。比如转账操作,这是一个经典的事务用例,可以展示如何保证两个账户的更新同时成功或失败。 还需要注意,在存储过程中使用事务可能会有不同的行为,但用户的问题可能更偏向于基本使用,暂时不需要深入存储过程的部分。 最后,相关问题需要围绕事务的其他方面,比如隔离级别、隐式提交、回滚的影响,以及事务与锁的关系。这样可以帮助用户进一步学习相关知识。</think>在MySQL中手动控制事务的完整流程如下: ### 1. 基本事务控制语句 ```sql -- 开启事务(三种方式任选其一) START TRANSACTION; -- 标准方式 BEGIN; -- 简化写法 SET autocommit = 0; -- 关闭自动提交 -- 执行事务操作 UPDATE account SET balance = balance - 100 WHERE id = 1; UPDATE account SET balance = balance + 100 WHERE id = 2; -- 提交事务 COMMIT; -- 回滚事务 ROLLBACK; -- 恢复自动提交模式 SET autocommit = 1; ``` ### 2. 带保存点的事务控制 ```sql START TRANSACTION; INSERT INTO orders (user_id, amount) VALUES (1, 500); -- 操作1 SAVEPOINT savepoint1; -- 设置保存点 UPDATE inventory SET stock = stock - 5 WHERE product_id = 10; -- 操作2 -- 当库存不足时回滚到保存点 ROLLBACK TO SAVE savepoint1; COMMIT; ``` ### 代码解释 1. `START TRANSACTION`会隐式关闭自动提交,直到遇到COMMIT/ROLLBACK 2. 使用保存点可以在事务中创建回滚标记点,实现部分回滚 3. `autocommit`参数控制是否自动提交(默认值为1,即自动提交模式) ### 3. 完整事务操作示例(银行转账) ```sql -- 开启事务 START TRANSACTION; -- 检查账户余额 SELECT balance INTO @current_balance FROM accounts WHERE id = 1 FOR UPDATE; -- 转账操作 UPDATE accounts SET balance = balance - 100 WHERE id = 1; UPDATE accounts SET balance = balance + 100 WHERE id = 2; -- 模拟异常情况 -- SET @error = 1; -- 测试时取消注释可触发回滚 IF (ROW_COUNT() = 1 AND @error IS NULL) THEN COMMIT; SELECT 'Transfer success' AS result; ELSE ROLLBACK; SELECT 'Transfer failed' AS result; END IF; ``` ### 事务控制要点 1. 显式事务需要明确的BEGINCOMMIT/ROLLBACK 2. 隐式提交操作包括:DDL语句(CREATE/ALTER TABLE)、权限操作等 3. 事务中应避免长时间未提交的操作,防止锁等待 4. 使用SELECT ... FOR UPDATE锁定需要修改的记录
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值