91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

SQL中的LOCK、UNLOCK怎么使用

發布時間:2022-04-18 15:22:12 來源:億速云 閱讀:280 作者:iii 欄目:開發技術

本篇內容主要講解“SQL中的LOCK、UNLOCK怎么使用”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“SQL中的LOCK、UNLOCK怎么使用”吧!

    MySQL 表鎖定

    鎖是與表關聯的標志。MySQL允許客戶端會話顯式獲取表鎖,以防止其他會話在特定時間段內訪問同一個表。客戶端會話只能為自己獲取或釋放表鎖。它無法獲取或釋放其他會話的表鎖。

    CREATE TABLE tbl (
      id INT NOT NULL AUTO_INCREMENT,
      col INT NOT NULL,
      PRIMARY KEY (id)
    ) Engine = InnoDB;

    LOCK和UNLOCK TABLES語法

    以下語句顯式獲取表鎖:

    LOCK TABLES table_name [READ | WRITE]

    要鎖定表,請在LOCK TABLES關鍵字后指定其名稱。此外,您可以指定鎖的類型,可以是 READ或 WRITE。

    要釋放表的鎖,請使用以下語句:

    UNLOCK TABLES;

    讀鎖

    READ鎖具有以下特點:

    • READ可以通過多個會話同時獲取表的鎖。此外,其他會話可以從表中讀取數據而無需獲取鎖。

    • 持有READ鎖的會話只能讀取表中的數據,但無法寫入。此外,在READ釋放鎖之前,其他會話無法將數據寫入表。來自另一個會話的寫入操作將進入等待狀態,直到READ鎖定被釋放。

    • 如果會話正常或異常終止,MySQL將隱式釋放所有鎖。此功能也與WRITE鎖相關。

    示例:

    在第一個會話中,首先,連接到mysqldemo數據庫并使用CONNECTION_ID()函數獲取當前連接ID,如下所示:

    SELECT CONNECTION_ID();

    SQL中的LOCK、UNLOCK怎么使用

    然后,在tbl表中插入一個新行。

    INSERT INTO tbl(col) VALUES(10);

    接下來,查詢tbl表中的數據。

    SELECT * FROM tbl;

    SQL中的LOCK、UNLOCK怎么使用

    之后,要獲取鎖定,請使用LOCK TABLE語句。

    LOCK TABLE tbl READ;

    最后,在同一個會話中,如果您嘗試在tbl表中插入新行,則會收到錯誤消息。

    INSERT INTO tbl(col) VALUES(11);

    SQL中的LOCK、UNLOCK怎么使用

    因此,一旦READ獲取了鎖,就無法在同一會話中將數據寫入表中。

    從另一個會話中檢查鎖定。
    首先,連接到mysqldemo并檢查連接ID:

    SELECT CONNECTION_ID();

    SQL中的LOCK、UNLOCK怎么使用

    然后,從tbl 表中檢索數據:

    SELECT * FROM tbl;

    SQL中的LOCK、UNLOCK怎么使用

    接下來,在tbl表中插入一個新行:

    INSERT INTO tbl(col) VALUES(20);

    SQL中的LOCK、UNLOCK怎么使用

    來自第二個會話的插入操作處于等待狀態,因為第一個會話READ已經在tbl表上獲取了鎖,但尚未釋放。

    可以從SHOW PROCESSLIST查看詳細信息。

    SHOW PROCESSLIST;

    SQL中的LOCK、UNLOCK怎么使用

    之后,返回第一個會話并使用UNLOCK TABLES語句釋放鎖定。READ從第一個會話釋放鎖定后,INSERT執行第二個會話中的操作。

    unlock tables;

    最后,檢查tbl表的數據,看看INSERT第二個會話的操作是否真的執行了。

    SELECT * FROM tbl;

    SQL中的LOCK、UNLOCK怎么使用

    寫鎖

    WRITE 鎖具有以下特點:

    • 保存表鎖的唯一會話可以從表中讀取和寫入數據。

    • 在WRITE鎖定釋放之前,其他會話無法從表中讀取數據并將數據寫入表中。

    首先,WRITE從第一個會話中獲取鎖定。

    LOCK TABLE tbl WRITE;

    然后,在tbl表中插入一個新行

    INSERT INTO tbl(col) VALUES(11);

    有用。

    接下來,從tbl表中讀取數據。

    SELECT * FROM tbl;

    SQL中的LOCK、UNLOCK怎么使用

    它也有效。

    之后,從第二個會話開始,嘗試寫入和讀取數據:

    INSERT INTO tbl(col) VALUES(21);
     
    SELECT * FROM tbl;

    SQL中的LOCK、UNLOCK怎么使用

    SQL中的LOCK、UNLOCK怎么使用

    最后,從第一個會話中釋放鎖定。

    UNLOCK TABLES;

    看到第二個會話中的所有待處理操作都已執行,下圖說明了結果:

    SQL中的LOCK、UNLOCK怎么使用

    讀鎖與寫鎖 讀鎖是“共享”鎖,它可以防止正在獲取寫鎖,但不能鎖定其他讀鎖。寫鎖是“獨占”鎖,可以防止任何其他類型的鎖。

    到此,相信大家對“SQL中的LOCK、UNLOCK怎么使用”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI

    焉耆| 丹阳市| 威信县| 滨海县| 义马市| 涟源市| 田阳县| 宿州市| 肃南| 格尔木市| 文昌市| 米泉市| 鹤峰县| 巢湖市| 永川市| 江华| 辽阳县| 香格里拉县| 建瓯市| 遂溪县| 江源县| 黑龙江省| 奉节县| 赤壁市| 荆州市| 屏南县| 河东区| 甘泉县| 百色市| 分宜县| 赤城县| 梁平县| 建瓯市| 台南市| 内黄县| 芷江| 龙岩市| 康乐县| 常宁市| 嘉义市| 舟山市|