Mysql

MS Access / MySQL:解鎖鎖定的記錄

  • November 27, 2017

我有一個 Microsoft Access 數據庫,它通過 ODBC 連接到 MySQL 伺服器,並可供多個使用者訪問。

隨著時間的推移,許多記錄被鎖定,無法再進行編輯。

有沒有辦法批量解鎖所有記錄?

錯誤資訊:

自您開始編輯此記錄以來,其他使用者已更改此記錄。如果您保存記錄,您將覆蓋其他使用者所做的更改。將更改複製到剪貼板將讓您查看其他使用者輸入的值,然後如果您決定進行更改,則將更改粘貼回。

我終於可以通過添加一個名為TIMESTAMPtypetimestamp和 default valueCURRENT_TIMESTAMP的欄位來解決我的問題attribute = on update CURRENT_TIMESTAMP。然後我更新了所有記錄並設置TIMESTAMP=NOW()

現在我沒有再次收到任何錯誤。

為了幫助您解決此問題,請記住以下一條非常重要的資訊:

鎖,在 MySQL 中,無論是行、表、諮詢/命名鎖,甚至是全域 FLUSH TABLES WITH READ LOCK,都由獲得鎖的特定連接執行緒的持續存在來持有。在這種情況下,當我說“連接執行緒”時,我指的是客戶端與伺服器連接的特定實例……請求鎖定的那個實例。這些是 SHOW FULL PROCESSLIST 中列出的執行緒;

如果請求連接被正常關閉,則該連接請求的所有鎖都會立即釋放。

如果特定的連接執行緒被管理員殺死(mysql> KILL #; 其中 # 是您想要強制斷開連接的 SHOW FULL PROCESSLIST 的 ID),一旦該執行緒從 SHOW FULL PROCESLIST 中消失,鎖就會被釋放;

如果該連接沒有正常關閉,則連接最終會超時(預設為 28800 秒,除非您已更改它),然後釋放鎖。

在沒有最初獲得鎖的連接的情況下,行鎖和表鎖不能持續存在……所以在 MySQL 中沒有鎖隨著時間的推移而堆積並需要解鎖,在沒有客戶端連接的情況下仍然堅持到鎖。

即使客戶端不正確地持有鎖,那麼強制斷開客戶端將是您唯一的解決方法,因為鎖的存在是有原因的……以保持您的數據一致。強制斷開連接並不意味著讓每個人都註銷,因為您已經解釋過這是不切實際的。請參閱上面的 KILL 命令。

我的猜測是 Access 沒有正確解釋來自 MySQL 的響應,並且只認為記錄被鎖定,而實際上它是別的東西。

正如已經觀察到的那樣,您應該能夠使用 Toad、HeidiSQL、Query Browser、Workbench 或簡單的 mysql 命令行來更新這些行中的值……而且您很可能能夠毫無問題地更新它們…… . 證明它們並沒有真正被鎖定,並且 Access 只是被混淆了。

發布使用者從 Access 中看到的消息的準確措辭可能是準確闡明問題的最佳方式。

引用自:https://dba.stackexchange.com/questions/24448