mysql执行SQL时事务是何时开启的_mysql事务执行顺序说明
发布时间 - 2026-01-06 00:00:00 点击率:次MySQL事务默认不自动开启,AUTOCOMMIT=1使每条DML立即提交;需BEGIN/START TRANSACTION或SET AUTOCOMMIT=0显式开启事务,且事务从第一条DML开始生效,DDL会隐式提交当前事务。
MySQL 事务默认不是自动开启的,而是按需显式或隐式启动
MySQL 的 AUTOCOMMIT 默认为 1(开启),这意味着每条单独的 DML 语句(如 INSERT、UPDATE、DELETE)都会立即提交,不处于事务中。只有当你执行 BEGIN、START TRANSACTION 或设置 AUTOCOMMIT=0 后,后续语句才进入同一个事务上下文。
显式开启事务后,事务从第一条 DML 开始生效,而非从 BEGIN 开始计时
BEGIN 和 START TRANSACTION 本身不修改数据,只是标记事务边界起点;真正让事务“活起来”的是第一条可写操作。例如:
START TRANSACTION; SELECT @x := 1; -- 不影响事务状态(纯查询,无锁、不计入事务) INSERT INTO t VALUES (1); -- 此刻事务才真正持有行锁、写入 undo log UPDATE t SET a=2 WHERE id=1; -- 属于同一事务
注意:SELECT 在默认隔离级别下是快照读,不触发事务锁,除非加 FOR UPDATE 或 LOCK IN SHARE MODE。
隐式事务开启只对某些语句有效,且受存储引擎限制
以下语句在 AUTOCOMMIT=1 下会**自动开启并立即提交**一个隐式事务(仅限支持事务的引擎,如 InnoDB):
-
INSERT、UPDATE、DELETE CREATE TABLE ... SELECT-
DROP TABLE、ALTER TABLE(部分操作)
但这些都不是“可回滚的多语句事务”——它们各自独立,无法用 ROLLBACK 撤销前面已执行的语句。比如:
INSERT INTO t VALUES (1); UPDATE t SET a=2; -- 即使没写 COMMIT,这两条也已各自提交
想跨语句回滚,必须先关 AUTOCOMMIT 或用 START TRANSACTION 包裹。
事务执行顺序严格遵循语句到达 server 的时间顺序,但可见性取决于隔离级别
事务内语句按客户端发送顺序执行,但其他事务能否看到中间结果,由隔离级别决定:
-
READ UNCOMMITTED:其他事务能立刻看到未提交修改(脏读) -
READ COMMITTED:每次SELECT都读取最新已提交快照 -
REPEATABLE READ(InnoDB 默认):事务第一次SELECT建立快照,后续读都复用 -
SERIALIZABLE:所有SELECT隐式加锁,强制串行
关键点:事务顺序 ≠ 提交顺序。两个并发事务可能因锁等待、死锁检测等原因,实际提交顺序与执行顺序不一致。
最容易被忽略的是:DDL 语句(如 ALTER TABLE)在 InnoDB 中会隐式提交当前事务,哪怕它出现在 START TRANSACTION 之后。这意味着你不能在事务中安
全地混合 DDL 和 DML 并指望整体回滚。
# mysql
# 无锁
# sql
# for
# select
# delete
# 并发
# table
# 隐式
# 的是
# 第一条
# 死锁
# 每条
# 这意味着
# 出现在
# 当你
# 你不
# 能在
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
如何在 Python 中将列表项按字母顺序编号(a.、b.、c. …)
长沙企业网站制作哪家好,长沙水业集团官方网站?
*服务器网站为何频现安全漏洞?
Laravel怎么多语言本地化设置_Laravel语言包翻译与Locale动态切换【手册】
Laravel怎么导出Excel文件_Laravel Excel插件使用教程
Laravel如何监控和管理失败的队列任务_Laravel失败任务处理与监控
如何在IIS管理器中快速创建并配置网站?
Laravel如何实现多语言支持_Laravel本地化与国际化(i18n)配置教程
千问怎样用提示词获取健康建议_千问健康类提示词注意事项【指南】
如何撰写建站申请书?关键要点有哪些?
简单实现Android文件上传
详解阿里云nginx服务器多站点的配置
如何在宝塔面板中修改默认建站目录?
如何彻底删除建站之星生成的Banner?
专业型网站制作公司有哪些,我设计专业的,谁给推荐几个设计师兼职类的网站?
如何在VPS电脑上快速搭建网站?
JS中使用new Date(str)创建时间对象不兼容firefox和ie的解决方法(两种)
如何为不同团队 ID 动态生成多个独立按钮
香港服务器网站卡顿?如何解决网络延迟与负载问题?
Laravel如何从数据库删除数据_Laravel destroy和delete方法区别
实例解析Array和String方法
微信小程序 闭包写法详细介绍
佛山网站制作系统,佛山企业变更地址网上办理步骤?
HTML透明颜色代码怎么让图片透明_给img元素加透明色的技巧【方法】
Laravel如何操作JSON类型的数据库字段?(Eloquent示例)
Laravel怎么清理缓存_Laravel optimize clear命令详解
如何在阿里云高效完成企业建站全流程?
Laravel如何升级到最新版本?(升级指南和步骤)
如何快速搭建高效可靠的建站解决方案?
如何用AI一键生成爆款短视频文案?小红书AI文案写作指令【教程】
iOS UIView常见属性方法小结
三星、SK海力士获美批准:可向中国出口芯片制造设备
javascript中闭包概念与用法深入理解
微信h5制作网站有哪些,免费微信H5页面制作工具?
C++时间戳转换成日期时间的步骤和示例代码
b2c电商网站制作流程,b2c水平综合的电商平台?
Laravel定时任务怎么设置_Laravel Crontab调度器配置
如何在建站之星网店版论坛获取技术支持?
IOS倒计时设置UIButton标题title的抖动问题
郑州企业网站制作公司,郑州招聘网站有哪些?
jimdo怎样用html5做选项卡_jimdo选项卡html5实现与切换效果【指南】
移动端手机网站制作软件,掌上时代,移动端网站的谷歌SEO该如何做?
免费视频制作网站,更新又快又好的免费电影网站?
Linux网络带宽限制_tc配置实践解析【教程】
通义万相免费版怎么用_通义万相免费版使用方法详细指南【教程】
北京网页设计制作网站有哪些,继续教育自动播放怎么设置?
大型企业网站制作流程,做网站需要注册公司吗?
Laravel如何使用Service Container和依赖注入?(代码示例)
Laravel项目怎么部署到Linux_Laravel Nginx配置详解
如何自己制作一个网站链接,如何制作一个企业网站,建设网站的基本步骤有哪些?

