进入到新的一家公司后, 发现大家在mysql客户端上执行sql都不写commit,大家都习惯了这种写法,有一天来了另外一个DBA,环境变了,一早上update一个sql,大家发现怎么表被锁住了呢?
后天一发现,新的DBA,把[b]autocommit[/b]给关掉了,查看的sql如下:
输出结果如下;
这样的后果有三种:
1.[b] 如果是自己update一条语句后没有提交,再select同样的记录,那么会被锁住[/b]。
因为在同一个session里,如果update没有提交,再select同样的记录,这样记录会被锁住。
2.[b] 如果是自己update一条语句后没有提交,其它人select会发现旧的记录。[/b]
不在同一个session里,别人select的结果是旧的值,这个与事务的隔离级别有关系。
查看事务的隔离级别的命令如下:
3. [b]如果是自己update一条语句后没有提交,有它人update同记录会被锁住。[/b]
这个与在同一个session里的select情况是一样的。
之前在Oracle工作,一直都是坚持在update语句后commit,个人还是觉得这种习惯好。
后天一发现,新的DBA,把[b]autocommit[/b]给关掉了,查看的sql如下:
show variables like 'autocommit';
输出结果如下;
autocommit OFF
这样的后果有三种:
1.[b] 如果是自己update一条语句后没有提交,再select同样的记录,那么会被锁住[/b]。
因为在同一个session里,如果update没有提交,再select同样的记录,这样记录会被锁住。
2.[b] 如果是自己update一条语句后没有提交,其它人select会发现旧的记录。[/b]
不在同一个session里,别人select的结果是旧的值,这个与事务的隔离级别有关系。
查看事务的隔离级别的命令如下:
select @@global.tx_isolation,@@tx_isolation;
3. [b]如果是自己update一条语句后没有提交,有它人update同记录会被锁住。[/b]
这个与在同一个session里的select情况是一样的。
之前在Oracle工作,一直都是坚持在update语句后commit,个人还是觉得这种习惯好。