MySQL如何配置只读事务优化性能_使用start transaction read only
MySQL 5.6 支持 START TRANSACTION READ ONLY5.7/8.0 才真正生效并优化性能需显式声明AUTOCOMMIT1 下无效执行写操作会报错与全局 read_onlyON 无关不保证强一致性仅减少事务开销。MySQL 5.6 才支持 START TRANSACTION READ ONLY低于 5.6 的版本执行会直接报错ERROR 1290 (HY000): The MySQL server is running with the --read-only option so it cannot execute this statement注意这错误名有误导性实际是语法不识别不是权限问题。5.6 引入只读事务语法8.0 进一步优化了只读事务的内部处理路径——跳过事务 ID 分配、不写 undo log、减少锁竞争。如果你用的是 5.7 或 8.0这个语法才真正生效否则它会被降级为普通事务徒增误解。检查版本SELECT VERSION();只读事务必须显式声明AUTOCOMMIT1 下无效很多人以为只要不写 UPDATE/INSERT查询自动就是只读事务——不是。MySQL 不会自动推断事务读写属性必须靠 START TRANSACTION READ ONLY 显式开启。即使你在 AUTOCOMMIT0 下先 BEGIN再执行 SELECT也还是可写事务只是没写而已无法触发只读优化。SET AUTOCOMMIT 0; → SELECT ... → 仍是可写事务START TRANSACTION READ ONLY; → SELECT ... → 触发只读路径一旦在只读事务里执行了 INSERT、UPDATE、CREATE TEMPORARY TABLE 等写操作MySQL 会立刻报错ERROR 1792 (25006): Cannot execute statement in a READ ONLY transaction.只读事务和全局 read_onlyON 是两回事全局 read_onlyON 是服务器级开关禁止除 super 用户外的所有写操作而 START TRANSACTION READ ONLY 是会话级、事务级控制对用户权限无额外要求也不影响其他连接。两者可共存但目的不同 稿定AI 拥有线稿上色优化、图片重绘、人物姿势检测、涂鸦完善等功能