日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

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

数据库

MySQL学习笔记-从基础到进阶

發(fā)布時間:2024/3/13 数据库 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MySQL学习笔记-从基础到进阶 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

MySQL自學筆記

  • MySQL
    • 基礎
      • SQL
        • SQL通用語法
        • SQL分類
        • DDL數(shù)據(jù)操作
        • 數(shù)據(jù)類型
        • DML數(shù)據(jù)操作
        • DQL數(shù)據(jù)操作
        • DCL數(shù)據(jù)控制
        • 函數(shù)
        • 約束
        • 多表查詢
        • 事務
    • 進階
      • 存儲引擎
      • **索引**(重點)
      • SQL優(yōu)化
      • 視圖
      • 存儲過程
      • InnoDB引擎
        • 邏輯存儲結(jié)構(gòu)
        • 架構(gòu)
          • 內(nèi)存架構(gòu)
          • 磁盤架構(gòu)
          • 后臺線程
      • 事務原理
      • MVCC

MySQL

課程連接

數(shù)據(jù)庫:存儲數(shù)據(jù)的倉庫,數(shù)據(jù)是有組織的進行存儲(DataBase, DB)

數(shù)據(jù)庫管理系統(tǒng):操縱和管理數(shù)據(jù)庫的大型軟件(DataBase Management System, DBMS)

SQL : 操作關(guān)系型數(shù)據(jù)庫的編程語言,定義了一套操作關(guān)系型數(shù)據(jù)庫的統(tǒng)一標準(Structured Query Language, SQL)

基礎

  • 關(guān)系型數(shù)據(jù)庫(RDBMS)

    • 概念:建立在關(guān)系模型基礎上,有多張相互連接的二維表組成的數(shù)據(jù)庫
    • 使用表存儲數(shù)據(jù),格式統(tǒng)一,便于維護
    • 使用SQL語言操作,標準統(tǒng)一,使用方便
  • MySQL啟動

net start mysql80net stop mysql80 * MySQL客戶端連接 mysql [-h 127.0.0.1] [-p 3306] -u root -p
  • MySQL數(shù)據(jù)模型
    • 數(shù)據(jù)庫管理系統(tǒng) --> 數(shù)據(jù)庫 --> 二維表

SQL

SQL通用語法

  • SQL語句可以單行或多行書寫,以分號結(jié)尾
  • SQL語句可以使用空格/縮進來增強語句的可讀性
  • MySQL數(shù)據(jù)庫的SQL語句不區(qū)分大小寫,關(guān)鍵字建議使用大寫
  • 注釋
    • 單行注釋:–或#
    • 多行注釋:/* */

SQL分類

  • DDL (Data Definition Language) 數(shù)據(jù)定義語言,用來定義數(shù)據(jù)庫對象(數(shù)據(jù)庫、表、字段等)
  • DML(Data Manipulation Language) 數(shù)據(jù)操作語言,用來對數(shù)據(jù)庫表中的數(shù)據(jù)進行增刪改查
  • DQL(Data Query Language) 數(shù)據(jù)查詢語言,用來查詢數(shù)據(jù)庫中標的記錄
  • DCL(Data Control Language) 數(shù)據(jù)控制語言,用來創(chuàng)建數(shù)據(jù)庫用戶、控制數(shù)據(jù)庫的訪問權(quán)限

DDL數(shù)據(jù)操作

  • 查詢
#查詢所有數(shù)據(jù)庫SHOW DATABASES;#查詢當前數(shù)據(jù)庫SELECT DATABASE();
  • 創(chuàng)建
CREATE DATABASE [IF NOT EXISTS] 數(shù)據(jù)庫名 [DEFAULT CHARSET 字符集(UTF8MB4)] [COLLATE 排序規(guī)則];
  • 刪除
DROP DATABASE [IF EXISTS] 數(shù)據(jù)庫名;
  • 使用
USE 數(shù)據(jù)庫名;
  • 表操作-查詢
#查詢當前數(shù)據(jù)庫所有表show tables;#查詢表結(jié)構(gòu)desc 表名;#查詢指定表的建表語句show create table 表名;
  • 表操作-創(chuàng)建
create table 表名(字段1 字段1類型 [comment 字段1注釋],字段2 字段2類型 [comment 字段2注釋],字段3 字段3類型 [comment 字段3注釋],......字段n 字段n類型 [comment 字段n注釋])[comment 表注釋];#注意:[..]為可選參數(shù),最后一個字段結(jié)束沒有逗號
  • 表操作-修改
#添加字段alter table 表名 add 字段名 類型(長度)[comment 注釋] [約束];#修改字段數(shù)據(jù)類型 alter table 表名 modify 字段名 新數(shù)據(jù)類型(長度);#修改字段名和字段類型alter table 表名 change 舊字段名 新字段名 類型(長度) [comment 注釋] [約束];#刪除字段alter table 表名 drop 字段名;#修改表名alter table 表名 rename to 新表名;#刪除表drop table [if exists] 表名;#刪除指定表,并重新創(chuàng)建該表truncate table 表名;

數(shù)據(jù)類型

  • 數(shù)據(jù)類型-數(shù)值類型

  • 數(shù)值類型-字符類型

  • 數(shù)值類型-日期類型

DML數(shù)據(jù)操作

  • INSERT添加數(shù)據(jù)
#給指定字段添加數(shù)據(jù)INSERT INTO 表名(字段名1,字段名2...) VALUES(1,值2,...);#給全部字段添加數(shù)據(jù)INSERT INTO 表名 VALUES(1,值2,...);#批量添加數(shù)據(jù)INSERT INTO 表名(字段名1,字段名2...) VALUES(1,值2,..),(1,值2,..),(1,值2,..);INSERT INTO 表名 VALUES(1,值2,...),(1,值2,...),(1,值2,...);#注意:插入數(shù)據(jù)時,指定字段順序需要與值的順序是一一對應的#字符串和日期類型數(shù)據(jù)應該包含在引號中;#插入數(shù)據(jù)的大小,應該在字段的規(guī)定范圍內(nèi)
  • UPDATE修改數(shù)據(jù)
#修改數(shù)據(jù)UPDATE 表名 SET 字段名1 =1, 字段名2 =2,...[WHERE 條件];#修改語句條件可以有或沒有,如果沒有默認修改整張表的所有數(shù)據(jù)#刪除數(shù)據(jù)DELETE FROM 表名 [WHERE 條件];#DELETE語句的條件可以有,也可以沒有,如果沒有條件,則刪除整張表的數(shù)據(jù)#DELETE語句不能刪除某一字段的值(可以使用UPDATE)

DQL數(shù)據(jù)操作

  • 基本查詢
#查詢多個字段SELECT 字段1, 字段2... FROM 表名;SELECT * FROM 表名;#設置別名 AS可省略SELECT 字段1[AS 別名1], 字段2[AS 別名2]...FROM 表名;#去除重復記錄SELECT DISTINCT 字段列表 FROM 表名;
  • 條件查詢
SELECT 字段列表 FROM 表名 WHERE 條件列表;#條件BETWEEN [MAX] AND [MIN]; --在某一范圍內(nèi),相當于 MIN <= AND <=MAXVALUE1 IN(VALUE2, VALUE3,); --相當于 VALUE1 = VALUE2 OR VALUE1 = VALUE3IS NULLIS NOT NULL; --查詢?yōu)镹ULL和不為NULLLIKE '_ _'; --查詢兩個字符的字段LIKE '%X'; --查詢最后為X的字段



  • 聚合函數(shù)
#將一列數(shù)據(jù)作為一個整體,進行縱向計算的函數(shù)-聚合函數(shù)count --統(tǒng)計數(shù)量max --最大值min --最小值avg --平均值sum --求和# NULL值不參與函數(shù)運算#語法SELECT 聚合函數(shù)(字段列表) FROM 表名;
  • 分組查詢
SELECT 字段列表 FROM 表名 [WHERE 條件] GROUP BY 分組字段名 [HAVING 分組后過濾條件];#WHERE 與 HAVING區(qū)別#執(zhí)行時機不同:WHERE是分組前進行過濾,不滿足條件,不參與分組。HAVING是分組之后對結(jié)果進行過濾。#判斷條件不同:WHERE不能對聚合函數(shù)進行判斷,HAVING 可以。#執(zhí)行順序:WHERE > 聚合函數(shù) > HAVING#分組后一般查詢分組字段和聚合函數(shù),查詢其他字段沒有意義
  • 排序查詢
SELECT 字段列表 FROM 表名 ORDER BY 字段1 排序方式1, 字段2 排序方式2;#排序方式ASC 升序 默認值DESC 降序#注意:如果是多字段排序,當?shù)谝粋€字段值相同時,才會根據(jù)第二個字段進行排序
  • 分頁查詢
SELECT 字段列表 FROM 表名 LIMIT 起始索引,查詢記錄數(shù);#注意:起始索引從0開始,起始索引 = (查詢頁碼-1)*每頁顯示記錄數(shù)#分頁查詢是數(shù)據(jù)庫的方言,不同的數(shù)據(jù)庫有不同的實現(xiàn),MySQL中是LIMIT#如果查詢的是第一頁數(shù)據(jù),起始索引可以省略,直接簡寫為 LIMIT 10
  • 執(zhí)行順序
#編寫順序SELECT -> FROM -> WHERE -> GROUP BY -> HAVING -> ORDER BY -> LIMIT #執(zhí)行順序FROM -> WHERE -> GROUP BY -> HAVING -> SELECT -> ORDER BY -> LIMIT

DCL數(shù)據(jù)控制

  • 用戶管理
#查詢用戶USE mysql;SELECT * FROM user;#創(chuàng)建用戶 CREATE USER '用戶名'@'主機名' IDENTIFIED BY '密碼';#修改用戶密碼ALTER USER '用戶名'@'主機名' IDENTIFIED WITH mysql_native_password BY '新密碼';#刪除用戶DROP USER '用戶名'@'主機名';#注意:主機名可以使用%通配#這類操作開發(fā)人員操作較少,主要是DBA(Database Adminstrator 數(shù)據(jù)管理員)使用。
  • 權(quán)限控制
#查詢權(quán)限SHOW GRANTS FOR '用戶名'@'主機名';#授予權(quán)限GRANT 權(quán)限列表 ON 數(shù)據(jù)庫名.表名 TO '用戶名'@'主機名';#撤銷權(quán)限REVOKE 權(quán)限列表 ON 數(shù)據(jù)庫名。表名 FROM '用戶名'@'主機名';

函數(shù)

  • 字符串函數(shù)
SELECT 函數(shù)(參數(shù));

  • 數(shù)值函數(shù)

  • 日期函數(shù)

  • 流程函數(shù)

約束

  • 概念:約束是作用于表中字段上的規(guī)則,用于限制存儲在表中的數(shù)據(jù)

  • 目的:保證數(shù)據(jù)庫中數(shù)據(jù)的正確、有效性和完整性

  • 分類:

AUTO_INCREMENT 使約束字段遞增
  • 注意:約束是作用于表中字段上,可以在創(chuàng)建表/修改表時添加約束

  • 外鍵約束:外鍵用來讓兩張表的數(shù)據(jù)之間建立連接,從而保證數(shù)據(jù)的一致性和完整性

#添加外鍵CREATE TABLE 表名(字段名 數(shù)據(jù)類型,...[CONSTRAINT] [外鍵名稱] FOREIGN KEY(外鍵字段名) REFERENCES 主表(主表列名) );ALTER TABLE 表名 ADD CONSTRAINT [外鍵名稱] FOREIGN KEY(外鍵字段名) REFERENCES 主表(主表列名);#刪除外鍵ALTER TABLE 表名 DROP FOREIGN KEY 外鍵名稱;
  • 外鍵約束刪除/更新行為
ALTER TABLE 表名 ADD CONSTRAINT [外鍵名稱] FOREIGN KEY(外鍵字段名) REFERENCES 主表(主表列名) ON UPDATE 行為 ON DELETE 行為;# NO ACTION 、RESTRICT 默認行為

多表查詢

  • 多表關(guān)系
#一對多(多對一) 如員工與職位的關(guān)系實現(xiàn):在多的一方建立外鍵,指向一的一方的主鍵#多對多 如學生與課程的關(guān)系實現(xiàn):建立第三張中間表,中間表至少包含兩個外鍵,分別關(guān)聯(lián)兩方主鍵#一對一 多用于單表拆分實現(xiàn):在任意一方加入外鍵,關(guān)聯(lián)另外一方的主鍵,并且設置外鍵為唯一的(UNIQUE)
  • 多表查詢
#連接查詢 注意消除笛卡爾積的條件內(nèi)連接:相當于查詢A、B交集部分數(shù)據(jù)##隱式內(nèi)連接SELECT DISTINCT 字段列表 FROM1,表2 WHERE 連接條件...;DISTINCT對查詢結(jié)果去重##顯式內(nèi)連接SELECT 字段列表 FROM1 [INNER] JOIN2 ON 連接條件...;外連接:左外連接:查詢左表所有數(shù)據(jù),以及兩張表交集部分數(shù)據(jù)SELECT 字段列表 FROM1 LEFT [INNER] JOIN2 ON 連接條件... [WHERE 條件];右外連接:查詢右表所有數(shù)據(jù),以及兩張表交集部分數(shù)據(jù)SELECT 字段列表 FROM1 RIGHT [INNER] JOIN2 ON 連接條件... [WHERE 條件];自連接:當前表與自身的連接查詢,自連接必須使用表別名#聯(lián)合查詢對于UNION查詢,是把多次查詢的結(jié)果合并起來,形成一個新的查詢結(jié)果集SELECT 字段列表 FROM 表A ...UNION[ALL]SELECT 字段列表 FROM 表B...;注意:對于聯(lián)合查詢的多張表的列數(shù)必須保持一致,字段類型也需要保持一致UNION ALL會將全部的數(shù)據(jù)直接合并在一起,UNION會對合并之后的數(shù)據(jù)去重 #子查詢SQL語句中嵌套SELECT語句,稱為嵌套查詢,又稱為子查詢SELECT * FROM t1 WHERE column1 = (SELECT column1 FROM t2);子查詢外部的語句可以是INSERT/ UPDATE / SELECT / DELETE 的任何一個根據(jù)子查詢結(jié)果不同,分為:標量子查詢(子查詢結(jié)果為單個值)列子查詢(子查詢結(jié)果為一列)行子查詢(子查詢結(jié)果為一行)表子查詢(子查詢結(jié)果為多行多列)根據(jù)子查詢位置,分為:WHERE之后、FROM之后、SELECT之后。

事務

  • 事務是一組操作的集合,它是一個不可分割的工作單位,事務會把所有操作作為一個整體一起向系統(tǒng)提交或撤銷操作請求,這些操作要么同時成功,要么同時失敗

  • 默認MySQL的事務是自動提交的

  • 事務操作

#查看/設置事務提交方式SELECT @@autoaommit;SET @@autocommit = 0; -- 0 手動提交 1 自動提交#提交事務COMMIT;#回滾事務ROLLBACK;#方式二 不用設置系統(tǒng)參數(shù)#開啟事務START TRANSACTIONBEGIN#提交事務COMMIT;#回滾事務ROLLBACK;
  • 事務四大特性
原子性(Atomicity):事務是不可分割的最小操作單元,要么全部成功,要么全部失敗一致性(Consistency):事務完成時,必須使所有的數(shù)據(jù)保持一致狀態(tài)隔離性(Isolation):數(shù)據(jù)庫系統(tǒng)提供的隔離機制,保證事務在不受外部并發(fā)操作影響的獨立環(huán)境下運行持久性(Durability):事務一旦提交或回滾,他對數(shù)據(jù)庫中的數(shù)據(jù)的改變是永久的
  • 并發(fā)事務問題
臟讀:一個事務讀取到另外一個事務還沒有提交的數(shù)據(jù)不可重復讀:一個事務先后讀取同一條記錄,但兩次讀取的數(shù)據(jù)不同,成之為不可重復讀幻讀:一個事務按照條件查詢數(shù)據(jù)時,沒有對應的數(shù)據(jù)行,但是在插入數(shù)據(jù)時,又發(fā)現(xiàn)這行數(shù)據(jù)已經(jīng)存在,好像出現(xiàn)了’幻影‘
  • 并發(fā)事務隔離級別

上表從上到下隔離級別越來越高,性能越來越差,安全性越來越高--查看事務隔離級別SELECT @@TRANSACTION_ISOLATION;--設置事務隔離級別 SESSION[當前窗口有效] GLOBAL[所有窗口有效]SET[SESSION | GLOBAL] TRANSACTION ISOLATION LEVEL {隔離級別}

進階

存儲引擎

  • MySQL體系結(jié)構(gòu)

--連接層:最上層是一些客戶端和連接服務,主要完成一些類似于連接處理、授權(quán)認證、及相關(guān)的安全方案。服務器也會為安全接入的每個客戶端驗證它所具有的操作權(quán)限--服務層:第二層架構(gòu)主要完成大多數(shù)的核心服務功能,如SQL接口,并完成緩存的查詢,SQL的分析和優(yōu)化,部分內(nèi)置函數(shù)的執(zhí)行。所有跨存儲引擎的功能也在這一層實現(xiàn),如過程、函數(shù)等--引擎層:存儲引擎真正的負責了MySQL中數(shù)據(jù)的存儲和提取,服務器通過API和存儲引擎進行通信。不同的存儲引擎具有不同的功能,這樣我們可以根據(jù)自己的需要,來選取合適的存儲引擎--存儲層:主要將數(shù)據(jù)存儲在文件系統(tǒng)之上,并完善與存儲引擎的交互
  • 存儲引擎
#指定存儲引擎 默認INNODBCREATE TABLE 表名()ENGINE = 存儲引擎 [COMMENT 表注釋];#查詢數(shù)據(jù)庫支持的引擎SHOW ENGINE;
  • 存儲引擎特點
#innoDBinnoDB是一種兼顧高可靠性和高性能的通用存儲引擎,在MySQL5.5之后,是默認存儲引擎#特點DML操作遵循ACID模型,支持事務行級鎖,提高并發(fā)訪問性能支持外鍵FOREIGN KEY約束,保證數(shù)據(jù)的完整性和正確性#文件xxx.idb: xxx表示表名,innoDB引擎的每張表都會對應這樣一個表空間文件,存儲該表的表結(jié)構(gòu)(frm sdi)、數(shù)據(jù)和索引。參數(shù):innodb_file_per_table -- 是否開啟一張表對應一個表空間文件

#MySAM早期的默認存儲引擎#特點不支持事務,不支持外鍵支持表鎖,不支持行鎖訪問速度快#文件xxx.sdi --存儲表結(jié)構(gòu)信息xxx.MYD --存儲數(shù)據(jù)xxx.MYI --存儲索引#Memory其數(shù)據(jù)表存儲在內(nèi)存中,由于受到硬件問題、或斷點問題的影響,只能將這些表作為臨時表或緩存使用#特點內(nèi)存存放hash索引#文件xxx.sdi

  • 存儲引擎選擇

索引(重點)

  • 索引(index)是幫助MySQL高效獲取數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)(有序)。在數(shù)據(jù)之外,數(shù)據(jù)庫系統(tǒng)還維護著滿足特定查找算法的數(shù)據(jù)結(jié)構(gòu),這些數(shù)據(jù)結(jié)構(gòu)以某種方式引用(指向)數(shù)據(jù),這樣就可以在這些數(shù)據(jù)結(jié)構(gòu)上實現(xiàn)高級查找算法,這種數(shù)據(jù)結(jié)構(gòu)就是索引。

  • 優(yōu)缺點

  • 索引結(jié)構(gòu)

MySQL的索引是在存儲引擎層實現(xiàn)的,不同的存儲引擎有不同的結(jié)構(gòu),主要包含一下幾種:

  • B-Tree(多路平衡查找樹)

二叉樹缺點:順序插入時,會形成一個鏈表,查詢性能大大降低。大數(shù)據(jù)量情況下,層級較深,檢索速度慢

紅黑樹:大數(shù)據(jù)量情況下,層級較深,檢索速度慢

B-Tree:以一顆最大度數(shù)(max-degree)為5階的B-Tree為例(每個節(jié)點最多存儲4個key,5個指針),樹的度數(shù)指的是一個節(jié)點的子節(jié)點個數(shù)

  • B+Tree

? 與B-Tree區(qū)別:所有的數(shù)據(jù)都會出現(xiàn)在葉子節(jié)點;葉子節(jié)點形成一個單向列表。

  • MySQL索引數(shù)據(jù)結(jié)構(gòu)對經(jīng)典B+Tree進行了優(yōu)化,在原B+Tree的基礎上,增加一個指向相鄰葉子節(jié)點的鏈表指針,就形成了帶有順序指針的B+Tree,提高區(qū)間訪問的性能

  • Hash索引

哈希索引就是采用一定的hash算法,將鍵值換算成新的hash值,映射到對應的槽位上,然后存儲在hash 表中。如果兩個(或多個)鍵值,映射到一個相同的槽位上,他們就產(chǎn)生了hash沖突(hash碰撞),可以通過鏈表解決。

特點:hash索引只能用于對等比較(=、in),不支持范圍查詢(between、> 、< ...)無法利用索引完成排序操作;查詢效率高,通常只需要一次檢索就可以了,效率通常高于B+Tree索引

? 在MySQL中,支持hash索引的值Memory引擎,而innoDB中具有自適應hash功能,hash索引是存儲引擎根據(jù)B+Tree索引在指定條件下自動構(gòu)建的。

  • 為什么InnoDB存儲引擎選擇使用B+Tree索引結(jié)構(gòu)?

    1、相對于二叉樹,層級更少,搜索效率高

    2、對于B-Tree,無論是葉子節(jié)點還是非葉子節(jié)點,都會保存數(shù)據(jù),這樣導致一頁存儲的鍵值減小,指針跟著減小,同樣保存大量的數(shù)據(jù),只能增加樹的高度,導致性能降低

    3、相對于Hash索引,B+Tree支持范圍匹配和排序操作

  • 索引分類

在InnoDB引擎中,根據(jù)索引的存儲形式,又可以分為一下兩種:

  • 聚集索引選取規(guī)則

    1、如果存在主鍵,主鍵索引就是聚集索引

    2、如果不存在主鍵,將使用第一個唯一索引作為主鍵索引

    3、如果表沒有之間,或沒有合適的唯一索引,則引擎會自動生成一個rowid作為隱藏的聚集索引

回表查詢:先走二級索引找到對應的主鍵值,再根據(jù)主鍵值走聚集索引找到對應的行數(shù)據(jù)
  • 索引語法
--創(chuàng)建索引CREATE [UNIQUE | FULLTEXT] INDEX index_name ON table_name (index_col_name,...);--查看索引SHOW INDEX FROM table_name;--刪除索引DROP INDEX index_name ON table_name;
  • SQL性能分析
--執(zhí)行頻次MySQL客戶端連接成功后,通過下面指令可以提供服務器狀態(tài)信息。查看當前數(shù)據(jù)庫的INSERT\UPDATE\DELETE\SELECT的訪問頻次: SHOW [SESSION|GLOBAL] STATUS LIKE 'Com_____'; --Com下劃線,幾個表示幾個字符 --慢查詢?nèi)罩?/span>慢查詢?nèi)罩居涗浟怂袌?zhí)行時間超過指定參數(shù)(long_query_time 默認10秒)的所有SQL語句的日志。MySQL的慢查詢?nèi)罩灸J沒有開啟,需要在MySQL的配置文件(/etc/mysql/mysql.conf.d/mysqld.cnf)中配置如下信息,可以使用 vi/vim修改:#開啟MySQL慢查詢?nèi)罩鹃_關(guān)slow_query_log = 1;#設置慢查詢?nèi)罩镜臅r間,超過指定時間,就視為慢查詢,記錄在慢查詢?nèi)罩?/span>long_query_time = 2;#慢查詢?nèi)罩疚募恢?#xff08; /var/log/mysql/mysql-slow.log)slow_query_log_file = /var/log/mysql/mysql-slow.log--查看慢查詢?nèi)罩臼欠耖_啟SHOW VARIABLES LIKE 'slow_query_log';--查看慢查詢?nèi)罩緦崟r內(nèi)容tail -f mysql-slow.log--其他ubuntu常用指令重啟MySQL systemctl restart mysql關(guān)閉MySQL systemctl stop mysql --profile詳情show profiles能夠在做SQL優(yōu)化時幫助我們了解時間都耗費到哪里去了。通過have_profiling參數(shù),能夠看到當前MySQL是否支持profile操作:SELECT @@have_profiling;--默認profiling是關(guān)閉的,可以通過set語句在session(當前會話)/global(全局)級別開啟profiling:SELECT @@profiling; --查看是否開啟SET profiling = 1;--查看每一條SQL指令執(zhí)行耗時情況SHOW profiles;--查看指定query_id的SQL語句各個階段的耗時情況show profile for query query_id;--查看指定query_id的SQL語句CPU的使用情況show profile cpu for query query_id; --explain執(zhí)行計劃EXPLAIN或者DESC命令獲取MySQL如何執(zhí)行SELECT語句的信息,包括在SELECT語句執(zhí)行過程中表如何連接和連接的順序。語法:#直接在SELECT語句之前加上關(guān)鍵字EXPLAIN/DESCEXPLAIN SELECT 字段列表 FROM 表名 WHERE 條件;

--各字段含義id: SELECT查詢的序列號,表示查詢中執(zhí)行SELECT子句或者是操作表的順序(id相同,執(zhí)行順序從上到下;id不同,值越大,越優(yōu)先執(zhí)行);select_type: 表示SELECT的類型,常見的取值有SIMPLE(簡單表,即不使用表連接或者子查詢)、PRIMARY(主查詢,即外層查詢)、UNIONUNION中第二個或者后面的查詢語句)、SUBQUERY(SELECT/WHERE之后包含了子查詢)等;type: 表示連接類型,性能由好到差的連接類型為NULL 、system 、const 、eq_ref、ref、range、indexall;possible_key: 顯示可能應用在這張表上的索引,一個或多個;key: 實際使用的索引,如果為NULL,則沒有使用索引;key_len: 表示索引中引用的字節(jié)數(shù),該值為索引字段最大可能長度,并非實際使用長度,在不損失精確性的前提下,長度越短越好;rows: MySQL認為必須要執(zhí)行查詢的行數(shù),在innoDB引擎的表中,是一個估計值,可能并不總是準確的;filtered: 表示返回結(jié)果的行數(shù)占需讀取行數(shù)的百分比,filtered的值越大越好;Extra: 額外的信息。
  • 索引使用

    • 最左前綴法則:如果索引了多列(聯(lián)合索引),要遵循最左前綴法則。其指的是查詢從索引的最左列開始,并且不跳過索引中的列,與索引時字段的位置沒有關(guān)系。如果跳過某一列,索引將部分失效(后面的字段索引失效),這個與創(chuàng)建索引時的順序有關(guān)。
    • 范圍查詢:聯(lián)合索引中,出現(xiàn)范圍查詢(>,<),范圍查詢右側(cè)的列索引失效。盡量使用(>=,<=)。
    • 索引列運算:不要在索引列上進行運算操作,索引將失效。
    • 字符串不加引號:字符串類型字段使用索引時,如果不加引號,索引將失效。
    • 模糊查詢:如果僅僅是尾部模糊匹配(like ‘xx%’),索引不會失效。如果頭部模糊匹配(like ‘%xx’),索引失效。
    • or 連接條件:用or分割開的條件,如果or前的條件中的列有索引,而后面的列中沒有索引,那么涉及的索引都會失效。即使左側(cè)有索引,右側(cè)有聯(lián)合索引,右側(cè)相當于沒有索引,依然or兩側(cè)索引失效。
    • 數(shù)據(jù)分布影響:如果MySQL評估使用索引比全表掃描更慢,則不使用索引。
  • SQL提示

--SQL提示,是優(yōu)化數(shù)據(jù)庫的一個重要手段,簡單來說,就是在SQL語句中加入一些人為的提示來達到優(yōu)化操作的目的use index: 建議使用某個索引,最終取決于MySQLexplain select 字段列表 from 表名 use index(索引名) where 條件;ignore index: 不要使用某個索引explain select 字段列表 from 表名 ignore index(索引名) where 條件;force index: 必須使用某個索引explain select 字段列表 from 表名 force index(索引名) where 條件;
  • 覆蓋索引
覆蓋索引:在查詢使用了索引,并且需要返回的字段或列,在該索引中都能找到。盡量使用覆蓋索引,減少select *--extra 信息using index condition :查找使用了索引,但需要回表查詢數(shù)據(jù)using where;using index: 查找使用了索引,但是需要的數(shù)據(jù)都在索引列中能找到,所以不需要回表查詢
  • 前綴索引
當字段類型為字符串(varchar,text等)時,有時候需要索引很長的字符串,這會讓索引變得很大,查詢時,浪費大量的磁盤IO,影響查詢效率。此時可以只將字符串的一部分前綴建立索引,這樣大大節(jié)約索引空間,提升效率。--語法:create index idx_name on table_name(column(n));--前綴長度可以根據(jù)索引的選擇性來決定,而選擇性是指不重復的索引值和數(shù)據(jù)表的記錄總數(shù)的壁紙,索引選擇性越高,查詢效率就越高,唯一索引的選擇性為1select count(distinct 字段) /count(*) from 表名;select count(distinct substring(字段,start,length )) /count(*) from 表名;
  • 單列索引與聯(lián)合索引
單列索引:一個索引只包含單個列聯(lián)合索引:一個索引包含多列如果存在多個查詢條件,建議建立聯(lián)合索引,使用時注意最左前綴法則
  • 索引設計原則

SQL優(yōu)化

  • insert優(yōu)化
--批量插入insert into table_name values(),(),().....;--手動提交事務start transaction;insert into ...;...insert into ...;commit;--主鍵順序插入主鍵數(shù)據(jù)順序插入要比亂序效率高--大批量插入數(shù)據(jù)如果一次性插入大量數(shù)據(jù),使用insert性能較低,此時可以使用MySQL數(shù)據(jù)庫提供的load指令進行插入:#客戶端連接服務器時,加上參數(shù) --local-infilemysql --local-infile -u root -p#設置全局參數(shù) local-infile為1,開啟從本地加載文件導入數(shù)據(jù)的開關(guān)select @@local-infile; -- 查看狀態(tài)set local-infile = 1; --開啟#執(zhí)行l(wèi)oad指令將數(shù)據(jù)加載到表結(jié)構(gòu)中load data local infile '文件位置' into table '表名' fields terminated by '數(shù)據(jù)分隔符' lines terminated by '換行符 \n';
  • 主鍵優(yōu)化
--數(shù)據(jù)組織方式InnoDB存儲引擎中,表數(shù)據(jù)都是根據(jù)主鍵順序組織存放的,這種存儲方式的表稱為索引組織表(index organized table,IOT)--頁分裂頁可以為空,也可以存儲一半,也可以存儲100%。每個頁包含2-N行數(shù)據(jù)(如果一行數(shù)據(jù)過大,會行溢出),根據(jù)主鍵排列。至少包含兩行數(shù)據(jù)的原因是,如果只存放一列,而數(shù)據(jù)又是順序組織存放,就形成了鏈表如果主鍵數(shù)據(jù)亂序存放,可能發(fā)生頁分裂現(xiàn)象--頁合并當刪除一行記錄時,實際上記錄并沒有被物理刪除,只是記錄被標記為刪除并且它的空間變得允許被其他記錄聲明使用。當頁中刪除的記錄達到MERGE_THRESHOLD(默認為頁的50%)InnoDB會開始尋找最靠近的頁(前或后)看看是否可以將兩個頁合并以優(yōu)化空間使用。MERGE_THRESHOLD: 合并頁的閾值,可以在創(chuàng)建表或創(chuàng)建索引時指定。--主鍵設計原則滿足業(yè)務需求的情況下,盡量降低主鍵的長度;插入數(shù)據(jù)時,盡量選擇順序插入,選擇使用auto_increment自增主鍵;盡量不要使用uuid做主鍵或者其他自然主鍵,如身份證號;業(yè)務操作時,避免對主鍵修改。
  • order by
--order by 排序Using filesort :通過表的索引或全表掃描,讀取滿足條件的數(shù)據(jù)行,然后在緩沖區(qū)sort buffer中完成排序操作,所有不是通過索引直接返回排序結(jié)果的排序都叫filesort.Using index: 通過有序索引順序掃描直接返回有序數(shù)據(jù),這種情況為using index,不需要額外排序,效率高--優(yōu)化設置根據(jù)排序字段建立合適的索引,多字段排序時,可建立聯(lián)合索引,遵循最左前綴法則;盡量使用覆蓋索引;多字段排序,一個升序一個降序,此時需要注意聯(lián)合索引在創(chuàng)建時的規(guī)則(asc / desc);如果不可避免出現(xiàn)filesort,大數(shù)據(jù)量排序時,可以適當增大排序緩沖區(qū)大小sort_buffer_size(默認256k)
  • group by優(yōu)化
在分組操作時,可以通過索引來提高效率;分組操作時,索引的使用也要滿足最左前綴法則。
  • limit優(yōu)化
一般分頁查詢時,通過創(chuàng)建 覆蓋索引 能夠比較好提高性能,可以通過覆蓋索引加子查詢形式進行優(yōu)化
  • count優(yōu)化
myisam引擎把一個表的總數(shù)存在了磁盤上,因此執(zhí)行count(*)的時候會直接返回這個數(shù),效率較高innoDB引擎執(zhí)行count(*)時,需要把數(shù)據(jù)一行一行地從引擎里面讀出來,然后累積計數(shù)優(yōu)化思路:自己計數(shù)

  • update優(yōu)化
InnoDB的行鎖是針對索引加的鎖,不是針對記錄加的鎖,并且該索引不能失效,否則會從行鎖升級為表鎖在使用update修改數(shù)據(jù)時,盡量使用索引作為條件,防止在事務并發(fā)操作時,行鎖升級為表鎖,影響運行效率

視圖

  • 定義:視圖(View)是一種虛擬存在的表。視圖中的數(shù)據(jù)并不在數(shù)據(jù)庫中實際存在,行和列數(shù)據(jù)來自定義視圖的查詢中使用的表,并且是在使用視圖時動態(tài)生成的。

  • 語法

--創(chuàng)建CREATE [OR REPLACE] VIEW 視圖名稱[(列名列表)] AS SELECT語句 [WITH [CASCADED | LOCAL] CHECK OPTION];--查詢查看創(chuàng)建視圖語句:SHOW CREATE VIEW 視圖名稱;查看視圖數(shù)據(jù): SELECT * FROM 視圖名稱 ..;--修改1) CREATE [OR REPLACE] VIEW 視圖名稱[(列名列表)] AS SELECT語句 [WITH [CASCADED | LOCAL] CHECK OPTION];2) ALTER VIEW 視圖名稱[(列名列表)] AS SELECT語句 [WITH [CASCADED | LOCAL] CHECK OPTION];--刪除DROP VIEW [IF EXISTS] 視圖名稱,...;
  • 視圖檢查選項
--當使用WITH CHECK OPTION子句創(chuàng)建視圖時,MySQL會通過視圖檢查正在更改的每個行,例如插入、更新、刪除,以使其符合視圖的定義。MySQL允許基于另一個視圖創(chuàng)建視圖,他還會檢查依賴視圖中的規(guī)則以保持一致性。為例確定檢查范圍,MySQL提供了兩個選項:CASCADED和LOCAL,默認值為CASCADED(級聯(lián))。--CASCADED:--基于視圖(未加檢查條件)創(chuàng)建視圖時沒有加檢查選項,在增刪改時不會檢查自身創(chuàng)建條件,但是會判斷視圖的條件,如果滿足兩個視圖的條件則結(jié)果出現(xiàn)在視圖中,反之不然。如果創(chuàng)建的視圖加上了檢查選項,不僅會檢查自身條件,還會檢查基于的視圖條件,有一個視圖不滿足條件都會報錯。--LOCAL:--基于視圖(未加檢查條件)創(chuàng)建視圖時沒有加檢查選項,在增刪改時不會檢查自身創(chuàng)建條件,但是會判斷視圖的條件,如果滿足兩個視圖的條件則結(jié)果出現(xiàn)在視圖中,反之不然。如果創(chuàng)建的視圖加上了檢查選項,只會檢查自身條件,不會檢查基于的視圖條件,不滿足創(chuàng)建視圖的條件才會報錯。
  • 視圖的更新
--要使視圖可更新,視圖中的行與基表中的行之間存在一對一關(guān)系。如果視圖包含一下任何選項,則該視圖不可更新:1、聚合函數(shù)或窗口函數(shù)(SUM() MIN() MAX() COUNT()2DISTINCT3GROUP BY4HAVING5UNION 或者 UNION ALL--視圖作用--簡單視圖不僅可以簡化用戶對數(shù)據(jù)的理解,也可以簡化他們的操作。那些被經(jīng)常使用的查詢可以被定義為視圖,從而使得用戶不必為以后的操作指定全部的條件。--安全數(shù)據(jù)庫可以授權(quán),但不能授權(quán)到數(shù)據(jù)庫特定的行或特定的列上。通過視圖用戶只能查詢和修改他們所能見到的數(shù)據(jù)。--數(shù)據(jù)獨立視圖可以幫助用戶屏蔽真實表結(jié)構(gòu)變化帶來的影響。

存儲過程

  • 定義

    存儲過程是事先經(jīng)過編譯并存儲在數(shù)據(jù)庫中的一段SQL語句的集合,調(diào)用存儲過程可以簡化應用開發(fā)人員的很多工作,減少數(shù)據(jù)在數(shù)據(jù)庫和應用服務器之間的傳輸,對于提高數(shù)據(jù)處理的效率是有利的。

    存儲過程思想就是數(shù)據(jù)庫SQL語言層面的代碼封裝與重用

  • 特點

    1、封裝、復用

    2、可以接受參數(shù),也可以返回數(shù)據(jù)

    3、減少網(wǎng)絡交互,提升效率

  • 語法

-- 創(chuàng)建CREATE PROCEDURE 存儲過程名([參數(shù)列表])BEGIN-- SQL語句END;-- 調(diào)用CALL 名稱([參數(shù)]);-- 查看-- 查詢指定數(shù)據(jù)庫的存儲過程及狀態(tài)信息SELECT * FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_SCHEMA = '數(shù)據(jù)庫名'; -- 查詢某個存儲過程的定義SHOW CREATE PROCEDURE 存儲過程名稱;-- 刪除DROP PROCEDURE [IF EXISTS] 存儲過程名稱;-- 注意在命令行中,執(zhí)行存儲過程的SQL時,需要通過關(guān)鍵字 delimiter 指定SQL語句的結(jié)束符
  • 變量
-- 系統(tǒng)變量系統(tǒng)變量時MySQL服務器提供,不是用戶定義的,屬于服務器層面。分為全局變量(GLOBAL)、會話變量(SESSION)-- 查看系統(tǒng)變量SHOW [SESSION | GLOBAL] VARIABLES; -- 查看所有系統(tǒng)變量SHOW [SESSION | GLOBAL] VARIABLES LIKE '...'; -- 可以通過LIKE模糊匹配方式查找變量SHOW @@[SESSION | GLOBAL] 系統(tǒng)變量名; -- 查看指定變量的值-- 設置系統(tǒng)變量SET [SESSION | GLOBAL ] 系統(tǒng)變量名 =;SHOW @@[SESSION | GLOBAL] 系統(tǒng)變量名 =;-- 注意如果沒有指定 SESSION/ GLOBAL,默認為 SESSION;MySQL服務器重新啟動之后,所設置的全局參數(shù)會失效,如果想不失效,配置 my.cnf-- 用戶定義變量用戶定義變量是根據(jù)用戶需要自己定義的變量,用戶變量不用提前聲明,在用的時候直接用 "@變量名"使用。其作用域為當前連接會話-- 賦值SET @var_name = value, [@var_name = value],...;SET @var_name := value, [@var_name = value],...;SELECT @var_name := value, [@var_name = value],...;SELECT 字段名/聚合函數(shù) INTO @var_name FROM 表名;-- 使用SELECT @var_name;-- 注意用戶自定義變量無需進行聲明或初始化,只不過獲取到的值為NULL-- 局部變量局部變量是根據(jù)需要定義在局部生效的變量,訪問之前,需要 DECLARE 聲明。可用作存儲過程內(nèi)的局部變量和輸入?yún)?shù),局部變量的范圍是在其內(nèi)部聲明的 BEGIN ... END-- 聲明DECLARE 變量名 變量類型 [DEFAULT value];-- 變量類型就是數(shù)據(jù)庫的字段類型-- 賦值SET 變量名 =;SET 變量名 :=;SELECT 字段名 INTO 變量名 FROM 表名 ...;
  • 參數(shù)
-- 參數(shù)類型IN :該類參數(shù)作為輸入,也就是需要調(diào)用時傳入值 ,默認OUT :該類參數(shù)作為輸出,也就是需要調(diào)用時傳出值,需要定義用戶變量接收INOUT :既可以作為輸入?yún)?shù),又可以作為輸出參數(shù)-- 用法CREATE PROCEDURE 存儲過程名([IN / OUT / INOUT 參數(shù)名 參數(shù)類型])BEGINSQLEND;
  • 流程控制
-- ifIF 條件1 THEN...ELSEIF 條件2 THEN...ELSE...END IF;-- case-- 1CASE case_valueWHEN when_value1 THEN 語句[WHEN when_value1 THEN 語句]...[ELSE 語句]END CASE; -- 2CASEWHEN 條件表達式1 THEN 語句[WHEN 條件表達式2 THEN 語句]...[ELSE 語句]END CASE; -- whileWHILE 條件 DOSQL邏輯END WHILE; -- repeat 循環(huán)#先執(zhí)行一次SQL語句,然后判定條件是否滿足,如果滿足則退出循環(huán),不滿足繼續(xù)下一次循環(huán)REPEAT SQL邏輯UNTIL 條件END REPEAT; -- loop#LOOP實現(xiàn)簡單循環(huán),如果不在SQL邏輯中增加退出循環(huán)的條件,可以用其來實現(xiàn)簡單的死循環(huán)。LOOP可以配合兩條語句使用:LEAVE -- 配合循環(huán)使用,退出循環(huán)ITERATE -- 必須用在循環(huán)中,作用是跳過當前循環(huán)剩下的語句,直接進入下一次循環(huán)[begin_label:] LOOPSQL邏輯END LOOP[end_label];LEAVE label; -- 退出指定標記的循環(huán)體ITERATE label; -- 直接進入下次循環(huán)
  • 游標
-- 定義游標(CURSOR)是用來存儲查詢結(jié)果集的數(shù)據(jù)類型,在存儲過程和函數(shù)中可以使用游標對結(jié)果集進行循環(huán)處理。游標的使用包括游標的聲明、OPENFETCH、和CLOSE-- 聲明游標DECLARE 游標名稱 CURSOR FOR 查詢語句;-- 打開游標OPEN 游標名稱;-- 獲取游標記錄; 定義變量,創(chuàng)建表格,循環(huán)獲取游標數(shù)據(jù),并給表格插入數(shù)據(jù)FETCH 游標名稱 INTO 變量 [, 變量]..;-- 關(guān)閉游標CLOSE 游標名稱;-- 注意變量的聲明要在游標聲明之前
  • 條件處理程序
-- 條件處理程序(handler)可以用來定義在流程控制結(jié)構(gòu)執(zhí)行過程中遇到問題時行營的處理步驟。DECLARE handler_action HANDLER FOR condition_value [,condition_value]... 邏輯語句;-- handler_actionCONTINUE :繼續(xù)執(zhí)行當前程序EXIT :終止執(zhí)行當前程序-- condition_valueSQLSTATE sqlstate_value :狀態(tài)碼 如‘02000’SQLWARNING :所有以01開頭的 SQLSTATE代碼的簡寫NOT FOUND :所有以02開頭的 SQLSTATE代碼的簡寫SQLEXCEPTION :所有沒有被 SQLWARNING和 NOT FOUND捕獲的 SQLSTATE代碼的簡寫
  • 存儲函數(shù)
-- 存儲函數(shù)是有返回值的存儲過程,存儲函數(shù)的參數(shù)只能時IN類型。CREATE FUNCTION 函數(shù)名([參數(shù)列表])RETURNS type(參數(shù)列表的數(shù)據(jù)類型) [characteristic ...]BEGIN--SQLRETURN ...;END;-- characteristicDETERMINISTIC :相同的輸入?yún)?shù)總是產(chǎn)生相同的結(jié)果NO SQL :不包含SQL語句READS SQL DATA :包含讀取數(shù)據(jù)的語句,但不包含寫入數(shù)據(jù)的語句
  • 觸發(fā)器
-- 觸發(fā)器是與表有關(guān)的數(shù)據(jù)庫對象,指在insert/update/delete之前或之后,觸發(fā)并執(zhí)行觸發(fā)器中定義的SQL語句集合。觸發(fā)器的這種特性可以協(xié)助應用在數(shù)據(jù)庫端保持數(shù)據(jù)的完整性,日志記錄,數(shù)據(jù)校驗等操作。-- 使用別名OLD和NEW來引用觸發(fā)器中發(fā)生的變化的記錄內(nèi)容,這與其他的數(shù)據(jù)庫是相似的。現(xiàn)在觸發(fā)器僅支持行級觸發(fā),不支持語句級觸發(fā)-- 保證數(shù)據(jù)完整性、日志記錄、數(shù)據(jù)校驗-- 觸發(fā)器類型INSERT型觸發(fā)器:NEW表示將要或者已經(jīng)新增的數(shù)據(jù)UPDATE型觸發(fā)器:OLD表示修改之前的數(shù)據(jù),NEW表示將要或已經(jīng)修改后的數(shù)據(jù)DELETE型觸發(fā)器:OLD表示將要或者已經(jīng)刪除的數(shù)據(jù)-- 語法-- 創(chuàng)建CREATE TRIGGER trigger_nameBEFORE/ AFTER INSERT/ UPDATE/ DELETE ON table_name FOR EACH ROW -- 行級觸發(fā)器BEGINtrigger_statement;END;-- 查看SHOW TRIGGER;-- 刪除DROP TRIGGER [數(shù)據(jù)庫名.]trigger_name;-- 沒有指定數(shù)據(jù)庫,默認為當前數(shù)據(jù)庫

鎖是計算機協(xié)調(diào)多個進程或線程并發(fā)訪問某一資源的資質(zhì)。

  • 全局鎖
-- 全局鎖就是對整個數(shù)據(jù)庫實例加鎖,加鎖后整個實例就處于只讀狀態(tài),后續(xù)的DML的寫語句,DDL語句,已經(jīng)更新操作的事務提交語句都將被阻塞。-- 典型場景是做全庫的邏輯備份,對所有的表進行鎖定,從而獲取一致性視圖,保證數(shù)據(jù)的完整性flush tables with read lock; -- 加全局鎖mysqldump -h遠程ip -uroot -p密碼 數(shù)據(jù)庫 > 備份文件; -- 數(shù)據(jù)備份,mysqldump是MySQL的工具,不是SQL語句unlock tables; -- 釋放全局鎖-- 特點1、如果在主庫上備份,那么在備份期間都不能執(zhí)行更新,業(yè)務基本上停止。2、如果在從庫上備份,那么在備份期間從庫不能執(zhí)行主庫同步過來的二進制日志,會導致主從延遲。在InnoDB引擎中,可以在備份時加 --single-transaction參數(shù)完成不加鎖的一致性數(shù)據(jù)備份mysqldump --single--transaction -h遠程ip -uroot -p密碼 數(shù)據(jù)庫 > 備份文件;
  • 表級鎖
-- 表級鎖,每次操作鎖住整張表。鎖定粒度大,發(fā)生鎖沖突的概率最高,并發(fā)度最低。應用在myisam 、InnoDB、BDB引擎中。-- 表鎖 分為兩類 # 表共享讀鎖(read lock) lock tables 表名... read; -- 加鎖unlock tables; /斷開客戶端連接 -- 釋放鎖# 表獨占寫鎖(write lock)lock tables 表名... write; -- 加鎖unlock tables; /斷開客戶端連接 -- 釋放鎖-- 注意讀鎖不會組測其他客戶端的讀操作,但是會阻塞寫。寫鎖會阻塞其他客戶端的讀操作,又會阻塞其他客戶端的寫操作。-- 元數(shù)據(jù)鎖(meta data lock ,MDL)MDL加鎖過程是系統(tǒng)自動控制,無序顯式使用,在訪問一張表的時候會自動加上。MDL鎖主要作用是維護表元數(shù)據(jù)一致性,在表上有活動事務時候,不可以對元數(shù)據(jù)進行寫操作。為了避免DML與DDL沖突,保證讀寫的正確性。在MySQL5.5中引入MDL,當對一張表進行增刪改查時,加MDL讀鎖(共享);對表結(jié)構(gòu)進行變更操作時,加MDL寫鎖(排他)。-- 查看元數(shù)據(jù)鎖select object_type,object_schema,object_name,lock_type,lock_duration from perfromance_schema.metadata_locks;

-- 意向鎖為了避免DML在執(zhí)行時,加的行鎖與表鎖的沖突,在innoDB中引入了意向鎖,使得表鎖不用檢查每行數(shù)據(jù)是否加鎖,使用意向鎖來減少表鎖的檢查# 意向共享鎖(IS):由語句select...lock in share mode添加與表鎖共享鎖兼容,與表鎖排他鎖互斥# 意向排他鎖(IX):由insert、update、delete、select..for update添加與表鎖均互斥,意向鎖之間不互斥-- 查看意向鎖語句select object_type,object_schema,object_name,lock_type,lock_duration from perfromance_schema.data_locks;
  • 行級鎖
-- 行級鎖,每次操作鎖住對應的行數(shù)據(jù)。鎖定粒度最小,發(fā)生鎖沖突的概率最低,并發(fā)度最高,應用在innoDB-- InnoDB的數(shù)據(jù)是基于索引組織的,行鎖是通過對索引上的索引項加鎖來實現(xiàn)的,而不是對記錄加鎖。對于行級鎖,主要分三類:1、行鎖(record lock):鎖定單個行記錄,防止其他事務對此行進行updatedelete。在RC、RR隔離級別下都支持2、間隙鎖(gap lock):鎖定索引記錄間隙(不含該記錄),確保索引記錄間隙不變,防止其他事務在該間隙insert,產(chǎn)生幻讀。在RR隔離級別下都支持3、臨鍵鎖(next-key lock): 行鎖與間隙鎖的組合,同時鎖住數(shù)據(jù),并鎖住數(shù)據(jù)前面的間隙。在RR隔離級別下都支持-- 行鎖1、共享鎖(S):允許一個事務去讀一行,阻止其他事務獲得相同數(shù)據(jù)集的排他鎖。2、排他鎖(X):允許獲取其他排他鎖的事務更新數(shù)據(jù),阻止其他事務獲得相同數(shù)據(jù)集的共享鎖和排他鎖-- 注意默認情況下,InnoDBREPEATABLE READ事務隔離級別運行,InnoDB使用NEXT_KEY鎖進行搜索和索引掃描,以防止幻讀。1、針對唯一索引進行檢索,對已存在的記錄進行等值匹配時,將會自動優(yōu)化為行鎖2InnoDB的行鎖是針對索引加的鎖,不通過索引條件檢索數(shù)據(jù),那么引擎將對表中的所有記錄加鎖,此時就會升級為表鎖-- 查看行鎖語句select object_type,object_schema,object_name,lock_type,lock_duration from perfromance_schema.data_locks;

-- 間隙鎖 /臨鍵鎖1、索引上的等值查詢(唯一索引),給不存的記錄加鎖時,優(yōu)化為間隙鎖。2、索引上的等值查詢(普通索引),向右遍歷時最后一個值不滿足查詢需求時,臨鍵鎖退化為間隙鎖3、索引上的范圍查詢(唯一索引)--會訪問到不滿足條件的第一個值為止-- 注意間隙鎖唯一目的是防止其他事務插入間隙。間隙鎖可以共存,一個事務采用的間隙鎖不會組織另一個事務在同一間隙上采用間隙鎖

InnoDB引擎

邏輯存儲結(jié)構(gòu)

  • 表空間(ibd文件),一個MySQL實例可以對應多個表空間,用于存儲記錄、索引等數(shù)據(jù)。
  • 段,分數(shù)據(jù)段(leaf node segment)、索引段(non-leaf node segment)、回滾段(rollback segment)、InnoDB是索引組織表,數(shù)據(jù)段就是B+樹的葉子節(jié)點,索引段即為B+樹的非葉子節(jié)點。段用來管理多個區(qū)。
  • 區(qū),表空間的單元結(jié)構(gòu),每個區(qū)的大小為1M。默認情況下,存儲引擎頁大小為16K,一個區(qū)中有64個連續(xù)的頁。
  • 頁,存儲引擎磁盤管理的最小單元,每個頁的大小默認為16K。為保證頁的連續(xù)性,存儲引擎每次從磁盤申請4-5個區(qū)。
  • 行,存儲引擎數(shù)據(jù)是按行進行存放的。

架構(gòu)

內(nèi)存架構(gòu)
  • Buffer Pool :緩沖池是主內(nèi)存中的一個區(qū)域,里面可以緩存磁盤上經(jīng)常操作的真實數(shù)據(jù),在執(zhí)行增刪改查操作時,先操作緩沖池中的數(shù)據(jù)(若沒有數(shù)據(jù),從磁盤加載并緩存),然后再以一定頻率刷新到磁盤,從而減少磁盤iIO,加快處理速度。

    緩沖池以頁為單位,底層采用鏈表數(shù)據(jù)結(jié)構(gòu)管理頁。根據(jù)狀態(tài)頁分為三種類型:

    • free page: 空閑頁,未被使用
    • liean page: 被使用的頁,數(shù)據(jù)沒有被修改過
    • dirty page: 臟頁,被使用,數(shù)據(jù)被修改過,頁中數(shù)據(jù)與磁盤的數(shù)據(jù)產(chǎn)生不一致
  • Change Buffer :更改緩沖區(qū)(針對非唯一二級索引頁),在執(zhí)行DML語句時,如果這些數(shù)據(jù)頁沒有在緩沖池中,不會直接操作磁盤,而會將數(shù)據(jù)變更存在更改緩沖區(qū)中,在未來數(shù)據(jù)被讀取時,再將數(shù)據(jù)合并恢復到緩沖池中,最后將合并后的數(shù)據(jù)刷新到磁盤中。

    • 緩沖區(qū)的意義

      與聚集索引不同,二級索引通常時非唯一的,并且以相對隨機的順序插入二級索引。同樣,刪除和更新可能會影響索引樹種不相鄰的二級索引頁,如果每一次操作磁盤,會造成大量的磁盤IO。有個緩沖區(qū)之后,可以在緩沖池合并處理,減少磁盤IO。

  • Adaptive Hash Index :自適應哈希索引,用于優(yōu)化對緩沖池數(shù)據(jù)的查詢。存儲引擎會監(jiān)控表上各索引頁的查詢,如果觀察到哈希索引可以提升速度,則建立哈希索引。無需干涉,系統(tǒng)根據(jù)情況自動建立

    參數(shù): adaptive_hash_index – 查看是否開啟

  • Log Buffer :日志緩沖區(qū),用來保存要寫入磁盤中的日志數(shù)據(jù)(redo log、undo log),默認大小為16MB,日志緩沖區(qū)的日志會定期刷新到磁盤。如果需要更新、插入或刪除許多行的事務,增加日志緩沖區(qū)的大小可以節(jié)省磁盤IO。

innodb_log_buffer_size -- 緩沖區(qū)大小innodb_flush_log_at_trx_commit -- 日志刷新到磁盤時機 (0 1 2)-- 0 日志再每次事務提交時寫入并刷新到磁盤-- 1 每秒將日志寫入并刷新到磁盤一次-- 2 日志再每次提交事務后寫入,并每秒刷新到磁盤一次
磁盤架構(gòu)
  • System Tablespace :系統(tǒng)表空間時更改緩沖區(qū)的存儲區(qū)域。如果表是在系統(tǒng)表空間而不是每個表文件或通用表空間中創(chuàng)建的,它也可能包含表和索引數(shù)據(jù)。
innodb_data_file_path -- 表空間文件位置
  • File-Per-Table Tablespace :每個表的文件表空間包含單個存儲引擎表的數(shù)據(jù)和索引,并存儲在文件系統(tǒng)上的單個數(shù)據(jù)文件中。
innodb_file_per_table -- 開關(guān)
  • General Tablespace :通用表空間,需要通過用戶自己創(chuàng)建,在創(chuàng)建表時,可以指定該表空間。
CREATE TABLESPACE space_name ADD DATAFILE 'file_name.ibd' ENGINE = InnoDB;-- 創(chuàng)建表時使用CREATE TABLE ...() TABLESPACE space_name;
  • Undo Tablespace :撤銷表空間,MySQL實例在初始化時會自動創(chuàng)建兩個默認的undo表空間,初始大小16M,用于存儲undo log 日志。

  • Temporaty Tablespace :存儲引擎會話臨時表空間和全局臨時表空間,存儲用戶創(chuàng)建的臨時表等數(shù)據(jù)。

  • Doublewrite Buffer Files :雙寫緩沖區(qū),存儲引擎將數(shù)據(jù)頁從Buffer Pool刷新到磁盤前,先將數(shù)據(jù)頁寫入雙寫緩沖區(qū)文件中,便于系統(tǒng)異常恢復數(shù)據(jù)。 xxx.dblwr文件

  • Redo Log :重做日志,是用來實現(xiàn)事務的持久性。該日志文件由兩部分組成:重做日志緩沖以及重做日志文件,前者是在內(nèi)存中,后者在磁盤中。當事務提交之后會把所有修改信息都會存放到該日志中,用于在刷新臟頁到磁盤,發(fā)生錯誤時,進行數(shù)據(jù)恢復。

后臺線程
  • Master Thread :核心后臺線程,負責調(diào)度其他線程,還負責將緩沖池中的數(shù)據(jù)異步刷新到磁盤中,保持數(shù)據(jù)一致性,還包括臟頁的刷新、合并插入緩存、undo頁回收。

  • IO Thread :存儲引擎中使用了大量AIO來處理IO請求,極大化提高數(shù)據(jù)庫性能,該線程主要負責IO請求的回調(diào)。

Read thread -- 默認4個 ,負責讀操作Write thread -- 默認4個,負責寫操作 Log thread -- 默認1個,負責將日志緩沖區(qū)刷新到磁盤Insert buffer thread -- 默認1個,負責將寫緩沖區(qū)內(nèi)容刷新到磁盤
  • Purge Thread :主要用于回收事務已經(jīng)提交的undo log,在事務提交之后,undo log可能不用了,就用該線程回收。

  • Page Cleaner Thread:協(xié)助核心后臺線程刷新臟頁到磁盤的線程,它可以減輕Master Thread的工作壓力,減少阻塞。

事務原理

  • redo log 和undo log
-- 保證了數(shù)據(jù)的持久性、一致性和原子性 Redo Log :重做日志,是用來實現(xiàn)事務的持久性。該日志文件由兩部分組成:重做日志緩沖以及重做日志文件,前者是在內(nèi)存中,后者在磁盤中。當事務提交之后會把所有修改信息都會存放到該日志中,用于在刷新臟頁到磁盤,發(fā)生錯誤時,進行數(shù)據(jù)恢復。 Undo log :回滾日志,用于記錄數(shù)據(jù)被修復前的信息,作用包含兩個:提供回滾和MVCC(多版本并發(fā)控制) undo log與redo log記錄物理日志不一樣,它是邏輯日志。可以認為當delete一條記錄時,undo log中會記錄一條對應的insert記錄,反之亦然,當update一條記錄時,它記錄一條對應相反的update記錄。當執(zhí)行roolback時,就可以從undo log中的邏輯記錄讀取到相應的內(nèi)容并進行回滾。 undo log銷毀:在事務執(zhí)行時發(fā)生,事務提交時,并不會立即刪除undo log,因為這些日志可能用于MVCC undo log存儲:undo log采用段的方式進行管理和記錄,存放在前面介紹的rollback segment回滾段中,包含1024個undo log segment。 -- 鎖和MVCC保證了隔離性

MVCC

  • 當前讀

讀取的時記錄的最新版本,讀取時還要保證其他并發(fā)事務不能修改當前記錄,會對讀取的記錄進行加鎖。如:

select...lock in share mode(共享鎖)select...for updateupdateinsertdelete(排他鎖)都是一種當前讀。
  • 快照讀

簡單的select(不加鎖)就是快照讀,讀取的時記錄數(shù)據(jù)的可見版本,有可能是歷史數(shù)據(jù),不加鎖,是非阻塞讀。

Read Committed : 每次select,都生成一個快照讀。 Repeatable Read : 開啟事務后第一個select語句才是快照讀的地方。 Serializable : 快照讀會退化為當前讀
  • MVCC

全稱Multi-Version Concurrency Control,多版本并發(fā)控制。指維護一個數(shù)據(jù)的多個版本,使得讀寫操作沒有沖突,快照讀為MySQL實現(xiàn)MVCC提供了一個非阻塞讀功能。MVCC的具體實現(xiàn),還需要依賴與數(shù)據(jù)庫記錄的三個隱式字段、undo log、readView。

  • 隱藏字段
DB_TRX_ID :最近修改事務ID,記錄插入這條記錄或最后一次修改該記錄的事務ID DB_ROLL_PTR :回滾指針,指向這條記錄的上一個版本,用于配合undo log,指向上一個版本 DB_ROW_ID : 隱藏主鍵,如果表結(jié)構(gòu)沒有指定主鍵,將會生成該隱藏字段
  • undo log
insert時候,產(chǎn)生的日志旨在回滾時需要,在事務提交后,可被立即刪除。 當 updatedelete時候,產(chǎn)生的 undo log日志不僅在回滾時需要,在快照讀時也需要,不會被立即刪除 -- undo log版本連 不同事務或相同事務對同一條記錄進行修改,會導致記錄的日志生成一條記錄版本鏈表,鏈表頭部是最近的舊記錄,鏈表尾部是最早的舊記錄
  • readView
-- 讀視圖是快照讀SQL執(zhí)行時MVCC提取數(shù)據(jù)的依據(jù),記錄并維護系統(tǒng)當前活躍的事務(未提交的)id。 m_ids: 當前活躍的事務ID集合 min_trx_id: 最小活躍事務 max_trx_id: 預分配事務ID,當前最大事務ID+1(因為事務ID時自增的) creator_trx_id: 讀視圖創(chuàng)建者的事務ID

-- 不同隔離級別,生成ReadView的時機不同: READ COMMITTED : 在事務中每一次執(zhí)行快照讀時生成讀視圖 REPEATABLE READ :僅在事務中第一次執(zhí)行快照讀時生成讀視圖,后續(xù)復用該讀視圖

總結(jié)

以上是生活随笔為你收集整理的MySQL学习笔记-从基础到进阶的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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

日韩高清一 | 97综合视频 | 中文字幕高清 | 国产视| 91重口视频| 国产欧美日韩一区 | 精品在线观看视频 | 国产一区二区免费在线观看 | 亚洲码国产日韩欧美高潮在线播放 | 日韩亚洲国产中文字幕 | 日韩专区在线观看 | 色99之美女主播在线视频 | 日韩亚洲精品电影 | 日本成人免费在线观看 | 国产成人精品999 | 午夜精品一区二区三区免费 | 天天操狠狠操网站 | 久久国产亚洲精品 | 精品国产1区二区 | www好男人| 九九热在线视频 | 国产精品99久久久久久大便 | 亚洲欧洲在线视频 | 在线观看亚洲 | av黄色免费在线观看 | 香蕉在线视频观看 | 久 久久影院 | 亚洲a成人v | 国产高清在线免费观看 | 日韩欧美高清免费 | 国产一级片视频 | 美州a亚洲一视本频v色道 | 精品亚洲男同gayvideo网站 | www.夜色321.com | 最新色视频 | 五月婷婷网站 | 国产精品久久电影网 | 欧美日韩18| 亚洲精品乱码久久久久久久久久 | 国产精品免费看久久久8精臀av | 黄色三级av| 五月丁色| 天天操天天射天天添 | 欧美污污网站 | 很黄很污的视频网站 | 国产一区二区手机在线观看 | 国产香蕉在线 | 午夜精品久久久久久久99水蜜桃 | 精品亚洲免费 | 国产成人高清 | 国产字幕在线播放 | 精品美女国产在线 | 久久久久久久久久久网 | 91亚洲精 | 93久久精品日日躁夜夜躁欧美 | 91精品成人 | 最新av电影网址 | 欧美一级高清片 | 在线观看亚洲专区 | 国产美女视频网站 | 欧美日韩国产精品一区二区三区 | 亚洲涩涩色 | 91大神电影| 亚洲精品中文在线资源 | 91在线看黄 | 国产福利精品一区二区 | 99热这里是精品 | 国产精品不卡av | 国产一区视频在线观看免费 | 婷婷精品国产一区二区三区日韩 | 中文字幕在线免费观看 | av成人免费在线观看 | 国产亚洲婷婷免费 | 亚洲午夜久久久综合37日本 | 黄网站app在线观看免费视频 | 欧美在线观看视频一区二区 | 99麻豆视频 | 免费看国产一级片 | 国产精品视频99 | 免费在线黄 | 成人播放器 | 日韩精品免费在线观看视频 | 欧美大码xxxx | 国产99久久久国产精品 | 国产精品正在播放 | 日韩理论片在线观看 | 色是在线视频 | 亚洲国产免费看 | 色综合色综合久久综合频道88 | 国产精品久久久久久久久费观看 | 六月丁香色婷婷 | 欧美黄色成人 | 国产色在线视频 | 久久久久婷 | 97电影院网 | 99热精品在线 | 日本久久成人中文字幕电影 | 亚洲高清在线观看视频 | 在线欧美日韩 | 在线黄色免费av | 欧美精品久久久久久久久免 | 人人玩人人添人人澡超碰 | 精品在线播放 | 免费日韩一区 | 久久综合中文色婷婷 | 国产成人三级一区二区在线观看一 | www.av小说| 成人影片在线免费观看 | 六月婷色 | 久久艹国产 | 亚洲高清国产视频 | 91人网站 | 91丨九色丨蝌蚪丨对白 | 91在线公开视频 | 91一区啪爱嗯打偷拍欧美 | 日韩二区精品 | 国产在线1区 | 国产精品一区二区三区观看 | 91精品国自产在线观看 | 国色天香在线 | 色婷av| 亚洲成人黄色网址 | 中文字幕一区二区三区四区视频 | 免费精品在线 | 在线影院 国内精品 | 亚洲天堂网在线播放 | 久草线| 午夜色站 | 91一区啪爱嗯打偷拍欧美 | 狠狠干婷婷色 | 国产精品久久久久久久久久久免费 | 国产破处精品 | 日批视频在线观看免费 | 午夜久久久精品 | 精品国产电影一区 | 国产最新91 | 国产高清在线不卡 | 国产999精品久久久久久绿帽 | 日韩精品免费在线 | 亚洲欧美日韩国产一区二区三区 | 在线免费观看麻豆视频 | 亚洲 综合 国产 精品 | 91麻豆看国产在线紧急地址 | 四虎国产精品免费观看视频优播 | 麻豆系列在线观看 | 激情五月激情综合网 | 亚洲成人资源在线观看 | 亚洲资源在线观看 | 亚洲欧美国产精品 | 日本在线观看中文字幕 | av免费电影网站 | 丁香花在线视频观看免费 | 成人不用播放器 | 亚洲成av人影片在线观看 | 成人免费亚洲 | 日日夜夜噜噜噜 | 一区二区视频在线免费观看 | 婷婷综合在线 | 国产伦理久久精品久久久久_ | 九九久久久久99精品 | 亚洲国产理论片 | 国产裸体视频网站 | 天天综合网 天天综合色 | 亚洲国产大片 | 亚洲欧洲国产视频 | 久艹视频在线免费观看 | 激情婷婷综合 | 日韩女同av | 久久好看| 日日干av| 俺要去色综合狠狠 | 婷婷色吧 | 一级成人在线 | 99这里精品| 日韩精品一区二区三区丰满 | 四虎成人免费观看 | 综合五月 | 欧美日韩裸体免费视频 | 1024手机在线看 | 欧美最猛性xxxxx(亚洲精品) | 亚洲视频,欧洲视频 | 97视频免费在线 | 色网站免费在线看 | 成人观看| 成人啊 v | 精品亚洲在线 | 亚洲视频99| 久久五月天婷婷 | 9在线观看免费高清完整版 玖玖爱免费视频 | 久久精品2 | 午夜av影院 | 日韩在线观看不卡 | 91麻豆精品国产91 | 特级xxxxx欧美 | 激情综合中文娱乐网 | 日韩精品亚洲专区在线观看 | 久久系列 | 狠狠狠色狠狠色综合 | 久久久久观看 | 99久久久国产精品 | 久久久久在线视频 | 狠狠干中文字幕 | www.国产视频 | 久久爽久久爽久久av东京爽 | 808电影免费观看三年 | 美女黄濒 | 午夜丁香网| 午夜黄网 | 色噜噜狠狠狠狠色综合 | 亚洲黑丝少妇 | 久久久首页 | 久久久www成人免费毛片 | 亚洲 欧美 国产 va在线影院 | 日韩城人在线 | 中文字幕免费成人 | 在线免费观看视频 | 狠狠的干 | www.色就是色 | 色小说av | 久久er99热精品一区二区 | 超碰在线成人 | 综合激情 | 国产精品国产亚洲精品看不卡15 | av网站免费在线 | 日韩欧美综合视频 | 国产v在线 | 9999在线观看 | 激情视频一区 | a'aaa级片在线观看 | 久久久久综合精品福利啪啪 | 久要激情网 | 91精彩视频 | 国产一级91 | 亚洲视频 中文字幕 | 97爱 | 成人在线免费看视频 | 日韩中文字幕视频在线 | 久久久久久国产精品 | 亚洲成年人免费网站 | 久久久精品 一区二区三区 国产99视频在线观看 | 午夜电影久久久 | www免费视频com━ | 久久久国产精品麻豆 | www.狠狠操 | 国产精品综合在线观看 | 91视频高清 | 欧美日韩破处 | 欧美日韩另类在线观看 | 午夜视频在线观看一区 | 日韩视频一区二区三区 | 在线观看不卡视频 | 天天人人| 国产精品久久久久久超碰 | 99久久99久久免费精品蜜臀 | 99热在线观看 | 成人av电影免费 | 五月综合 | 久久久av免费| 久久久精品视频网站 | 免费a级观看 | 亚洲成人免费在线 | 久久精品网站免费观看 | 99精品黄色片免费大全 | 碰超在线97人人 | 欧美午夜精品久久久久久孕妇 | 欧美午夜精品久久久久久浪潮 | 欧美日韩免费视频 | 色姑娘综合 | www亚洲国产 | bbbb操bbbb| 午夜精品视频一区二区三区在线看 | 免费久久久久久久 | 91麻豆精品国产91久久久久久久久 | 国产精品视频不卡 | 日韩丝袜 | 国产精品99视频 | 日本在线中文在线 | 四虎影视成人精品国库在线观看 | 国内精品一区二区 | 欧美久久久久久久久久久久久 | 色综合久久中文字幕综合网 | 日韩视频一区二区 | 婷婷精品国产欧美精品亚洲人人爽 | 精品无人国产偷自产在线 | 国产一级免费观看视频 | 日韩成人看片 | 日韩av一区二区三区 | 久久精品老司机 | 97超碰人人看 | 久久av一区二区三区亚洲 | 国产精品久久久久一区二区 | 日本成人黄色片 | 免费精品人在线二线三线 | 成年人黄色免费网站 | www.天天草 | 一级黄网 | 五月婷婷丁香在线观看 | 91麻豆精品国产91久久久无限制版 | 国产精品69久久久久 | 欧美激情视频一二三区 | 永久免费毛片在线观看 | 日韩一区正在播放 | 五月丁婷婷 | av在线免费播放 | 亚洲精品乱码久久久久久蜜桃欧美 | 精品电影一区 | 青春草视频 | 国产精品欧美日韩 | 国产一级高清 | 不卡电影一区二区三区 | 最近最新mv字幕免费观看 | 色婷丁香 | 中文字幕一区二区三区乱码在线 | 欧美国产日韩一区二区三区 | 国产精品美女久久久网av | 国产伦精品一区二区三区无广告 | 久久亚洲日本 | 精品久久五月天 | 久久tv视频| 亚洲女人天堂成人av在线 | 一级黄色片在线免费观看 | 少妇搡bbbb搡bbb搡忠贞 | 日韩视频中文字幕在线观看 | 国产成人在线网站 | 久av电影 | 国产福利久久 | 欧美日韩国产在线精品 | 欧洲精品视频一区 | 麻豆系列在线观看 | 日韩a在线播放 | 久草免费在线观看视频 | 尤物九九久久国产精品的分类 | 久久色在线观看 | 久久免费99精品久久久久久 | 久久精品日韩 | 国产精品99爱 | 欧美精品国产综合久久 | 黄色三级在线观看 | 国产精品第一 | 国产精品高 | 日韩国产精品久久久久久亚洲 | 精品免费观看 | 国产精品久久久久久久久久久久午夜 | 久草视频在线播放 | 成人一级片视频 | 国产小视频在线播放 | 精品久久久久久亚洲综合网 | 五月婷婷视频在线 | 在线看成人av | 久久国产免费视频 | 久久国产手机看片 | 国产精品人成电影在线观看 | 国产在线精品观看 | 日韩高清不卡在线 | 91av网站在线观看 | 国产精品a久久久久 | 免费在线91 | 日韩电影在线一区 | 国产特黄色片 | 成人午夜电影久久影院 | 久久精品国产免费看久久精品 | 国产一区二区三区免费在线 | 国内精品久久天天躁人人爽 | 麻豆精品视频 | 久久精品国产精品 | 在线免费性生活片 | 激情欧美一区二区三区免费看 | 国产精品久久久久久久久久久不卡 | 人人看人人做人人澡 | 97色在线视频 | 超碰在线cao | 国产一区二区在线看 | 黄色影院在线免费观看 | 国产自制av | 高清久久久 | 国产九九精品视频 | 久久久午夜精品福利内容 | 精品主播网红福利资源观看 | 91女子私密保健养生少妇 | 婷婷五综合| 人人干人人干人人干 | wwwwwww黄| 97av影院| 特级西西444www高清大视频 | 国产在线毛片 | 亚洲免费小视频 | 天天干,天天射,天天操,天天摸 | 国产黄色大片免费看 | 国语久久| 天天插日日插 | 日韩在线电影观看 | 国产一区在线免费 | 久久伊人色综合 | 伊人天天干 | www.色五月.com | 精品中文字幕在线观看 | 久久99九九99精品 | 日韩免费中文字幕 | 国产黄在线免费观看 | 久久女同性恋中文字幕 | 日操干| 黄色一二级片 | 久久国产综合视频 | 97超碰国产在线 | 国产精品久久久久久一区二区三区 | 亚洲精品久| 亚洲视频1区2区 | 久久精品一区八戒影视 | 亚洲视频第一页 | 欧美有色| 欧美 日韩 国产 成人 在线 | 一区二区三区精品在线 | 国产成人高清av | 一级欧美日韩 | 黄色三级免费网址 | 久久99国产综合精品 | 欧美一进一出抽搐大尺度视频 | 综合国产在线 | 99精品国产福利在线观看免费 | 中文资源在线观看 | 欧洲色吧 | 久久久久久久久久影视 | 午夜丁香网 | 91成人网在线 | 不卡日韩av| 亚洲亚洲精品在线观看 | 丝袜美女在线 | 九九久久婷婷 | 久在线观看视频 | x99av成人免费 | 91九色视频国产 | av大全在线看 | 日韩精品久久一区二区三区 | 99电影 | 久久久久久国产精品999 | www..com黄色片| 国产黄色精品 | 视频 天天草| 国产成人久久av977小说 | 亚洲欧美视频一区二区三区 | 韩国av在线播放 | 999电影免费在线观看2020 | 亚洲成人av电影在线 | 免费视频三区 | 91亚洲精品乱码久久久久久蜜桃 | 综合婷婷 | 成年人黄色大片在线 | 激情久久久久久久久久久久久久久久 | 午夜丁香视频在线观看 | 天天插天天 | 人人草人 | 波多野结衣久久资源 | 久在线观看视频 | 国产视频一区二区三区在线 | 玖玖综合网 | 国产免费黄色 | 精品视频久久久 | 久久综合九色综合97婷婷女人 | 天天干天天搞天天射 | 欧美国产日韩一区二区 | 国产美女免费视频 | 麻豆一区二区三区视频 | 国产二区电影 | 国产美女久久 | 91爱在线 | 久久毛片网站 | 成人免费视频网 | 日韩免费视频观看 | 在线黄色免费av | 99久久国产免费看 | 免费日韩av片 | 国产 日韩 欧美 在线 | 在线观看香蕉视频 | 免费在线观看黄色网 | 久久国产免 | 亚洲区视频在线观看 | 蜜桃视频日本 | 在线亚洲天堂网 | 中文不卡视频在线 | 人人狠| 特级黄色电影 | 开心色停停 | 天天射天天干天天爽 | 亚洲国产精品第一区二区 | 成人小视频在线观看免费 | 92国产精品久久久久首页 | 亚洲精品视频在线播放 | 亚洲午夜精品在线观看 | 天天干天天操天天干 | 精品免费 | 日本精品视频一区二区 | 欧美一区二区三区不卡 | 日韩一区二区三区不卡 | 午夜视频一区二区三区 | 国产在线精品一区二区不卡了 | 视频在线观看国产 | 国产黄在线播放 | 久久91久久久久麻豆精品 | 日韩av片无码一区二区不卡电影 | 国产玖玖精品视频 | 国产最新91 | 久久精品中文视频 | 日本高清中文字幕有码在线 | 日韩理论 | 国产精品一区二区在线 | 欧美一级片免费 | 97av视频| 免费观看版 | 日韩资源在线 | av品善网 | 热久久精品在线 | 高清不卡免费视频 | 亚洲黄色一级电影 | 青青河边草免费直播 | 激情影院在线 | 日韩av网站在线播放 | 中文网丁香综合网 | 国产精久久久 | 国产精品成人国产乱一区 | 玖玖视频国产 | 免费看的毛片 | 91片在线观看 | 亚洲欧美综合精品久久成人 | 国产黄色资源 | 日本成人a | 日本中文字幕视频 | 69av网| 久久影视一区二区 | 美女黄频在线观看 | 国产99精品在线观看 | 精品欧美一区二区三区久久久 | 超碰97国产 | 国产精品免费人成网站 | 在线观看黄色免费视频 | 国产精品久久99综合免费观看尤物 | 狠狠操狠狠操 | 91av原创| 狠狠躁日日躁狂躁夜夜躁 | 久久区二区 | 日韩免费在线看 | 色多视频在线观看 | 久久99精品国产99久久6尤 | 免费h精品视频在线播放 | 丁香在线| 日韩成人欧美 | 天天操天天爽天天干 | 亚洲狠狠婷婷 | 国产亚洲情侣一区二区无 | 五月天久久 | 久久久久久久久爱 | 在线香蕉视频 | 天天操天天草 | 超碰97免费| 国产在线永久 | 久久国产精品成人免费浪潮 | 丝袜美女视频网站 | 色在线国产 | 天天射天天射天天 | 综合铜03| 国产破处在线视频 | 日韩网站中文字幕 | 偷拍视频一区 | 亚洲精品在线观看视频 | 亚洲91中文字幕无线码三区 | 亚洲黄色免费观看 | 全久久久久久久久久久电影 | 夜夜澡人模人人添人人看 | 亚洲成av片人久久久 | 亚洲国产99 | 国产裸体视频bbbbb | 视频99爱| 在线播放 亚洲 | 91.精品高清在线观看 | 日韩视频免费观看高清完整版在线 | 99在线视频精品 | 中文字幕免费成人 | 成人午夜网 | 插久久| 国产精品福利在线 | 天天干,天天操 | 久久亚洲精品国产亚洲老地址 | 欧美日韩在线观看不卡 | 久久久国产精品一区二区三区 | 99久热 | 黄色av电影在线观看 | 9999亚洲 | 丁香婷婷激情国产高清秒播 | 欧美亚洲精品一区 | 亚洲成人黄色在线 | 视频一区亚洲 | 在线视频99 | 精品国产1区2区3区 国产欧美精品在线观看 | 欧美国产日韩一区二区三区 | 色婷婷精品大在线视频 | 色婷婷成人网 | 久久久精品国产一区二区三区 | 91色亚洲| 91免费黄视频 | 免费不卡中文字幕视频 | 国产又黄又硬又爽 | www蜜桃视频 | av 一区 二区 久久 | 一区二区不卡高清 | 久久久国产电影 | 91精品1区2区 | 亚洲a资源 | 四虎影视成人精品国库在线观看 | 国产精品区免费视频 | 日韩免费在线视频 | 午夜精品久久久久久久久久久久久久 | 精品久久久99 | 99热这里精品 | 三级视频国产 | 国产福利精品一区二区 | 欧美精品一二三 | 欧美日韩视频网站 | 激情五月婷婷丁香 | 国产精品va最新国产精品视频 | 亚洲福利精品 | 99精彩视频| 国产最新精品视频 | 91精品第一页 | 国产午夜精品一区二区三区在线观看 | 成年人免费av网站 | 国产精品理论片在线播放 | 久久久久久久av麻豆果冻 | 久久久福利视频 | 国产麻豆精品一区二区 | 天天草天天干天天射 | 69欧美视频 | 精品无人国产偷自产在线 | 亚洲国产精品久久久 | 91精品国产92久久久久 | 就要色综合 | 这里只有精品视频在线观看 | 国产精品欧美久久久久无广告 | 婷婷网站天天婷婷网站 | 国产精品免费观看国产网曝瓜 | 久久免费久久 | 在线精品亚洲一区二区 | 又色又爽又黄高潮的免费视频 | 最近中文字幕视频完整版 | 国产专区一 | 日韩在线免费播放 | 国产成人精品综合久久久 | 色射色 | 成人网在线免费视频 | 久久久受www免费人成 | 九草视频在线观看 | 久久综合偷偷噜噜噜色 | 精品久久一 | 中文字幕av全部资源www中文字幕在线观看 | 婷婷久久久久 | 成人一级免费视频 | 丁香av| 麻豆久久精品 | 日韩亚洲在线观看 | 992tv在线观看网站 | 国产精品美女www爽爽爽视频 | 麻豆国产精品一区二区三区 | 久久人人爽人人爽人人片 | 国产剧情在线一区 | 久久久高清视频 | 久久夜色精品国产欧美一区麻豆 | 亚洲成a人片77777kkkk1在线观看 | 国产一区在线免费观看视频 | av 一区二区三区四区 | 91在线播放国产 | 久久人人艹 | 日韩精品国产一区 | 国产精品第一视频 | 国产高清在线观看 | 午夜久操| 天天爽夜夜操 | 一级片黄色片网站 | 2019国产精品 | 亚洲成人二区 | 亚洲精品九九 | 成人av在线直播 | 又爽又黄又刺激的视频 | 日韩理论在线观看 | 天天操天天是 | 久草在线视频国产 | 99久久精品国产免费看不卡 | 黄色片网站免费 | 亚洲免费国产 | av在线最新| 97精品国产91久久久久久 | 国产不卡在线观看 | 久久国产免费视频 | 一区二区三区四区五区六区 | 精品国产伦一区二区三区观看方式 | 天天干天天操天天做 | 亚洲欧美日韩精品一区二区 | 精品自拍网| 国产成人福利 | 国产女教师精品久久av | 婷婷久久五月 | 精品国产亚洲在线 | 日韩免费看| 日韩电影在线观看一区二区 | 国产精品久久久久久久久久免费 | 激情婷婷六月 | 97色噜噜 | 亚洲最快最全在线视频 | 在线 视频 一区二区 | 久久免费精品国产 | 久久久免费高清视频 | 天天干天天插 | 一区二区三区免费在线观看 | 午夜的福利 | 午夜av日韩| 国产一区二区三区免费在线 | 日本99热| 日本高清中文字幕有码在线 | 国产一区二区成人 | 国产国产人免费人成免费视频 | 欧美日韩国产一区二区在线观看 | 天堂av网在线 | 久久久久国产精品免费 | 欧美 日韩 国产 中文字幕 | 91自拍视频在线 | 狠狠色免费 | 大胆欧美gogo免费视频一二区 | 91高清免费在线观看 | 搡bbbb搡bbb视频 | 亚洲综合欧美激情 | 国产手机精品视频 | 国产一级淫片免费看 | 91精品国产成人观看 | av一区二区三区在线播放 | 久久激情影院 | 青青河边草手机免费 | 国产精品99精品久久免费 | 五月天色网站 | www.夜色.com| 毛片www | 最近日本mv字幕免费观看 | 欧美性极品xxxx做受 | 久久手机精品视频 | 精品91久久久久 | 国产高清在线不卡 | 综合天堂av久久久久久久 | 性色在线视频 | 国产精品久久久久久久久久免费看 | 丁香婷婷激情五月 | 欧美日韩一区二区视频在线观看 | 日韩免费视频一区二区 | 中文日韩在线 | a电影免费看 | 免费看三级黄色片 | 亚洲精品久久久久www | www.天天干.com | 5月丁香婷婷综合 | 色综合久久88色综合天天6 | 国产福利a | 黄色视屏在线免费观看 | 欧美日韩国产一区 | 99视频在线免费看 | 91色欧美| 96精品高清视频在线观看软件特色 | 日p视频| 九九视频这里只有精品 | 亚洲国产成人精品电影在线观看 | 最新超碰 | av在线免费网 | 99久久精品一区二区成人 | 91精品啪在线观看国产线免费 | 亚洲无人区小视频 | www.国产在线观看 | 国内精品久久久久久久影视简单 | 中文字幕在线观看第二页 | 日本成人免费在线观看 | 8x成人免费视频 | 午夜精品电影一区二区在线 | 又黄又爽又刺激的视频 | 97在线观看免费高清 | 国产网红在线观看 | 色吊丝在线永久观看最新版本 | 日韩av电影手机在线观看 | 一级免费看 | 97在线观看免费观看高清 | 国产婷婷久久 | 国产精品mv | 少妇bbb搡bbbb搡bbbb′ | 99在线免费视频观看 | 久艹视频在线免费观看 | 肉色欧美久久久久久久免费看 | 天天干 天天摸 天天操 | 91一区啪爱嗯打偷拍欧美 | 国产成人精品午夜在线播放 | 337p日本大胆噜噜噜噜 | 五月综合| 美女网站久久 | 在线视频观看你懂的 | 伊人久久在线观看 | 福利视频精品 | 久久久网 | a视频在线播放 | 国产一区二区三区免费视频 | 99精品视频免费看 | 国产成人亚洲在线观看 | 91精品国产麻豆国产自产影视 | 国产黑丝一区二区三区 | 香蕉视频日本 | 国产不卡在线播放 | 国产 日韩 在线 亚洲 字幕 中文 | 岛国大片免费视频 | 成人黄色在线观看视频 | 五月天丁香综合 | 国产亚洲视频在线观看 | 色视频在线看 | 免费观看久久 | 日韩久久久久久久 | 日韩免费在线观看 | 91视频在线网址 | 久久久久在线视频 | 欧美91精品国产自产 | 97超碰在线人人 | 亚洲精品国产精品国自产观看浪潮 | 国产五月天婷婷 | 亚洲aaa级 | 一本一本久久a久久精品牛牛影视 | 99色人 | 日av免费 | 国产看片网站 | 免费观看一级视频 | 黄色av一区二区三区 | 成人毛片在线视频 | 国产中文字幕网 | 六月丁香在线观看 | 亚洲日本va中文字幕 | 久久国产一区二区三区 | 国产亚洲成av人片在线观看桃 | 99热99热| 国语精品久久 | 亚洲成人av在线电影 | 一区二区三区中文字幕在线观看 | 久久在线免费观看 | a视频免费在线观看 | 天天插日日插 | 国产精品99久久久精品 | 911国产| 六月丁香社区 | 亚洲成人国产 | 97超视频免费观看 | 69国产盗摄一区二区三区五区 | 亚洲网久久 | 国产成人亚洲在线电影 | 亚洲极色 | 免费黄色激情视频 | 国产99精品在线观看 | 国产美女黄网站免费 | 九九九九九九精品 | 亚洲va欧美va人人爽春色影视 | 在线视频麻豆 | 久久午夜免费观看 | 看黄色91| 天堂av在线| 91九色视频在线观看 | 开心激情久久 | 久久久亚洲精品 | 国模精品一区二区三区 | 色www.| 久久久久国产一区二区三区四区 | 国产一级黄色免费看 | 久久国产精品久久久久 | 亚洲精品在线观看免费 | 日本精品视频网站 | 日韩超碰在线 | 日韩高清二区 | 日韩手机视频 | 国产拍揄自揄精品视频麻豆 | 狠狠色丁香九九婷婷综合五月 | 久久99久久久久久 | 91黄站| 极品久久久 | 婷婷伊人综合亚洲综合网 | av一级片网站 | 亚洲国产精品传媒在线观看 | 黄色软件网站在线观看 | 综合色在线观看 | 日本在线精品视频 | 最新日韩在线观看视频 | 亚洲视频分类 | 国产精品久久久久免费观看 | 九色porny真实丨国产18 | 免费视频91蜜桃 | 国产视频一区二区在线 | 婷婷伊人综合亚洲综合网 | 91亚洲永久精品 | 五月天婷婷在线观看视频 | 久久精品老司机 | 狠狠干电影| 91高清在线看| 字幕网在线观看 | 婷婷精品国产欧美精品亚洲人人爽 | 国产精品久久久久久久久婷婷 | 日韩成人免费观看 | 国产精品麻豆99久久久久久 | 日韩免费在线观看视频 | av在线免费观看不卡 | 日韩免费网站 | 日韩在线第一区 | 国产精国产精品 | 日本三级国产 | 成人欧美一区二区三区黑人麻豆 | 特级西西444www大胆高清无视频 | 亚洲成人资源网 | 成人网页在线免费观看 | 久久精国产 | 中文字幕在线观看av | 日韩av在线看 | 日韩一区二区三区视频在线 | 欧美日韩国产三级 | 国产福利中文字幕 | 国产精品免费久久久久久 | 久久精选视频 | 97精品国产97久久久久久免费 | 久久久九色精品国产一区二区三区 | 精品视频免费在线 | 丁香六月婷婷激情 | 国产精品露脸在线 | 天天干天天操天天 | 欧美日韩在线播放 | 欧美一级免费高清 | 一区二区中文字幕在线播放 | 日韩小视频 | 五月天激情在线 | 91高清免费在线观看 | 成人在线一区二区三区 | 人人射人人插 | 精品国产一区二区三区在线观看 | 在线观看亚洲国产 | 天天视频色版 | 日韩丝袜 | 久久电影国产免费久久电影 | 一区二区不卡视频在线观看 | 激情五月色播五月 | 黄色片亚洲 | 91成人免费看 | 成年人黄色大片在线 | 午夜视频在线瓜伦 | 精品视频在线免费观看 | 中文字幕美女免费在线 | 91大神在线观看视频 | 欧美一级视频一区 | 亚洲人人射 | 91福利区一区二区三区 | 一区二区三区免费在线观看视频 | 91丨精品丨蝌蚪丨白丝jk | 91视频麻豆 | 摸bbb搡bbb搡bbbb| 天天综合导航 | 99精品国产99久久久久久97 | 美女网站免费福利视频 | 五月天综合色 | 欧美视频在线观看免费网址 | 超碰在线人人 | 免费下载高清毛片 | 中文字幕免费不卡视频 | 日韩中文字幕电影 | 人人插人人插 | 国外调教视频网站 | 一级做a爱片性色毛片www | 成人午夜性影院 | 91久久奴性调教 | 欧美日韩性生活 | 九九色在线 | 在线观看亚洲精品视频 | 天天摸日日操 | 国产一级二级三级视频 | 国产一区视频在线观看免费 | 18国产精品福利片久久婷 | 视频精品一区二区三区 | 欧美9999| 久久久久区 | 亚洲精品国产区 | 久久免费一级片 | 久久精品99国产 | 深爱激情久久 | 日韩乱色精品一区二区 | 亚洲h在线播放在线观看h | 99久久精品一区二区成人 | 欧美国产日韩一区二区三区 | 91精品成人久久 | 黄色三级视频片 | 日韩免费在线观看网站 | 中文字幕亚洲字幕 | 久在线| 国产做aⅴ在线视频播放 | 99久久日韩精品视频免费在线观看 | 精品在线观看国产 | 久久黄页 | 不卡的av在线 | 伊人伊成久久人综合网小说 | 午夜久久影视 | 亚洲欧美在线视频免费 |