我试图在MySQL中使用只读事务,但是我很困惑它如何修改(插入表)以及如何更改表列(DDL和DML)。例子:
SET @@transaction_read_only=true;
start transaction ;
insert into Table_NAME (ID,name) values (3,'test');
ALTER TABLE Table_Name MODIFY COLUMN name VARCHAR (1000);
commit ;
有人可以解释这里出什么问题吗?
更新:我正在使用datagrip,我发现问题出在mysql shell的DataGrip上,这是行不通的:insert into Table_NAME (ID,name) values (3,'test');
但这仍然有效:
ALTER TABLE Table_Name MODIFY COLUMN name VARCHAR (1000);
答案 0 :(得分:0)
ALTER TABLE将导致隐式提交,因此这将是另一个事务。
不要将DDL放入事务中,这会使事情变得复杂。
SET @@ transaction_read_only = true;仅适用于下一次交易;而SET @@ session.transaction_read_only = true适用于会话。