日期:2014-05-16 浏览次数:20459 次
???? 正在练习和熟悉数据库的隔离机制,在练习未提交读(read uncommitted)的时候。我打开两个DOS窗口并登陆了mysql,第一个窗口为事务1,第二个窗口为事务2。事务1和事务2都设置成read uncommitted,事务1更新了表1的某个字段A,但是还没提交,这个时候转到事务2,事务2执行查询表1,得到的结果却不是事务1跟新后的A字段,但是按照未提交读(read uncommmitted)的特性来看,事务2这个时候查询得到的结果应该是事务1更新后的A字段的值啊。
????? 思考了一下打算重新执行一次但是在执行事务1更改数据之后的操作有所变动,还是第一次执行的操作,在执行到事务1更新数据后,不提交,第一次的操作现在是转到事务2,这次改为继续执行事务1,在事务1里面执行查询操作,查询表1得到的结果却是刚才执行更新之后没有提交的A字段的数据。快崩溃了,还望哪位大师傅指点1、2。[img][/img]
?
? | 事务1 | 事务2输出 | 事务2 |
步骤1 | ? | kkk | begin; select mailbox_name from mailbox_table where mailbox_id=4; |
步骤2 | begin; update mailbox_table set mailbox_name='qqqqqqqqqq' where mailbox_id=4; |
? | ? |
步骤3 | ? | kkk | select mailbox_name from mailbox_table where mailbox_id=4; |
以上是我的执行步骤,按照预期在执行到步骤3时事务2查询到的结果应该是qqqqqqqqqq,但最后还是得到kkk。我第二次执行将步骤3换成事务1查询表mailbox_table,得到的却是qqqqqqqqqq,但是我认为这次查询还是在事务1中执行的,不能反映未提交读的特性。究竟是什么原因造成了事务2没有读到事务1更改但没有提交的数据呢。郁闷中