日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

读书笔记 —— 《深入浅出MySQL数据库开发、优化与管理维护 第2版》

發(fā)布時間:2023/12/10 数据库 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 读书笔记 —— 《深入浅出MySQL数据库开发、优化与管理维护 第2版》 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

目錄

第1章 Mysql的安裝與配置

1.1 啟動和關(guān)閉Mysql服務(wù)

第2章 SQL基礎(chǔ)

2.1 SQL分類

2.2 常用語句

第3章 Mysql支持的數(shù)據(jù)類型

3.1 數(shù)值類型

3.2 日期時間類型

3.3 字符串類型

第4章 Mysql中的運算符

4.1 運算符優(yōu)先級

第7章 表類型(存儲引擎)的選擇

7.1 各種存儲引擎的特性

7.2 MyISAM

7.3 InnoDB

7.4?MEMORY

第8章 選擇合適的數(shù)據(jù)類型

8.1 CHAR和VARCHAR

8.2 TEXT和BLOB

8.3 浮點數(shù)和定點數(shù)

8.4 日期類型選擇

第10章 索引的設(shè)計與使用

第13章 觸發(fā)器

第14章 事務(wù)控制和鎖定語句

14.1 LOCK TABLE 和 UNLOCK TABLE

14.2 事務(wù)控制

第17章 Mysql分區(qū)

17.1 概述

17.2 分區(qū)類型

第18章 SQL優(yōu)化

18.1?定位執(zhí)行效率低的SQL語句

18.2 EXPLAIN

18.3 索引的存儲分類

18.4 B-Tree索引

18.5 MYSQL中能使用索引的典型場景

18.6 存在索引但不能使用索引的典型場景

18.7 查看索引使用情況

18.8 兩個簡單實用的優(yōu)化方法

18.9 常用的SQL優(yōu)化

第19章 優(yōu)化數(shù)據(jù)庫對象

第20章 鎖問題

20.1 MySQL鎖概述

20.2 MyISAM表鎖

20.3 事務(wù)

20.4 InnoDB行鎖

20.5 InnoDB表鎖


第1章 Mysql的安裝與配置

1.1 啟動和關(guān)閉Mysql服務(wù)

Windows(管理員命令行下)

  • 啟動服務(wù):net start mysql
  • 關(guān)閉服務(wù):net stop?mysql

Linux

  • 啟動服務(wù):service mysql start
  • 重啟服務(wù):service mysql restart
  • 關(guān)閉服務(wù):service mysql stop

第2章 SQL基礎(chǔ)

2.1 SQL分類

  • DDL(Data Definition Languages):數(shù)據(jù)定義語言,這些語句定義了不同的數(shù)據(jù)段、數(shù)據(jù)庫、表、列、索引等數(shù)據(jù)庫對象,常用的關(guān)鍵字包括 create、drop、alter
  • DML(Data Manipulation Language):數(shù)據(jù)操縱語句,用于添加、刪除和更新數(shù)據(jù)庫記錄,并檢查數(shù)據(jù)完整性,常用關(guān)鍵詞 包括 insert、delete、update等
  • DQL(Data Query Language):數(shù)據(jù)查詢語句,用于查詢數(shù)據(jù)庫記錄,常用關(guān)鍵詞包括 select
  • DCL(Data Control Language):數(shù)據(jù)控制語句,用于控制不同數(shù)據(jù)段之間的許可和訪問級別的語句,這些語句定義了數(shù)據(jù)庫、表、字段、用戶的訪問權(quán)限和安全級別,主要關(guān)鍵詞包括 grant、revoke

2.2 常用語句

DDL語句

  • 創(chuàng)建數(shù)據(jù)庫:CREATE DATABASE db_name;
  • 查看全部數(shù)據(jù)庫:SHOW DATABASES;
  • 選擇數(shù)據(jù)庫:USE db_name;
  • 查看全部數(shù)據(jù)表:SHOW TABLES;
  • 刪除數(shù)據(jù)庫:DROP DATABASE db_name;
  • 創(chuàng)建數(shù)據(jù)表:CREATE TABLE [IF NOT EXISTS] ` table_name ` (

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? column_name data_type, ...?

? ? ? ? ? ? ? ? ? ? ? ? ? ? ?)ENGINE=InnoDB DEFAULT CHARSET=utf-8

  • 查看數(shù)據(jù)表定義:DESC table_name; / SHOW CREATE TABLE table_name \G;
  • 刪除數(shù)據(jù)表:DROP TABLE table_name;
  • 清空數(shù)據(jù)表:TRUNCATE TABLE table_name;
  • 修改表字段:ALTER TABLE table_name MODIFY [COLUMN] col_definition [FIRST | AFTER col_name];
  • 增加表字段:ALTER TABLE table_name ADD [COLUMN] col_definition [FIRST | AFTER col_name];
  • 刪除表字段:ALTER TABLE table_name DROP [COLUMN] col_name;
  • 字段改名:ALTER TABLE table_name CHANGE [COLUMN] old_col_name new_col_definition [FIRST | AFTER col_name];
  • 更改表名:ALTER TABLE table_name RENAME new_table_name;

DML語句

  • 增:INSERT INTO table_name (field1,field2 ...) VALUES (value1,value2 ...);
  • 刪:DELETE FROM table_name [WHERE CONDITION];
  • 改:UPDATE table_name SET field1 = value1, field2 = value2 ... [WHERE CONDITION];

DQL語句

  • 查:SELECT * FROM table_name [WHERE CONDITON];
  • 查詢不重復(fù)的記錄:SELECT DISTINCT field FROM table_name;
  • 排序:SELECT * FROM table_name [WHERE CONDITION] [ORDER BY field [DESC / ASC]];
  • 截取:SELECT ... [LIMIT offset_start, row_count];? ? // offset_start:起始偏移量(默認為0),row_count:顯示的行數(shù)
  • 聚合:

  • ?左/右連接:SELECT field FROM table_name1 LEFT/RIGHT JOIN table_name2 ON CONDITION;

第3章 Mysql支持的數(shù)據(jù)類型

3.1 數(shù)值類型

  • Mysql支持在類型名稱后面的小括號內(nèi)指定顯示寬度,例如int(5)表示當數(shù)值寬度小于5位的時候再數(shù)字前面填滿寬度,如果不顯示指定寬度則默認為int(11)
  • 所有的整數(shù)類型都有一個可選屬性UNSIGNED(無符號),如果需要在字段里面保存非負數(shù)或者需要較大的上限值時,可以用此選項
  • AUTO_INCREMENT:在需要產(chǎn)生唯一標識符或順序值時,可用此屬性,必須定義為NOT NULL
  • float和double在不指定精度時,默認會按照實際的精度(由實際的硬件和操作系統(tǒng)決定)來顯示,而decimal在不指定精度時,默認的整數(shù)位為10,默認小數(shù)位為0

3.2 日期時間類型

3.3 字符串類型

  • ?CHAR是固定長度,刪除尾部空格;VARCHAR是可變長度,保留尾部空格

第4章 Mysql中的運算符

4.1 運算符優(yōu)先級

第7章 表類型(存儲引擎)的選擇

7.1 各種存儲引擎的特性

7.2 MyISAM

7.3 InnoDB

7.4?MEMORY

? ? ?MEMORY存儲引擎使用存在于內(nèi)存的內(nèi)容來創(chuàng)建表。每個MEMORY表只實際對應(yīng)一個磁盤文件,格式是.frm。MEMORY類型的表訪問非常地塊,因為它的數(shù)據(jù)是放在內(nèi)存中的,并且默認使用HASH索引,但是一旦服務(wù)關(guān)閉,表中的數(shù)據(jù)就會丟失掉。

第8章 選擇合適的數(shù)據(jù)類型

8.1 CHAR和VARCHAR

8.2 TEXT和BLOB

? ? ? ? BLOB和TEXT值會引起一些性能問題,特別是在執(zhí)行了大量刪除操作時。刪除操作會在數(shù)據(jù)表中留下很大的“空洞”,以后填入這些“空洞”的記錄在插入的性能上會有影響。為了提高性能,建議定期使用 OPTIMIZE TABLE table_name; 對表進行碎片整理,避免因為“空洞”導(dǎo)致性能問題。

8.3 浮點數(shù)和定點數(shù)

8.4 日期類型選擇

第10章 索引的設(shè)計與使用

MyISAM和InnoDB存儲引擎默認使用BTREE索引

可以用 explain 語句查看查詢語句是否使用索引

MEMORY可以使用HASH索引,只能用=或<=>操作符的等式比較

  • 新增索引:ALTER TABLE table_name ADD INDEX index_name (column_list);
  • 刪除索引:ALTER TABLE table_name DROP INDEX index_name;
  • 查看索引:SHOW INDEX FROM table_name;

第13章 觸發(fā)器

觸發(fā)器是與表有關(guān)的數(shù)據(jù)庫對象,在滿足定義條件時觸發(fā),并執(zhí)行觸發(fā)器中定義的語句集合。

第14章 事務(wù)控制和鎖定語句

14.1 LOCK TABLE 和 UNLOCK TABLE

LOCK TABLES 可以鎖定用于當前線程的表。如果表被其他線程鎖定,則當前線程會等待,知道可以獲取所有鎖定為止

UNLOCK TABLE 可以釋放當前線程獲得的任何鎖定

當前線程執(zhí)行另一個LOCK TABLES時,或當與服務(wù)器的連接被關(guān)閉時,所有由當前線程鎖定的表被隱含地解鎖

14.2 事務(wù)控制

第17章 Mysql分區(qū)

17.1 概述

? ? ? 分區(qū)是指根據(jù)一定的規(guī)則,數(shù)據(jù)庫把一個表分解成多個更小的、更容易管理的部分。就訪問數(shù)據(jù)庫的應(yīng)用而言,邏輯上只有一個表或一個索引,但是實際上這個表可能由數(shù)10個物理分區(qū)對象組成,每個分區(qū)都是一個獨立的對象,可以獨自處理,可以作為表的一部分進行處理。分區(qū)對應(yīng)用來說是完全透明的,不影響應(yīng)用的業(yè)務(wù)邏輯

17.2 分區(qū)類型

第18章 SQL優(yōu)化

18.1?定位執(zhí)行效率低的SQL語句

18.2 EXPLAIN

字段解析

  • select_type:表示SELECT的類型,常見的區(qū)志有SIMPLE(簡單表,即不使用表連接或者子查詢)、PRIMARY(主查詢,即外層的查詢)、UNION(UNION中的第二個或者后面的查詢語句)、SUBQUERY(子查詢中的第一個SELECT)等
  • table:輸出結(jié)果集的表
  • type;表示MYSQL在表中找到所需行的方式,或者叫訪問類型。常見類型有
    • ALL:全盤掃描,MYSQL遍歷全表來找到匹配的行
    • index:索引全掃描,MYSQL遍歷整個索引來查詢匹配的行
    • range:索引范圍掃描,常見于<、<=、>、>=、between等操作符
    • ref:使用非唯一索引掃描或唯一索引的前綴掃描,返回匹配某個單獨值的記錄行
    • eq_ref:類似ref,區(qū)別就在使用的索引是唯一索引,對于每個索引鍵值,表中只有一條記錄匹配;簡單來說,就是多表連接中使用primaty key 或者 unique index 作為關(guān)聯(lián)條件
  • prossible_keys:表示查詢時可能使用的索引
  • key:表示實際使用的索引
  • key_len:使用到索引字段的長度
  • rows:掃描行的數(shù)量
  • Extra:執(zhí)行情況的說明和描述,包含不適合在其他列中顯示但是對執(zhí)行計劃非常重要的額外信息

explain patitions:查看SQL所訪問的分區(qū)

18.3 索引的存儲分類

18.4 B-Tree索引

? ? ? ? B-Tree索引是最常見的索引,構(gòu)造類似二叉樹,能根據(jù)鍵值提供一行或者一個行集的快速訪問,通常只需要很少的讀操作就可以找到正確的行。B代表的是平衡樹(balanced),而不是二叉樹(binary)。B-Tree索引并不是一棵二叉樹。

18.5 MYSQL中能使用索引的典型場景

  • 匹配全值(Match the full value):對索引中所有列都指定具體值,即是對索引中的所有列都有等值匹配的條件
  • 匹配值的范圍查詢(Match a range of values):對索引的值能夠進行范圍查找
  • 匹配最左前綴(Match a leftmost prefix):僅僅使用索引中最左邊列進行查找,比如在col1 + col2 + col3 字段上的聯(lián)合索引能夠被包含col1、(col1 + col2)、(col1 + col2 + col3)的等值查詢利用到,可是不能夠被col2、(col2 + col3)的等值查詢利用到。最左匹配原則可以算是Mysql中的B-Tree索引使用的首要原則
  • 僅僅對索引進行查詢(Index only query):當查詢的列都在索引的字段中時,索引的效率更高。避免使用select *,直接查詢所需要的列
  • 匹配列前綴(Match a column prefix),僅僅使用索引中的第一列,并且只包含索引第一列的開頭一部分進行查找
  • 能夠?qū)崿F(xiàn)索引匹配部分精確而其他部分進行范圍匹配
  • 18.6 存在索引但不能使用索引的典型場景

  • 以%開頭的LIKE查詢不能夠利用B-Tree索引,一般使用全文索引解決
  • 數(shù)據(jù)類型出現(xiàn)隱式轉(zhuǎn)換的時候也不會使用索引,特別是當列類型是字符串,那么一定記得在where條件中把字符常量用引號引起來,否則即使這個列上有索引,Mysql也不會用到,因為Mysql默認把輸入的常量值進行轉(zhuǎn)換以后才進行檢索
  • 復(fù)合索引的情況下,加入查詢條件不包含索引列最左邊部分,即不滿足最左原則Leftmost,是不會使用復(fù)合索引的
  • 如果Mysql估計使用索引比全表掃描更慢,則不使用索引
  • 用or分割開的條件,如果or前的條件中的列有索引,而后面的列中沒有索引,那么涉及的索引都不會被用到。因為or后面的條件列沒有索引,那么后面的查詢肯定要走全表掃描,在存在全表掃描的情況下,就沒有必要多一次索引掃描增加I/O訪問,一次全表掃描過濾條件就夠了
  • 18.7 查看索引使用情況

    • 使用:show status like 'Handler_read&';
    • Handler_read_key:如果索引正在工作,Handler_read_key的值將很高,這個值代表了一個行被索引值讀的次數(shù),很低表明增加索引得到的性能改善不高,因為索引并不經(jīng)常使用
    • Handler_read_rnd_next:值高意味著查詢運行低效,并且應(yīng)建立索引補救。這個值的含義是在數(shù)據(jù)文件中讀下一行的請求數(shù)。如果正進行大量的表掃描,值會很高,說明表索引不正確或?qū)懭氲牟樵儧]有利用索引

    18.8 兩個簡單實用的優(yōu)化方法

  • 定期分析表和檢查表:ANALYZE TABLE table_name / CHECK TABLE?table_name
  • 定期優(yōu)化表:OPTIMIZE TABLE table_name 可以將表中的空間碎片進行合并,并且可以消除由于刪除或更新造成的空間浪費,但 OPTIMIZE TABLE 命令只對MyISAM、BDB和InnoDB表起作用
  • 對于InnoDB引擎的表來說,通過設(shè)置 innodb_file_pre_table 參數(shù),設(shè)置InnoDB為獨立表空間模式,這樣每個數(shù)據(jù)庫的每個表都會生成一個獨立的ibd文件,用于存儲標的數(shù)據(jù)和索引,這樣可以一定程度上減輕InnoDB表的空間回收問題。另外,在刪除大量數(shù)據(jù)后,InnoDB表可以通過alter table 但是不修改引擎的方式來回收不用的空間:ALTER TABLE table_name ENGINE=InnoDB;
  • ANALYZE、CHECK、OPTIMIZE、ALTER TABLE 執(zhí)行期間將對表進行鎖定,因此一定注意要在數(shù)據(jù)庫不繁忙的時候執(zhí)行相關(guān)的操作
  • 18.9 常用的SQL優(yōu)化

    大批量插入數(shù)據(jù)

    MyISAM:

    ALTER TABLE table_name DISABLE KEYS; load data infile ... ALTER TABLE table_name ENABLE KEYS;

    InnoDB:

    • 因為InnoDB類型的表是按照主鍵的順序保存的,所以將導(dǎo)入的數(shù)據(jù)按照主鍵的順序排列,可以有效地提高導(dǎo)入數(shù)據(jù)的效率
    • 在倒入數(shù)據(jù)前執(zhí)行SET UNIQUE_CHECKS=0,關(guān)閉唯一性校驗,在導(dǎo)入結(jié)束后執(zhí)行 SET UNIQUE_CHECKS=1,恢復(fù)唯一性檢驗,可以提高導(dǎo)入效率
    • 如果應(yīng)用使用自動提交的方式,建議在導(dǎo)入前執(zhí)行SET AUTOCOMMIT=0,關(guān)閉自動提交,導(dǎo)入結(jié)束后再執(zhí)行SET AUTOCOMMIT=1,打開自動提交,也可以提高導(dǎo)入的效率

    優(yōu)化INSERT語句

    • 如果可以同時從一個客戶端插入很多行,應(yīng)盡量使用多個值表的INSERT語句,這種方式將大大縮減客戶端與數(shù)據(jù)庫之間的連接、關(guān)閉等消耗,使得效率比分開執(zhí)行的單個INSERT語句塊

    優(yōu)化ORDER BY語句

    Mysql有兩種排序方式

  • 通過有序索引順序掃描直接返回有序數(shù)據(jù),這種方式在使用 EXPLAIN 分析查詢時 Extra 顯示為Using Index
  • 第二種是通過返回數(shù)據(jù)進行排序,也就是通常說的 Filesort 排序
  • 優(yōu)化方案:盡量減少額外的排序,通過索引直接返回有序數(shù)據(jù)。WHERE 條件和 ORDER 條件使用相同的索引,并且ORDER BY 的順序和索引順序相同,并且ORDER BY 的字段都是升序或者都是降序。否則肯定需要額外的排序,這樣就會出現(xiàn)Filesort

    優(yōu)化GROUP BY語句

    如果查詢包括GROUP BY 但用戶想要避免排序結(jié)果的消耗,則可以指定ORDER BY NULL 禁止排序

    e.g. explain select payment_date, sum(amont) from payment group by payment_date order by null\G;

    優(yōu)化OR條件

    如果要使用索引,OR之間的每個條件都必須用到索引,如果沒有索引,應(yīng)該考慮增加索引。不能是復(fù)合索引

    用RAND()提取隨機行

    隨機抽取5行:select * from category order by rand() limit 5;

    第19章 優(yōu)化數(shù)據(jù)庫對象

    優(yōu)化表的數(shù)據(jù)

    SELECT * FROM table_name PROCEDURE ANALYSE();

    使用PROCEDURE ANALYSE(); 對當前應(yīng)用的表進行分析,該函數(shù)可以對數(shù)據(jù)表中列的數(shù)據(jù)類型提出優(yōu)化建議,用戶可以根據(jù)應(yīng)用的實際情況酌情考慮是否實施優(yōu)化。

    通過拆分提高表的訪問效率

  • 垂直拆分:把主碼和一些列放到一個表,然后把主碼和另外的列放到另一個表中。如果一個表中某些列常用,而另一些列不常用,則可以采用垂直拆分,另外,垂直拆分可以使得數(shù)據(jù)行變小,一個數(shù)據(jù)頁就能存放更多數(shù)據(jù),在查詢時就會減少I/O次數(shù)。其缺點是需要管理冗余項,查詢所有數(shù)據(jù)時需要聯(lián)合(JOIN)操作
  • 水平拆分:根據(jù)一列或多列數(shù)據(jù)的值把數(shù)據(jù)行放到兩個獨立的表中。水平拆分會給應(yīng)用增加復(fù)雜度,它通常在查詢時需要多個表名,查詢所有數(shù)據(jù)需要UNION操作
  • 反規(guī)范化

    反規(guī)范化的好處是降低連接操作的需求、降低外碼和索引的數(shù)目,還可能減少表的數(shù)目,響應(yīng)帶來的問題是可能出現(xiàn)數(shù)據(jù)的完整性問題。加快查詢速度,但會降低修改速度。

    使用中間表提高統(tǒng)計查詢速度

    第20章 鎖問題

    20.1 MySQL鎖概述

    • 表級鎖:開銷小,加鎖快;不會出現(xiàn)死鎖;鎖定粒度大,發(fā)生鎖沖突的概率最高,并發(fā)度最低
    • 行級鎖:開銷大,加鎖慢;會出現(xiàn)死鎖;鎖定粒度小,發(fā)生鎖沖突的概率最低,并發(fā)度最高

    20.2 MyISAM表鎖

    MySQL表級鎖的所模式

    MySQL的表級鎖有兩種模式:表共享讀鎖和表獨占寫鎖

    ?可見,對MySIM表的讀操作,不會阻塞其他用戶對同一表的讀操作,但會阻塞對同一表的寫請求;對MyISAM表的寫操作,則會阻塞其他用戶對同一表的讀和寫操作

    如何加表鎖

    MyISAM在執(zhí)行查詢語句(SELECT)前,會自動給涉及的所有表加讀鎖,在執(zhí)行更新操作(UPDATE、DELETE、INSERT等)前,會自動給設(shè)計的表加寫鎖

    LOCK TABLES table_name read/write [local];
    • local:允許并發(fā)插入
    • 在用LOCK TABLES 給表顯式加表鎖時,必須同時取得所有涉及的表,并且MySQL不支持鎖升級,也就是說,在執(zhí)行LOCK TABLES后,只能訪問顯式加鎖的這些表,不能訪問未加鎖的表;同時,如果加的是讀鎖,那么只能執(zhí)行查詢操作,而不能執(zhí)行更新操作,在自動加鎖的情況下也是如此,MyISAM總是一次獲得SQL語句所需要的全部鎖,這也是MyISAM表不會出現(xiàn)死鎖的原因

    并發(fā)插入

    MyISAM有一個系統(tǒng)變量 concurrent_insert,專門用以控制其并發(fā)插入行為

    • 值為0時,不允許并發(fā)插入
    • 值為1時,默認設(shè)置。如果MyISAM表中沒有空間(即表的中間沒有被刪除的行),MyISAM允許在一個進程讀表的同時,另一個進程從表尾插入記錄
    • 值為2時,無論MyISAM表中有沒有空間,都允許在表尾并發(fā)插入記錄

    MyISAM的鎖調(diào)度

    20.3 事務(wù)

    事務(wù)及其ACID屬性

    并發(fā)處理事務(wù)帶來的問題

    ?事務(wù)隔離

    20.4 InnoDB行鎖

    行鎖模式

    加鎖方式

    • 共享鎖(S):SELECT * FROM table_name WHERE ... LOCK IN SHARE MODE;
    • 排他鎖(X):SELECT * FROM table_name WHERE ... FOR UPDATE;

    InnnoDB行鎖實現(xiàn)方式

  • ?在不通過索引條件查詢時,InnoDB會鎖定表中的所有記錄
  • 由于Mysql的行鎖是針對索引加的鎖,不是針對記錄加的鎖,所以雖然是訪問不同行的記錄,但是如果是使用相同的索引鍵,是會出現(xiàn)鎖沖突的,應(yīng)用設(shè)計時應(yīng)考慮這一點
  • 當表有多個索引時,不同的事務(wù)可以使用不同的索引鎖定不同的行,不論是使用主鍵索引、唯一索引或普通索引,InnoDB都會使用行鎖來對數(shù)據(jù)加鎖
  • 即便在條件中使用了索引字段,但是否使用索引來檢索數(shù)據(jù)是由Mysql通過判斷不同執(zhí)行計劃的代價來決定的,如果Mysql認為全表掃描效率更高,比如對一些很小的表,就不會使用索引,這種情況InnoDB也會對所有記錄加鎖。因此,在分析鎖沖突時,別忘了檢查SQL的執(zhí)行計劃,以確定是否真正使用了索引
  • ?Next-Key鎖

    當我們用范圍條件而不是相等條件檢索數(shù)據(jù),并請求共享或排他鎖時,InnoDB會給符合條件的已有數(shù)據(jù)記錄的索引項加鎖;對于鍵值在條件范圍內(nèi)但并不存在的記錄,叫做間隙鎖,InnnoDB也會對這個“間隙”加鎖,這種鎖機制就是所謂的Next-Key鎖

    20.5 InnoDB表鎖

    ?

    總結(jié)

    以上是生活随笔為你收集整理的读书笔记 —— 《深入浅出MySQL数据库开发、优化与管理维护 第2版》的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。