事务结束有三种情况:
1.事务提交: 当你显式地执行 commit 语句时,事务被提交,且该事务算作结束。在可 重复读隔离级别下,其他事务在整个过程中看不到该事务的修改,直到它被提交。
2.事务回滚: 如果你显式地执行 ROLLBACK
语句,事务被回滚,且该事务算作结束。所有的修改都会被撤销
3.连接断开: 如果连接到 MySQL 的客户端关闭或失去连接,MySQL 将自动回滚当前连接中的未提交事务,并且事务算作结束。
其实,最让我疑惑的是在老杜讲可重复读的时候,开了两个终端窗口,在2号终端里进行了一系类insert,delete等后提交执行commit,算事务结束了;可为什么1号终端还是查不到修改的数据?
可重复读不是等事务结束了就可以查到嘛?
其实,话没错,问题在于其他事务也在进行并且它们的修改还没有提交,那么在你的事务提交之前,你是看不到的。所以在1号终端里执行commit语句,在查询就可见了
当然还有可能没有提交成功,该事务还在进行;比如在某些情况下,可能存在连接问题,导致事务没有成功提交