This topic created in 3755 days ago, the information mentioned may be changed or developed.
数据库 MySQL 。写了一段代码,程序大概是这样:
开始事务;
insert 数据 1; //合法数据。
select 数据 1; //为什么这里能够查询得到数据 1 ?事务没提交的时候,就可以查询了?
time.sleep(20); //使程序暂停。这时我在 Navicat 却查不到数据 1 ,这又是为什么?
提交事务; //commit 。提交之后可以在 Navicat 中查到。
 |
|
1
lecher Feb 29, 2016 via Android 1
事务支持的是回滚,只要事务的 SQL 没有失败,自然都是成功。
所以实际情况就是执行语句 1 ,成功之后执行语句 2 ,这时候当然可以查询到语句 1 的处理,如果语句 2 失败,就会回滚,做语句 1 的反操作将数据清除。
|
 |
|
2
b821025551b Feb 29, 2016 1
All operations in a single transaction are visible to each other.
|
 |
|
3
delavior Feb 29, 2016
在同一个连接中插入或更新数据后,即使未提交,在本连接中也是可以查询的;但是使用新连接是查不到的。
|
 |
|
4
yuriko Feb 29, 2016
事务使得操作被打包,将几个操作原子化。 对于事务内操作来说,并没有影响。 对于事务失败,由于原子性,事务不可切割,所以表现为回滚。 对于其他的事务或请求,由于原子性,只会表现为事务已执行或未执行中的一种。由于你事务还未提交,意味着可能还有后续操作,所以 nacicat 变现为事务未执行
|