Posted on 2015-06-02 09:11
朱杰兵 閱讀(228)
評論(0) 編輯 收藏
不可重復讀
不可重復讀的重點是修改:
同樣的條件, 你讀取過的數據, 再次讀取出來發現值不一樣了
例子:
在事務1中,Mary 讀取了自己的工資為1000,操作并沒有完成
Java代碼

- con1 = getConnection();
- select salary from employee empId ="Mary";
在事務2中,這時財務人員修改了Mary的工資為2000,并提交了事務. Java代碼

- con2 = getConnection();
- update employee set salary = 2000;
- con2.commit();
在事務1中,Mary 再次讀取自己的工資時,工資變為了2000 Java代碼

- //con1
- select salary from employee empId ="Mary";
在一個事務中前后兩次讀取的結果并不致,導致了不可重復讀。
幻讀
幻讀的重點在于新增或者刪除 同樣的條件, 第1次和第2次讀出來的記錄數不一樣
例子:
目前工資為1000的員工有10人。
事務1,讀取所有工資為1000的員工。
Java代碼

- con1 = getConnection();
- Select * from employee where salary =1000;
共讀取10條記錄 這時另一個事務向employee表插入了一條員工記錄,工資也為1000 Java代碼

- con2 = getConnection();
- Insert into employee(empId,salary) values("Lili",1000);
- con2.commit();
事務1再次讀取所有工資為1000的員工 Java代碼

- //con1
- select * from employee where salary =1000;
共讀取到了11條記錄,這就產生了幻像讀。