1.悲觀鎖和樂觀鎖的概念:

2.演示行級鎖機制:
注意:DBUtil類 為博主之前自己寫的類:【JDBC】編程(2)--- 寫一個JDBC工具類;用 JDBC工具類 實作模糊查詢
/*
演示行級鎖機制
此程式先開啟事務,并使用行級鎖鎖住“loginName = abc”的那條記錄
*/
import java.sql.*;
public class JDBCLock01 {
public static void main(String[] args) {
Connection connection = null;
PreparedStatement ps = null;
ResultSet resultSet = null;
try {
connection = DBUtil.getConnection();
connection.setAutoCommit(false);
//鎖住“loginName = abc”的這條記錄
String sql = "select loginName,loginPwd from t_user where loginName = ? for update";
ps = connection.prepareStatement(sql);
ps.setString(1,"abc");
resultSet = ps.executeQuery();
while (resultSet.next()){
System.out.println("loginName = "+resultSet.getString("loginName")+
",loginPwd = "+resultSet.getString("loginPwd"));
}
//添加斷點,讓此事務在此暫停10s后結束
Thread.sleep(10000);//使當前執行緒暫停10000毫秒
connection.commit();
} catch (Exception e) {
if (connection != null) {
try {
connection.commit();
} catch (SQLException ex) {
ex.printStackTrace();
}
}
e.printStackTrace();
}finally {
DBUtil.close(connection,ps,resultSet);
}
}
}
"JDBCLock01"控制臺情況:
(暫停大約1000毫秒然后輸出:)
loginName = abc,loginPwd = 123
Process finished with exit code 0
/*
演示行級鎖機制
此程式后開啟事務,負責修改被鎖定的記錄
*/
import java.sql.*;
public class JDBCLock02 {
public static void main(String[] args) {
Connection connection = null;
PreparedStatement ps = null;
try {
connection = DBUtil.getConnection();
connection.setAutoCommit(false);
//修改“loginName = abc”的這條記錄的密碼
String sql = "update t_user set loginPwd = ? where loginName = ?";
ps = connection.prepareStatement(sql);
ps.setString(1,"888");
ps.setString(2,"abc");
int count = ps.executeUpdate();
System.out.println("更新資料"+count+"條");
connection.commit();
} catch (SQLException e) {
if (connection != null) {
try {
connection.commit();
} catch (SQLException ex) {
ex.printStackTrace();
}
}
e.printStackTrace();
}finally {
DBUtil.close(connection,ps,null);
}
}
}
"JDBCLock02"控制臺輸出結果:
("JDBCLock01"程式結束后輸出)
更新資料1條
Process finished with exit code 0
總結:在當前事務中,用行級鎖鎖住的記錄,那么在此事務結束之前,其他事務將無法對“鎖住的記錄”進行操作(update/delete),但是select可以,
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/402430.html
標籤:MySQL
上一篇:【JDBC】編程(2)--- 寫一個JDBC工具類;用 JDBC工具類 實作模糊查詢
下一篇:SQL分庫分表
