<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                >### 悲觀鎖 - `悲觀鎖(Pessimistic Lock)`,顧名思義,就是很悲觀,每次去拿數據的時候都認為別人會修改,所以每次在拿數據的時候都會上鎖,這樣別人想拿這個數據就會阻塞直到它拿到鎖。傳統的關系型數據庫里邊就用到了很多這種鎖機制,比如行鎖、表鎖、讀鎖、寫鎖等,都是在做操作之前先上鎖。 - 假設最壞的情況, 每次讀取數據的時候都認為別人會修改,所以每次讀取數據都上鎖 - 讀寫(共享鎖) : select * from key_table lock in share mode - 寫鎖(排它鎖) : select * from key_table for update ### 鎖的詳細分類和操作 | 鎖類型 | 事務操作行為 | 其他事務行為(讀取、寫入) | | --- | --- | --- | | **讀鎖** | 可以讀取數據 | 可以讀取數據,但不能寫入數據 | | **寫鎖** | 可以讀取和修改數據 | 不能讀取數據,也不能寫入數據 | ### 讀鎖與寫鎖的詳細比較 | 特性 | 讀鎖(Shared Lock) | 寫鎖(Exclusive Lock) | | --- | --- | --- | | **鎖定粒度** | 行級鎖(可以是表級鎖) | 行級鎖(通常是表級鎖) | | **操作類型** | 只允許讀取,不允許寫入 | 允許讀取和寫入 | | **并發控制** | 多個事務可以同時獲得讀鎖 | 只能有一個事務獲得寫鎖 | | **對其他事務的影響** | 允許其他事務獲得讀鎖,但不允許獲得寫鎖 | 不允許其他事務獲得讀鎖或寫鎖 | | **例子** | SELECT ... LOCK IN SHARE MODE | SELECT ... FOR UPDATE | | **使用場景** | 適用于讀取數據而不修改的場景 | 適用于需要修改數據的場景 | > ### 失效的場景 1. **使用的存儲引擎**:`SELECT ... FOR UPDATE` 只適用于使用 InnoDB 存儲引擎的表。如果表使用的是 MyISAM 或其他不支持行級鎖定的引擎,該語句不會起到鎖定作用。 2. **事務隔離級別**:事務隔離級別可能影響鎖定行為。如果事務的隔離級別是 `READ UNCOMMITTED` 或 `READ COMMITTED`,可能會導致預期外的行為。 > # 例子 - 表結構 ``` CREATE TABLE `symbol` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(255) DEFAULT NULL, `code` varchar(10) DEFAULT NULL, `price` decimal(10,3) DEFAULT NULL COMMENT '價格', `overflow` decimal(10,3) DEFAULT NULL COMMENT '溢價率', `date` datetime DEFAULT NULL COMMENT '申購日期', `scale` decimal(10,3) DEFAULT NULL COMMENT '市值', `max_scale` decimal(10,3) DEFAULT NULL, `market` varchar(255) DEFAULT NULL, `zg_name` varchar(255) DEFAULT NULL, `zg_code` varchar(255) DEFAULT NULL, `zg_syl_d` decimal(10,3) DEFAULT NULL COMMENT '動態市盈率', `zg_syl_j` decimal(10,3) DEFAULT NULL COMMENT '靜態市盈率', `zg_syl_t` decimal(10,3) DEFAULT NULL COMMENT 'ttm市盈率', `zg_plate` varchar(255) DEFAULT NULL, `is_num` tinyint(11) DEFAULT NULL, `t_amount` decimal(10,3) DEFAULT NULL, `t_num` int(11) DEFAULT NULL, `t_hight` decimal(10,3) DEFAULT NULL, `t_low` decimal(10,3) DEFAULT NULL, `t_data` json DEFAULT NULL, `is_price` decimal(10,3) DEFAULT NULL, `is_buy` varchar(255) DEFAULT NULL, `create_at` datetime DEFAULT NULL, `update_at` datetime DEFAULT NULL, `delete_at` datetime DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `code` (`code`) ) ENGINE=MyISAM AUTO_INCREMENT=780 DEFAULT CHARSET=utf8mb4; ``` - 會話一 ``` START TRANSACTION; select *,SLEEP(60) from symbol WHERE id = 527 for UPDATE; update symbol set price = 120 where id =527; COMMIT; ``` - 會話二 去修改 id = 527 時會阻塞
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看