最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MySQL鎖機制三部曲:全局鎖、表級鎖、行級鎖深度解析與實戰(zhàn)

 更新時間:2026年02月05日 08:19:22   作者:哈里謝頓  
在多用戶并發(fā)訪問數(shù)據(jù)庫時,鎖機制是保障數(shù)據(jù)一致性和隔離性的核心手段,MySQL提供了三個層次的鎖,下面就來詳細的介紹一下全局鎖、表級鎖、行級鎖的使用,感興趣的可以了解一下

作者:DBA技術(shù)團隊
適用版本:MySQL 5.7 / 8.0 / 8.4 LTS
存儲引擎:InnoDB(默認和推薦)

引言:為什么需要鎖?

在多用戶并發(fā)訪問數(shù)據(jù)庫時,鎖機制是保障**數(shù)據(jù)一致性(Consistency)隔離性(Isolation)**的核心手段。MySQL提供了三個層次的鎖,對應不同的并發(fā)場景:

-- 查看當前連接的默認存儲引擎
SELECT @@default_storage_engine;
-- 確認是InnoDB,因為只有InnoDB支持行級鎖

一、全局鎖(Global Lock)

1.1 概念與作用

全局鎖是粒度最大的鎖,鎖定整個MySQL實例,使數(shù)據(jù)庫處于只讀狀態(tài)。此時:

  • ? 允許SELECT查詢
  • ? 禁止INSERT/UPDATE/DELETE
  • ? 禁止DDL操作(建表、改結(jié)構(gòu))
  • ? 禁止事務提交

典型應用場景:全庫邏輯備份(mysqldump)

1.2 SQL實戰(zhàn)演示

場景A:加全局鎖進行備份

-- ========== 會話A(運維會話)==========
-- 1. 加全局讀鎖(Flush Tables With Read Lock)
FLUSH TABLES WITH READ LOCK;

-- 2. 查看當前鎖狀態(tài)
SHOW PROCESSLIST;
-- 可以看到狀態(tài):Waiting for global read lock(被阻塞的會話)

-- 3. 查看鎖定信息(MySQL 8.0)
SELECT * FROM performance_schema.metadata_locks 
WHERE OBJECT_TYPE = 'GLOBAL' AND LOCK_TYPE = 'SHARED';

-- 4. 執(zhí)行備份命令(命令行)
-- $ mysqldump -uroot -p --all-databases > full_backup.sql

-- 5. 確認備份完成后釋放鎖
UNLOCK TABLES;

場景B:全局鎖阻塞演示

-- ========== 會話A ==========
FLUSH TABLES WITH READ LOCK;
-- Query OK, 0 rows affected

-- ========== 會話B(業(yè)務會話)==========
-- 嘗試插入數(shù)據(jù)
INSERT INTO test.users(name) VALUES('張三');
-- 狀態(tài):Waiting for global read lock(被阻塞)

-- ========== 會話C(監(jiān)控會話)==========
-- 查看誰在等待全局鎖
SELECT 
    r.object_schema, r.object_name, 
    r.thread_id AS waiting_thread,
    b.thread_id AS blocking_thread,
    r.owner_event_id AS waiting_event,
    b.owner_event_id AS blocking_event
FROM performance_schema.metadata_locks r
JOIN performance_schema.metadata_locks b ON r.object_schema = b.object_schema 
    AND r.object_name = b.object_name
WHERE r.lock_status = 'PENDING' 
    AND b.object_type = 'GLOBAL' 
    AND b.owner_thread_id != r.owner_thread_id;

-- 結(jié)果:顯示會話B被會話A阻塞

1.3 全局鎖的注意事項

-- 風險1:主庫執(zhí)行全局鎖會導致業(yè)務停擺
-- 風險2:從庫執(zhí)行會導致主從復制延遲急劇增加

-- 現(xiàn)代替代方案:使用--single-transaction進行一致性備份(不鎖庫)
-- $ mysqldump -uroot -p --single-transaction --all-databases > backup.sql

-- 如果必須使用全局鎖,建議設置超時(MySQL 8.0)
SET SESSION lock_wait_timeout = 10; -- 10秒超時

二、表級鎖(Table Lock)

2.1 表級鎖的分類

MySQL中有兩種表級鎖:

  1. 表鎖(Table Lock):顯式鎖定,影響并發(fā)DML
  2. 元數(shù)據(jù)鎖(MDL, Metadata Lock):隱式鎖定,保護表結(jié)構(gòu)

2.2 顯式表鎖實戰(zhàn)

加鎖與釋放

-- ========== 會話A ==========
-- 1. 加表讀鎖(Table Read Lock)
-- 本會話和其他會話都可以讀,但都不能寫
LOCK TABLES orders READ;

-- 2. 加表寫鎖(Table Write Lock)
-- 僅本會話可讀寫,其他會話完全阻塞
LOCK TABLES orders WRITE; -- 會釋放之前的READ鎖

-- 3. 查看當前表鎖情況
SHOW OPEN TABLES WHERE `Table` = 'orders' AND `Database` = 'test';
-- In_use列顯示1表示被鎖定

-- 4. 釋放鎖
UNLOCK TABLES;

鎖沖突演示

-- 準備數(shù)據(jù)
CREATE TABLE IF NOT EXISTS inventory (
    id INT PRIMARY KEY,
    product_name VARCHAR(50),
    stock INT
) ENGINE=InnoDB;

INSERT INTO inventory VALUES (1, 'iPhone', 100), (2, 'MacBook', 50);

-- ========== 會話A:加寫鎖 ==========
LOCK TABLES inventory WRITE;
UPDATE inventory SET stock = stock - 1 WHERE id = 1;

-- ========== 會話B:嘗試讀 ==========
SELECT * FROM inventory WHERE id = 1;
-- 狀態(tài):Waiting for table lock(被阻塞)

-- ========== 會話C:嘗試寫 ==========
UPDATE inventory SET stock = stock - 1 WHERE id = 2;
-- 狀態(tài):Waiting for table lock(被阻塞)

-- 當會話A執(zhí)行UNLOCK TABLES后,會話B和C才能繼續(xù)

2.3 元數(shù)據(jù)鎖(MDL)詳解

MDL是自動隱式加鎖的,無需顯式操作,用于保護表結(jié)構(gòu)不被并發(fā)修改破壞。

MDL的兩種類型

MDL類型觸發(fā)場景阻塞效果
MDL讀鎖SELECT、DML語句不阻塞其他SELECT,阻塞DDL
MDL寫鎖ALTER TABLE、DROP TABLE阻塞所有其他操作

實戰(zhàn): alter table導致的MDL阻塞

-- ========== 會話A:長事務 ==========
BEGIN;
SELECT * FROM users WHERE id = 1; -- 獲取MDL讀鎖
-- 保持事務開啟,不提交...

-- ========== 會話B:修改表結(jié)構(gòu) ==========
ALTER TABLE users ADD COLUMN age INT DEFAULT 0;
-- 狀態(tài):Waiting for table metadata lock
-- 原因:需要MDL寫鎖,但會話A持有MDL讀鎖

-- ========== 會話C:普通查詢 ==========
SELECT * FROM users WHERE id = 2;
-- MySQL 8.0以前:可能被阻塞(MDL讀鎖排隊在MDL寫鎖后)
-- MySQL 8.0:Online DDL優(yōu)化,通常能執(zhí)行

-- ========== 會話D:診斷MDL鎖等待 ==========
-- 查看MDL鎖等待鏈
SELECT 
    r.object_schema, r.object_name, 
    r.thread_id AS waiting_thread, 
    r.owner_event_id AS waiting_event,
    b.thread_id AS blocking_thread,
    b.owner_event_id AS blocking_event,
    r.lock_type AS waiting_lock,
    b.lock_type AS blocking_lock
FROM performance_schema.metadata_locks r
JOIN performance_schema.metadata_locks b ON r.object_schema = b.object_schema 
    AND r.object_name = b.object_name
WHERE r.lock_status = 'PENDING' 
    AND b.lock_status = 'GRANTED'
    AND b.owner_thread_id != r.owner_thread_id;

-- 查看具體SQL
SELECT THREAD_ID, SQL_TEXT 
FROM performance_schema.events_statements_current 
WHERE THREAD_ID IN (SELECT THREAD_ID FROM performance_schema.metadata_locks 
                    WHERE object_name = 'users' AND lock_status = 'PENDING');

-- 解決方案:終止長事務
KILL <blocking_thread_id>; -- 終止會話A

2.4 意向鎖(Intention Lock)

意向鎖是表級鎖與行級鎖的協(xié)調(diào)機制,由InnoDB自動維護。

-- ========== 意向鎖演示 ==========
-- 會話A:對某行加排他鎖(自動在表上加IX意向鎖)
BEGIN;
SELECT * FROM inventory WHERE id = 1 FOR UPDATE;

-- 查看意向鎖(MySQL 8.0)
SELECT 
    ENGINE_TRANSACTION_ID, OBJECT_NAME, 
    LOCK_TYPE, LOCK_MODE, LOCK_STATUS
FROM performance_schema.data_locks
WHERE OBJECT_TYPE = 'TABLE';
-- 結(jié)果:LOCK_MODE = IX(意向排他鎖)

-- 會話B:嘗試加表鎖(被阻塞)
LOCK TABLES inventory READ;
-- 狀態(tài):Table lock wait timeout...
-- 原因:表上有IX鎖,與表級S鎖不兼容

意向鎖兼容性

  • IS(意向共享鎖)表級S鎖 兼容
  • IX(意向排他鎖)表級S鎖/X鎖 都不兼容

三、行級鎖(Row Lock)

行級鎖是InnoDB的核心特性,只鎖定被訪問的具體行,并發(fā)度最高。

3.1 行鎖的兩種基本類型

共享鎖(S鎖,Shared Lock)

-- ========== 場景:讀取并確保數(shù)據(jù)不被修改 ==========
-- 會話A:加共享鎖(允許其他事務讀,阻塞寫)
BEGIN;
SELECT * FROM accounts WHERE id = 1 LOCK IN SHARE MODE;
-- MySQL 8.0也可使用:FOR SHARE

-- 會話B:可以加共享鎖(兼容)
SELECT * FROM accounts WHERE id = 1 LOCK IN SHARE MODE; -- ?成功

-- 會話C:嘗試修改(需要X鎖,被阻塞)
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
-- 狀態(tài):Lock wait timeout exceeded

-- 會話D:查看行級鎖等待
SELECT 
    r.object_schema, r.object_name, 
    r.thread_id AS waiting_thread,
    b.thread_id AS blocking_thread,
    r.lock_mode AS waiting_mode,
    b.lock_mode AS blocking_mode
FROM performance_schema.data_locks r
JOIN performance_schema.data_locks b 
    ON r.object_schema = b.object_schema 
    AND r.object_name = b.object_name
WHERE r.lock_status = 'WAITING' 
    AND b.lock_status = 'GRANTED';

排他鎖(X鎖,Exclusive Lock)

-- ========== 場景:修改數(shù)據(jù)(自動加X鎖)==========
-- 會話A:加排他鎖
BEGIN;
UPDATE accounts SET balance = 900 WHERE id = 1;
-- 自動對id=1的行加X鎖

-- 或者顯式加鎖
SELECT * FROM accounts WHERE id = 1 FOR UPDATE;

-- 會話B:任何鎖請求都被阻塞
SELECT * FROM accounts WHERE id = 1 FOR SHARE; -- ?等待

-- 會話C:快照讀(Snapshort Read)可以執(zhí)行,基于MVCC
SELECT * FROM accounts WHERE id = 1; -- ?成功,讀取undo log中的舊版本

3.2 行鎖的算法實現(xiàn)

InnoDB實現(xiàn)了三種行鎖算法:

1. 記錄鎖(Record Lock)

鎖定索引記錄本身。

-- 數(shù)據(jù):id為主鍵,值為1, 3, 5, 7, 10
BEGIN;
SELECT * FROM accounts WHERE id = 5 FOR UPDATE;
-- 僅鎖定id=5這一行(記錄鎖)

-- 驗證:其他事務可操作id=3和id=7
-- 但不能操作id=5

2. 間隙鎖(Gap Lock)

鎖定索引記錄之間的間隙,防止幻讀。

-- ========== 間隙鎖演示 ==========
-- 會話A:范圍查詢加間隙鎖(REPEATABLE READ隔離級別下)
BEGIN;
SELECT * FROM accounts WHERE id > 3 AND id < 8 FOR UPDATE;
-- 鎖定間隙:(3,5) 和 (5,7)

-- 會話B:嘗試插入(被阻塞)
INSERT INTO accounts (id, user_id, balance) VALUES (4, 1004, 400);
-- ? Waiting for lock:id=4落在間隙(3,5)內(nèi)

INSERT INTO accounts (id, user_id, balance) VALUES (6, 1006, 600);
-- ? Waiting for lock:id=6落在間隙(5,7)內(nèi)

INSERT INTO accounts (id, user_id, balance) VALUES (2, 1002, 200);
-- ? 成功:id=2不在鎖定范圍

3. 臨鍵鎖(Next-Key Lock)

記錄鎖 + 間隙鎖的組合,鎖定范圍左開右閉 (, ],是InnoDB的默認鎖算法。

-- ========== 臨鍵鎖演示 ==========
-- 數(shù)據(jù):id ∈ {1, 3, 5, 7, 10}
BEGIN;
SELECT * FROM accounts WHERE id = 5 FOR UPDATE;
-- 臨鍵鎖鎖定:(3, 5] (前一個間隙到當前記錄)

-- 其他事務:
UPDATE accounts SET balance = 500 WHERE id = 5; -- ?被阻塞(記錄鎖)
INSERT INTO accounts (id, user_id, balance) VALUES (4, 1004, 400); -- ?被阻塞(間隙鎖,4在(3,5)內(nèi))

-- 但如果:
INSERT INTO accounts (id, user_id, balance) VALUES (6, 1006, 600); -- ?可能成功(看具體索引結(jié)構(gòu))

注意:如果是唯一索引的等值查詢且命中記錄,臨鍵鎖會退化為記錄鎖以提高并發(fā)性。

3.3 行鎖的實踐示例

示例1:銀行轉(zhuǎn)賬(死鎖風險)

-- 會話A:A轉(zhuǎn)給B 100元
BEGIN;
UPDATE accounts SET balance = balance - 100 WHERE id = 1; -- 鎖id=1
UPDATE accounts SET balance = balance + 100 WHERE id = 2; -- 鎖id=2
COMMIT;

-- 會話B:B轉(zhuǎn)給A 50元(同時進行)
BEGIN;
UPDATE accounts SET balance = balance - 50 WHERE id = 2;  -- 鎖id=2
UPDATE accounts SET balance = balance + 50 WHERE id = 1;  -- ?死鎖!等待id=1
-- MySQL會檢測到死鎖,回滾其中一個事務(通常是修改行數(shù)少的)

解決方案:按固定順序訪問資源

-- 都按id從小到大排序
BEGIN;
-- 先處理id小的
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
UPDATE accounts SET balance = balance + 100 WHERE id = 2;
COMMIT;

示例2:樂觀鎖(版本號控制)

-- 表結(jié)構(gòu)添加version字段
ALTER TABLE accounts ADD COLUMN version INT DEFAULT 0;

-- 會話A:讀取版本號
BEGIN;
SELECT balance, version FROM accounts WHERE id = 1;
-- 結(jié)果:balance=1000, version=1

-- 計算新余額并更新(帶版本號檢查)
UPDATE accounts 
SET balance = 900, version = version + 1 
WHERE id = 1 AND version = 1;
-- 如果影響行數(shù)=1,成功;=0,說明數(shù)據(jù)被其他事務修改

COMMIT;

示例3:無索引導致的鎖升級(危險?。?/h4>
-- name字段無索引
BEGIN;
SELECT * FROM accounts WHERE name = 'Alice' FOR UPDATE;
-- ?危險!InnoDB無法通過索引定位,會掃描全表,對所有行加X鎖!
-- 等同于表鎖,并發(fā)歸0

-- 查看實際加鎖情況(MySQL 8.0)
SELECT 
    COUNT(*) as locked_rows,
    OBJECT_NAME,
    LOCK_MODE
FROM performance_schema.data_locks
WHERE ENGINE_TRANSACTION_ID = (SELECT trx_id FROM information_schema.innodb_trx 
                               WHERE trx_mysql_thread_id = CONNECTION_ID())
GROUP BY OBJECT_NAME, LOCK_MODE;
-- 結(jié)果:locked_rows可能等于全表總行數(shù)!

教訓:務必確保WHERE條件使用索引!

四、三種鎖的對比與選擇

4.1 特性對比表

特性全局鎖表級鎖行級鎖
鎖定范圍整個數(shù)據(jù)庫實例單個表單行或間隙
并發(fā)度極低(只讀)
存儲引擎所有引擎MyISAM/InnoDB等僅InnoDB
手動控制FTWRL/UNLOCKLOCK TABLES/UNLOCK自動/SELECT ... FOR UPDATE
典型場景全庫備份批量修改、DDL對DML影響高并發(fā)OLTP交易
死鎖風險無(單點)高(需處理)
性能開銷極高中等低(內(nèi)存中鎖結(jié)構(gòu))

4.2 鎖的升級路徑

-- MySQL的鎖會按需升級,但通常不建議:

-- 1. 行鎖升級為表鎖(當沒有索引時)
-- 自動發(fā)生,危險!

-- 2. 意向鎖協(xié)調(diào)
-- 自動發(fā)生,無害

-- 3. 手動調(diào)整鎖策略(MyISAM場景,不推薦)
SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED; -- 降低鎖粒度
-- 或
LOCK TABLES t1 WRITE, t2 READ; -- 手動控制表鎖

五、鎖監(jiān)控與排查實戰(zhàn)

5.1 查看當前鎖狀態(tài)(MySQL 8.0推薦)

-- 查看所有鎖(包括持有和等待)
SELECT 
    dl.ENGINE_TRANSACTION_ID as trx_id,
    dl.OBJECT_SCHEMA, 
    dl.OBJECT_NAME as table_name,
    dl.INDEX_NAME,
    dl.LOCK_TYPE,  -- TABLE or RECORD
    dl.LOCK_MODE,  -- S, X, IS, IX, GAP, NEXT-KEY等
    dl.LOCK_STATUS, -- GRANTED or WAITING
    dl.LOCK_DATA,  -- 鎖定的具體值(如主鍵值)
    t.trx_mysql_thread_id as thread_id,
    t.trx_query
FROM performance_schema.data_locks dl
JOIN information_schema.innodb_trx t 
    ON dl.ENGINE_TRANSACTION_ID = t.trx_id
ORDER BY dl.ENGINE_TRANSACTION_ID, dl.OBJECT_NAME;

5.2 查看鎖等待鏈

-- 誰阻塞了誰?
SELECT 
    w.trx_id AS waiting_trx_id,
    w.trx_mysql_thread_id AS waiting_thread,
    w.trx_query AS waiting_query,
    b.trx_id AS blocking_trx_id,
    b.trx_mysql_thread_id AS blocking_thread,
    b.trx_query AS blocking_query,
    TIMESTAMPDIFF(SECOND, w.trx_wait_started, NOW()) AS wait_seconds
FROM information_schema.innodb_trx w
JOIN performance_schema.data_lock_waits lw 
    ON w.trx_id = lw.REQUESTING_ENGINE_TRANSACTION_ID
JOIN information_schema.innodb_trx b 
    ON b.trx_id = lw.BLOCKING_ENGINE_TRANSACTION_ID
ORDER BY wait_seconds DESC;

5.3 死鎖分析

-- 查看最近一次死鎖信息
SHOW ENGINE INNODB STATUS\G
-- 關(guān)注:
-- - LATEST DETECTED DEADLOCK部分
-- - TRANSACTION部分顯示持有的鎖
-- - WAITING FOR部分顯示等待的鎖

-- 開啟死鎖日志持久化
SET GLOBAL innodb_print_all_deadlocks = ON;
-- 死鎖信息會記錄到error log,便于事后分析

5.4 長事務監(jiān)控

-- 查找持有鎖時間最長的事務(危險!)
SELECT 
    trx_id,
    trx_mysql_thread_id,
    trx_state,
    TIMESTAMPDIFF(SECOND, trx_started, NOW()) as trx_seconds,
    trx_tables_locked,
    trx_rows_locked,
    LEFT(trx_query, 100) as query_preview
FROM information_schema.innodb_trx
ORDER BY trx_seconds DESC
LIMIT 5;

-- 終止危險事務
KILL <trx_mysql_thread_id>;

六、最佳實踐總結(jié)

? 應該做的

-- 1. 優(yōu)先使用行級鎖(確保InnoDB引擎和索引)
CREATE TABLE transactions (
    id INT PRIMARY KEY AUTO_INCREMENT,
    user_id INT,
    amount DECIMAL(10,2),
    INDEX idx_user_id (user_id)  -- 關(guān)鍵:加索引!
) ENGINE=InnoDB;

-- 2. 小事務原則:快速提交,減少鎖持有時間
BEGIN;
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
-- 不要在這里做復雜計算或調(diào)用外部API
COMMIT;

-- 3. 按固定順序訪問資源(避免死鎖)
-- 所有事務都按id從小到大更新

-- 4. 使用樂觀鎖處理低沖突場景
UPDATE products SET stock = stock - 1, version = version + 1 
WHERE id = 1 AND version = 5;

? 不應該做的

-- 1. 不要在長事務中持有行鎖
BEGIN;
SELECT * FROM accounts WHERE id = 1 FOR UPDATE;
-- 等待用戶輸入...(錯誤!)
COMMIT;

-- 2. 避免無索引的查詢(會鎖全表)
SELECT * FROM accounts WHERE create_time > '2023-01-01' FOR UPDATE;
-- 如果create_time無索引,將鎖定全表!

-- 3. 謹慎使用顯式表鎖(除非MyISAM)
LOCK TABLES accounts WRITE;
-- 這會阻塞所有其他會話的訪問,即使是簡單的SELECT

-- 4. 避免在高并發(fā)時執(zhí)行全局鎖
FLUSH TABLES WITH READ LOCK; -- 生產(chǎn)環(huán)境慎用!

結(jié)語

理解MySQL的三層鎖機制(全局鎖-表級鎖-行級鎖)是數(shù)據(jù)庫優(yōu)化和高并發(fā)設計的基礎(chǔ):

  • 全局鎖:backup專用,生產(chǎn)環(huán)境盡量避免
  • 表級鎖:DDLL保護+顯式批量操作,并發(fā)較低
  • 行級鎖:OLTP核心,高并發(fā)場景首選,需注意索引和死鎖

掌握這些鎖的特性和SQL表現(xiàn),才能在實際開發(fā)中寫出既安全又高效的代碼。

相關(guān)系統(tǒng)變量調(diào)試

-- 鎖等待超時時間(默認50秒)
SHOW VARIABLES LIKE 'innodb_lock_wait_timeout';

-- 是否開啟死鎖檢測(默認ON,不建議關(guān)閉)
SHOW VARIABLES LIKE 'innodb_deadlock_detect';

-- 事務隔離級別
SHOW VARIABLES LIKE 'transaction_isolation';

到此這篇關(guān)于MySQL鎖機制三部曲:全局鎖、表級鎖、行級鎖深度解析與實戰(zhàn)的文章就介紹到這了,更多相關(guān)MySQL 全局鎖、表級鎖、行級鎖內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • MYSQL數(shù)據(jù)表基本操作之創(chuàng)建+查看+修改+刪除操作方法

    MYSQL數(shù)據(jù)表基本操作之創(chuàng)建+查看+修改+刪除操作方法

    本文將介紹如何在MySQL數(shù)據(jù)庫中進行數(shù)據(jù)表的創(chuàng)建、查看、修改和刪除操作,并討論一些常見的注意事項及防止誤操作的策略,通過這些基礎(chǔ)操作,您將能夠更高效地進行數(shù)據(jù)庫設計和管理工作,感興趣的朋友一起看看吧
    2025-04-04
  • 本地windows安裝兩個mysql服務器,配置主從同步

    本地windows安裝兩個mysql服務器,配置主從同步

    大型網(wǎng)站為了緩解大量的并發(fā)訪問,除了在網(wǎng)站實現(xiàn)分布式負載均衡,還會搭建服務器mysql集群技術(shù),來分擔主數(shù)據(jù)庫的壓力。在本地電腦能實現(xiàn)這樣的技術(shù)嗎,本地windows安裝兩個mysql服務器,配置主從同步也是可以實現(xiàn)的,快來跟著教程測試一下吧。
    2022-12-12
  • Mysql索引下推、索引跳躍、索引覆蓋的具體使用

    Mysql索引下推、索引跳躍、索引覆蓋的具體使用

    本文主要介紹了Mysql索引下推、索引跳躍、索引覆蓋的具體使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2026-04-04
  • 在Windows環(huán)境下安裝MySQL 的教程圖解

    在Windows環(huán)境下安裝MySQL 的教程圖解

    這篇文章主要介紹了在Windows環(huán)境下安裝MySQL 的教程圖解,本文圖文并茂給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-07-07
  • MySQL中distinct語句的基本原理及其與group by的比較

    MySQL中distinct語句的基本原理及其與group by的比較

    這篇文章主要介紹了MySQL中distinct語句的基本原理及其與group by的比較,一般情況下來說group by和distinct的實現(xiàn)原理相近且性能稍好,需要的朋友可以參考下
    2016-01-01
  • 淺談mysql explain中key_len的計算方法

    淺談mysql explain中key_len的計算方法

    下面小編就為大家?guī)硪黄獪\談mysql explain中key_len的計算方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-04-04
  • 讓你的查詢效率至少提高4倍的MySQL技巧總結(jié)

    讓你的查詢效率至少提高4倍的MySQL技巧總結(jié)

    這篇文章主要給大家總結(jié)介紹了關(guān)于讓你的查詢效率至少提高4倍的MySQL技巧,MySQL數(shù)據(jù)庫執(zhí)行效率對程序的執(zhí)行速度有很大的影響,有效的處理優(yōu)化數(shù)據(jù)庫是非常有用的,需要的朋友可以參考下
    2024-05-05
  • MySQL在線開啟或禁用GTID模式

    MySQL在線開啟或禁用GTID模式

    本文詳細講解了MySQL在線開啟或禁用GTID模式的方法,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-11-11
  • mysql表的清空、刪除和修改操作詳解

    mysql表的清空、刪除和修改操作詳解

    這篇文章主要詳細介紹了mysql表的清空、刪除和修改操作的方法,以及一些常用的mysql的常用操作,非常的簡單實用,有需要的可以參考下
    2014-09-09
  • linux CentOS6.5 yum安裝mysql5.6

    linux CentOS6.5 yum安裝mysql5.6

    這篇文章主要為大家詳細介紹了linux CentOS6.5 yum安裝mysql5.6的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-06-06

最新評論

玉门市| 元朗区| 南城县| 贵阳市| 和顺县| 江阴市| 瑞金市| 古丈县| 西乡县| 原平市| 邳州市| 库尔勒市| 德化县| 乐至县| 石棉县| 尼玛县| 贺兰县| 永德县| 思南县| 武鸣县| 许昌县| 彰武县| 科技| 平安县| 鹤庆县| 玉环县| 昌平区| 阿合奇县| 长葛市| 关岭| 云浮市| 道真| 上杭县| 图片| 桃江县| 武强县| 金沙县| 合水县| 时尚| 马鞍山市| 静海县|