首页/数据/SQL 速查/只读事务的用途与写法
本包目录(311 条)
查询基础33 条连接与子查询40 条聚合与窗口函数54 条函数速查60 条
变更与事务52 条
性能与执行计划72 条

只读事务的用途与写法

声明只读事务:给数据库优化空间、避免误写,适合报表、备份、批量导出连接。

SQL 速查数据更新于 2026-10-12

MySQL

MySQL
START TRANSACTION READ ONLY;
SELECT ...;
COMMIT;

PostgreSQL

PostgreSQL
BEGIN READ ONLY;
-- 或 SET TRANSACTION READ ONLY;
SELECT ...;
COMMIT;
收益明确不写数据;优化器与系统可以降低锁开销
限制事务内写普通表直接报错(防误操作)
例外PostgreSQL 只读事务里仍可写临时表

易错点

  • 只读事务不等于无锁:读取仍可能有少量锁开销,长只读事务同样会阻碍清理(PG 的 vacuum/MySQL 的 purge)
  • MySQL 存储过程/多语句中混用读写:声明只读后发现写操作报错,连接复用时要重置事务特征

数据来源与参考

  • MySQL 8.0 Reference Manual · START TRANSACTION
  • PostgreSQL Documentation · SET TRANSACTION
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌