参数 tx_read_only 或者 transaction_read_only 用于设置事务的访问模式,可设置为 OFF/ON,默认值为 OFF,表示事务可读,可写,设置为 ON 表示事务只读,不可写。
transaction_read_only 参数在 5.7.20 版本引入,tx_read_only 参数在 8.0.3 版本被移除,这两个参数意义完全一样,只是名称不同,transaction_read_only 名称更加规范,在高版本 MySQL 中,建议使用 transaction_read_only。
该参数可以在全局范围内设置,也可以在 session 级设置,在全局范围内设置该参数后,对于已有的连接并不会生效,因为已有连接的 session 级参数仍然保持原样,因此需要杀掉已有连接,让应用重新建立连接,以便使该参数对所有连接生效。
SET GLOBAL transaction_read_only = ON;
SET SESSION transaction_read_only = ON;
如果设置 transaction_read_only 为 ON,此时向表中写入数据,会产生报错,如下:
ERROR 1792 (25006): Cannot execute statement in a READ ONLY transaction.