當前位置:成語大全網 - 書法字典 - 如何在java程序中鎖定mysql數據庫中的表

如何在java程序中鎖定mysql數據庫中的表

方法1:使用mysql命令鎖定表。

公共的?虛空?test()?{

字符串?sql?=?“鎖?桌子?aa1?寫“;

//?還是弦樂?sql?=?“鎖?桌子?aa1?閱讀“;?

//?如果您想鎖定多個表。鎖嗎?桌子?aa1?閱讀?,aa2?寫作?,?.....?

字符串?sql1?=?“選擇?*?從哪裏?aa1?”;

字符串?sql2?=?“解鎖?表格“;

試試?{

this.pstmt?=?conn . prepare statement(SQL);

this.pstmt1?=?conn . prepare statement(SQL 1);

this . PS mt2?=?conn . prepare statement(SQL 2);

PS TMT . execute query();

pstmt 1 . execute query();

pstm T2 . execute query();

}?接住嗎?(例外?e)?{

System.out.println(“異常”?+?e . getmessage());

}

}有關讀鎖和寫鎖的官方描述:

1.如果線程獲得了表上的讀鎖,那麽該線程(以及所有其他線程)只能從表中讀取。

如果壹個線程獲得了壹個表上的寫鎖,那麽只有保持該鎖的線程才能寫入該表。

其他線程將被阻塞,直到鎖被釋放。

2.使用鎖定表時,必須鎖定所有要在查詢中使用的表。

盡管使用LOCKTABLES語句獲得的鎖仍然有效,但您不能訪問任何未被該語句鎖定的表。

同時,不能在壹個查詢中多次使用壹個鎖定的表,而是使用別名。

在這種情況下,您必須分別獲取每個別名的鎖。

關於讀鎖和寫鎖的個人說明:

1 .讀鎖和寫鎖是線程級的(表級)。

2.讀鎖是在同壹會話中添加的。只有此表是可讀的。不能添加、刪除、修改或搜索除此表之外的任何表。

但是,在不同的會話中,只能讀取帶讀鎖的表,但可以添加、刪除、修改和搜索除讀鎖以外的表。

3.在同壹會話中添加寫鎖定。只有此表可以讀寫。不能添加、刪除、修改或搜索除此表之外的任何表。

但是,在不同的會話中,您不能使用寫鎖讀取或寫入表,但是可以在寫鎖之外添加、刪除、修改和查找表。

4.如果表中使用了別名。(通過名稱表從AA 1中選擇*)

鎖定aa1時,必須添加別名(通過Name _ TableRead鎖定表AA1As)。

在同壹屆會議上。您必須使用別名進行查詢。

在不同的會話中,您不需要使用別名進行查詢。

5.可以在多個會話中對同壹個表執行鎖讀操作,但不能在多個會話中對同壹個表執行鎖寫操作(這些鎖將等待鎖定的表釋放其線程鎖)。

如果多個會話鎖定讀取同壹個表,則在這些會話中只能讀取鎖定的表。

6.如果您想鎖定壹個表,您需要嵌套查詢。您必須使用別名和鎖定別名。

例如。鎖表AA1讀,AA1 as by name _ table讀;

select * from aa 1 where id in(select * from aa 1 as xxwhere id = 2);

7.解鎖表必須用於解鎖;

此外:

在JAVA程序中,要解鎖,需要調用unlock tables來解鎖。

如果未調用解鎖表。

關閉連接、結束程序並調用GC可以解鎖它。

方法2:用記錄鎖鎖定表。

公共的?虛空?test()?{

字符串?sql?=?“選擇?*?從哪裏?aa1?為了什麽?更新”;?

//?選擇?*?從哪裏?aa1?鎖嗎?在?分享?模式;?

試試?{

conn . set auto commit(false);

this.pstmt?=?conn . prepare statement(SQL);

PS TMT . execute query();

}?接住嗎?(例外?e)?{

System.out.println(“異常”?+?e . getmessage());

}

}1.for update和共享模式下的鎖屬於行級鎖和頁級鎖。

2 .對於更新獨占鎖,共享模式下的鎖***享有該鎖。

3.對於記錄鎖,必須打開交易。

4.行級鎖定實際上是索引記錄的鎖定。只要按索引掃描的行(或不按索引掃描的行)被鎖定。

5.在不同的隔離級別下將使用next-key鎖定算法,即掃描行之間的“間隙”也將被鎖定(在可重復讀取和可序列化隔離級別下存在間隙鎖定)。

6.在mysql中,* * *享受鎖的含義是:即使內容被修改而沒有提交,您仍然可以在另壹個會話中看到最新修改的信息。

* * *在同壹會話中添加鎖。您可以添加、刪除、修改和搜索此表以及除此表之外的所有表。

在不同的會話中,您可以找到* * *鎖定行的最新消息,但不能刪除Read Uncommitted隔離級別下的鎖定表。

改變操作。(您需要等待鎖定解除後才能操作...)

在Read Committed隔離級別下,不能刪除或更改鎖定的表。(您需要等待鎖定解除後才能操作...)

在可重復讀取隔離級別下,您不能添加、刪除或修改鎖定的行。(您需要等待鎖定解除後才能操作...)

您不能在Serializable隔離級別下添加、刪除或修改鎖定的行。(您需要等待鎖定解除後才能操作...)

7.在mysql中,exclusive locks的意思是:在被exclusive lock鎖定的行中,內容修改尚未提交,在另壹個會話中將看不到最新修改的信息。

在不同的會話中,您可以找到* * *鎖定行的最新消息,但不能刪除Read Uncommitted隔離級別下的鎖定表。

改變操作。(您需要等待鎖定解除後才能操作...)

在Read Committed隔離級別下,不能刪除或更改鎖定的表。(您需要等待鎖定解除後才能操作...)

在可重復讀取隔離級別下,您不能添加、刪除或修改鎖定的行。(您需要等待鎖定解除後才能操作...)

在可序列化隔離級別下,不能添加、刪除或修改鎖定的行。

8.在同壹個會話中,可以疊加多個* * *鎖和排他鎖。在多個會話中,您需要等待鎖的釋放。

9.9號更新。SQL與update的原理相同。

10.等待超時的參數設置:innodb_lock_wait_timeout=50(單位秒)。

11.任何可以觸發事務提交的命令都可以關閉排他鎖和排他鎖。