国产无遮挡裸体免费直播视频,久久精品国产蜜臀av,动漫在线视频一区二区,欧亚日韩一区二区三区,久艹在线 免费视频,国产精品美女网站免费,正在播放 97超级视频在线观看,斗破苍穹年番在线观看免费,51最新乱码中文字幕

MySQL鎖(表鎖,行鎖,共享鎖,排它鎖,間隙鎖)使用詳解

 更新時間:2018年10月10日 16:55:29   作者:郭了個治浩  
本文全面講解了MySQL中鎖包括表鎖,行鎖,共享鎖,排它鎖,間隙鎖的詳細使用方法

鎖,在現實生活中是為我們想要隱藏于外界所使用的一種工具。在計算機中,是協調多個進程或縣城并發(fā)訪問某一資源的一種機制。在數據庫當中,除了傳統(tǒng)的計算資源(CPU、RAM、I/O等等)的爭用之外,數據也是一種供許多用戶共享訪問的資源。如何保證數據并發(fā)訪問的一致性、有效性,是所有數據庫必須解決的一個問題,鎖的沖突也是影響數據庫并發(fā)訪問性能的一個重要因素。從這一角度來說,鎖對于數據庫而言就顯得尤為重要。

MySQL鎖

相對于其他的數據庫而言,MySQL的鎖機制比較簡單,最顯著的特點就是不同的存儲引擎支持不同的鎖機制。根據不同的存儲引擎,MySQL中鎖的特性可以大致歸納如下:

行鎖 表鎖 頁鎖
MyISAM
BDB

InnoDB

開銷、加鎖速度、死鎖、粒度、并發(fā)性能

  • 表鎖:開銷小,加鎖快;不會出現死鎖;鎖定力度大,發(fā)生鎖沖突概率高,并發(fā)度最低

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

  • 頁鎖:開銷和加鎖速度介于表鎖和行鎖之間;會出現死鎖;鎖定粒度介于表鎖和行鎖之間,并發(fā)度一般

從上述的特點課件,很難籠統(tǒng)的說哪種鎖最好,只能根據具體應用的特點來說哪種鎖更加合適。僅僅從鎖的角度來說的話:

表鎖更適用于以查詢?yōu)橹鳎挥猩倭堪此饕龡l件更新數據的應用;行鎖更適用于有大量按索引條件并發(fā)更新少量不同數據,同時又有并發(fā)查詢的應用。(PS:由于BDB已經被InnoDB所取代,我們只討論MyISAM表鎖和InnoDB行鎖的問題)

MyISAM表鎖

MyISAM存儲引擎只支持表鎖,這也是MySQL開始幾個版本中唯一支持的鎖類型。隨著應用對事務完整性和并發(fā)性要求的不斷提高,MySQL才開始開發(fā)基于事務的存儲引擎,后來慢慢出現了支持頁鎖的BDB存儲引擎和支持行鎖的InnoDB存儲引擎(實際 InnoDB是單獨的一個公司,現在已經被Oracle公司收購)。但是MyISAM的表鎖依然是使用最為廣泛的鎖類型。本節(jié)將詳細介紹MyISAM表鎖的使用。

查詢表級鎖爭用情況

可以通過檢查table_locks_waited和table_locks_immediate狀態(tài)變量來分析系統(tǒng)上的表鎖定爭奪:

mysql> show status like 'table%';
+-----------------------+-------+
| Variable_name | Value |
+-----------------------+-------+
| Table_locks_immediate | 2979 |
| Table_locks_waited | 0 |
+-----------------------+-------+
2 rows in set (0.00 sec))

如果Table_locks_waited的值比較高,則說明存在著較嚴重的表級鎖爭用情況。

MySQL表級鎖的鎖模式

MySQL的表級鎖有兩種模式:表共享讀鎖(Table Read Lock)和表獨占寫鎖(Table Write Lock)。鎖模式的兼容性如下表所示。

MySQL中的表鎖兼容性

請求鎖模式

是否兼容

當前鎖模式

None 讀鎖 寫鎖
讀鎖
寫鎖

可見,對MyISAM表的讀操作,不會阻塞其他用戶對同一表的讀請求,但會阻塞對同一表的寫請求;對 MyISAM表的寫操作,則會阻塞其他用戶對同一表的讀和寫操作;MyISAM表的讀操作與寫操作之間,以及寫操作之間是串行的!根據如下表所示的例子可以知道,當一個線程獲得對一個表的寫鎖后,只有持有鎖的線程可以對表進行更新操作。其他線程的讀、寫操作都會等待,直到鎖被釋放為止。

MyISAM存儲引擎的寫阻塞讀例子

session_1 session_2

獲得表film_text的WRITE鎖定

mysql> lock table film_text write;
Query OK, 0 rows affected (0.00 sec)

當前session對鎖定表的查詢、更新、插入操作都可以執(zhí)行:

mysql> select film_id,title from film_text where film_id = 1001;
+---------+-------------+
| film_id | title       |
+---------+-------------+
| 1001    | Update Test |
+---------+-------------+
1 row in set (0.00 sec)
mysql> insert into film_text (film_id,title) values(1003,'Test');
Query OK, 1 row affected (0.00 sec)
mysql> update film_text set title = 'Test' where film_id = 1001;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

其他session對鎖定表的查詢被阻塞,需要等待鎖被釋放:

mysql> select film_id,title from film_text where film_id = 1001;

等待

釋放鎖:

mysql> unlock tables;
Query OK, 0 rows affected (0.00 sec)
等待

Session2獲得鎖,查詢返回:

mysql> select film_id,title from film_text where film_id = 1001;
+---------+-------+
| film_id | title |
+---------+-------+
| 1001    | Test  |
+---------+-------+
1 row in set (57.59 sec)

如何加表鎖

MyISAM在執(zhí)行查詢語句(SELECT)前,會自動給涉及的所有表加讀鎖,在執(zhí)行更新操作(UPDATE、DELETE、INSERT等)前,會自動給涉及的表加寫鎖,這個過程并不需要用戶干預,因此,用戶一般不需要直接用LOCK TABLE命令給MyISAM表顯式加鎖。在本書的示例中,顯式加鎖基本上都是為了方便而已,并非必須如此。

給MyISAM表顯示加鎖,一般是為了在一定程度模擬事務操作,實現對某一時間點多個表的一致性讀取。例如,有一個訂單表orders,其中記錄有各訂單的總金額total,同時還有一個訂單明細表order_detail,其中記錄有各訂單每一產品的金額小計 subtotal,假設我們需要檢查這兩個表的金額合計是否相符,可能就需要執(zhí)行如下兩條SQL:

Select sum(total) from orders;
Select sum(subtotal) from order_detail;

這時,如果不先給兩個表加鎖,就可能產生錯誤的結果,因為第一條語句執(zhí)行過程中,order_detail表可能已經發(fā)生了改變。因此,正確的方法應該是:

Lock tables orders read local, order_detail read local;
Select sum(total) from orders;
Select sum(subtotal) from order_detail;
Unlock tables;

要特別說明以下兩點內容。

  • 上面的例子在LOCK TABLES時加了“l(fā)ocal”選項,其作用就是在滿足MyISAM表并發(fā)插入條件的情況下,允許其他用戶在表尾并發(fā)插入記錄,有關MyISAM表的并發(fā)插入問題,在后面的章節(jié)中還會進一步介紹。

  • 在用LOCK TABLES給表顯式加表鎖時,必須同時取得所有涉及到表的鎖,并且MySQL不支持鎖升級。也就是說,在執(zhí)行LOCK TABLES后,只能訪問顯式加鎖的這些表,不能訪問未加鎖的表;同時,如果加的是讀鎖,那么只能執(zhí)行查詢操作,而不能執(zhí)行更新操作。其實,在自動加鎖的情況下也基本如此,MyISAM總是一次獲得SQL語句所需要的全部鎖。這也正是MyISAM表不會出現死鎖(Deadlock Free)的原因。

在如下表所示的例子中,一個session使用LOCK TABLE命令給表film_text加了讀鎖,這個session可以查詢鎖定表中的記錄,但更新或訪問其他表都會提示錯誤;同時,另外一個session可以查詢表中的記錄,但更新就會出現鎖等待。

MyISAM存儲引擎的讀阻塞寫例子

session_1 session_2

獲得表film_text的READ鎖定

mysql> lock table film_text write;
Query OK, 0 rows affected (0.00 sec)

當前session可以查詢該表記錄

mysql> select film_id,title from film_text where film_id = 1001;
+---------+------------------+
| film_id | title            |
+---------+------------------+
| 1001    | ACADEMY DINOSAUR |
+---------+------------------+
1 row in set (0.00 sec)

其他session也可以查詢該表的記錄

mysql> select film_id,title from film_text where film_id = 1001;
+---------+------------------+
| film_id | title            |
+---------+------------------+
| 1001    | ACADEMY DINOSAUR |
+---------+------------------+
1 row in set (0.00 sec)

當前session不能查詢沒有鎖定的表

mysql> select film_id,title from film where film_id = 1001;
ERROR 1100 (HY000): Table 'film' was not locked with LOCK TABLES

其他session可以查詢或者更新未鎖定的表

mysql> select film_id,title from film where film_id = 1001;
+---------+---------------+
| film_id | title         |
+---------+---------------+
| 1001    | update record |
+---------+---------------+
1 row in set (0.00 sec)
mysql> update film set title = 'Test' where film_id = 1001;
Query OK, 1 row affected (0.04 sec)
Rows matched: 1  Changed: 1  Warnings: 0

當前session中插入或者更新鎖定的表都會提示錯誤:

mysql> insert into film_text (film_id,title) values(1002,'Test');
ERROR 1099 (HY000): Table 'film_text' was locked with a READ lock and can't be updated
mysql> update film_text set title = 'Test' where film_id = 1001;
ERROR 1099 (HY000): Table 'film_text' was locked with a READ lock and can't be updated

其他session更新鎖定表會等待獲得鎖:

mysql> update film_text set title = 'Test' where film_id = 1001;

等待

釋放鎖

mysql> unlock tables;
Query OK, 0 rows affected (0.00 sec)
等待

Session獲得鎖,更新操作完成:

mysql> update film_text set title = 'Test' where film_id = 1001;
Query OK, 1 row affected (1 min 0.71 sec)
Rows matched: 1  Changed: 1  Warnings: 0

注意,當使用LOCK TABLES時,不僅需要一次鎖定用到的所有表,而且,同一個表在SQL語句中出現多少次,就要通過與SQL語句中相同的別名鎖定多少次,否則也會出錯!舉例說明如下。

(1)對actor表獲得讀鎖:

mysql> lock table actor read;
Query OK, 0 rows affected (0.00 sec)

(2)但是通過別名訪問會提示錯誤:

mysql> select a.first_name,a.last_name,b.first_name,b.last_name from actor a,actor b where a.first_name = b.first_name and a.first_name = 'Lisa' and a.last_name = 'Tom' and a.last_name <> b.last_name;
ERROR 1100 (HY000): Table 'a' was not locked with LOCK TABLES

(3)需要對別名分別鎖定:

mysql> lock table actor as a read,actor as b read;
Query OK, 0 rows affected (0.00 sec)

(4)按照別名的查詢可以正確執(zhí)行:

mysql> select a.first_name,a.last_name,b.first_name,b.last_name from actor a,actor b where a.first_name = b.first_name and a.first_name = 'Lisa' and a.last_name = 'Tom' and a.last_name <> b.last_name;
+------------+-----------+------------+-----------+
| first_name | last_name | first_name | last_name |
+------------+-----------+------------+-----------+
| Lisa | Tom | LISA | MONROE |
+------------+-----------+------------+-----------+

1 row in set (0.00 sec)

并發(fā)插入(Concurrent Inserts)

上文提到過MyISAM表的讀和寫是串行的,但這是就總體而言的。在一定條件下,MyISAM表也支持查詢和插入操作的并發(fā)進行。

MyISAM存儲引擎有一個系統(tǒng)變量concurrent_insert,專門用以控制其并發(fā)插入的行為,其值分別可以為0、1或2。

  • 當concurrent_insert設置為0時,不允許并發(fā)插入。

  • 當concurrent_insert設置為1時,如果MyISAM表中沒有空洞(即表的中間沒有被刪除的行),MyISAM允許在一個進程讀表的同時,另一個進程從表尾插入記錄。這也是MySQL的默認設置。

  • 當concurrent_insert設置為2時,無論MyISAM表中有沒有空洞,都允許在表尾并發(fā)插入記錄。

在如下表所示的例子中,session_1獲得了一個表的READ LOCAL鎖,該線程可以對表進行查詢操作,但不能對表進行更新操作;其他的線程(session_2),雖然不能對表進行刪除和更新操作,但卻可以對該表進行并發(fā)插入操作,這里假設該表中間不存在空洞。

MyISAM存儲引擎的讀寫(INSERT)并發(fā)例子

session_1 session_2

獲得表film_text的READ LOCAL鎖定

mysql> lock table film_text read local;
Query OK, 0 rows affected (0.00 sec)

當前session不能對鎖定表進行更新或者插入操作:

mysql> insert into film_text (film_id,title) values(1002,'Test');
ERROR 1099 (HY000): Table 'film_text' was locked with a READ lock and can't be updated
mysql> update film_text set title = 'Test' where film_id = 1001;
ERROR 1099 (HY000): Table 'film_text' was locked with a READ lock and can't be updated

其他session可以進行插入操作,但是更新會等待:

mysql> insert into film_text (film_id,title) values(1002,'Test');
Query OK, 1 row affected (0.00 sec)
mysql> update film_text set title = 'Update Test' where film_id = 1001;

等待

當前session不能訪問其他session插入的記錄:

mysql> select film_id,title from film_text where film_id = 1002;
Empty set (0.00 sec)

釋放鎖:

mysql> unlock tables;
Query OK, 0 rows affected (0.00 sec)

等待

當前session解鎖后可以獲得其他session插入的記錄:

mysql> select film_id,title from film_text where film_id = 1002;
+---------+-------+
| film_id | title |
+---------+-------+
| 1002    | Test  |
+---------+-------+
1 row in set (0.00 sec)

Session2獲得鎖,更新操作完成:

mysql> update film_text set title = 'Update Test' where film_id = 1001;
Query OK, 1 row affected (1 min 17.75 sec)
Rows matched: 1  Changed: 1  Warnings: 0

可以利用MyISAM存儲引擎的并發(fā)插入特性,來解決應用中對同一表查詢和插入的鎖爭用。例如,將concurrent_insert系統(tǒng)變量設為2,總是允許并發(fā)插入;同時,通過定期在系統(tǒng)空閑時段執(zhí)行 OPTIMIZE TABLE語句來整理空間碎片,收回因刪除記錄而產生的中間空洞。有關OPTIMIZE TABLE語句的詳細介紹,可以參見第18章中“兩個簡單實用的優(yōu)化方法”一節(jié)的內容。

MyISAM的鎖調度

前面講過,MyISAM存儲引擎的讀鎖和寫鎖是互斥的,讀寫操作是串行的。那么,一個進程請求某個 MyISAM表的讀鎖,同時另一個進程也請求同一表的寫鎖,MySQL如何處理呢?答案是寫進程先獲得鎖。不僅如此,即使讀請求先到鎖等待隊列,寫請求后到,寫鎖也會插到讀鎖請求之前!這是因為MySQL認為寫請求一般比讀請求要重要。這也正是MyISAM表不太適合于有大量更新操作和查詢操作應用的原因,因為,大量的更新操作會造成查詢操作很難獲得讀鎖,從而可能永遠阻塞。這種情況有時可能會變得非常糟糕!幸好我們可以通過一些設置來調節(jié)MyISAM 的調度行為。

  • 通過指定啟動參數low-priority-updates,使MyISAM引擎默認給予讀請求以優(yōu)先的權利。

  • 通過執(zhí)行命令SET LOW_PRIORITY_UPDATES=1,使該連接發(fā)出的更新請求優(yōu)先級降低。

  • 通過指定INSERT、UPDATE、DELETE語句的LOW_PRIORITY屬性,降低該語句的優(yōu)先級。

雖然上面3種方法都是要么更新優(yōu)先,要么查詢優(yōu)先的方法,但還是可以用其來解決查詢相對重要的應用(如用戶登錄系統(tǒng))中,讀鎖等待嚴重的問題。

另外,MySQL也提供了一種折中的辦法來調節(jié)讀寫沖突,即給系統(tǒng)參數max_write_lock_count設置一個合適的值,當一個表的讀鎖達到這個值后,MySQL就暫時將寫請求的優(yōu)先級降低,給讀進程一定獲得鎖的機會。

上面已經討論了寫優(yōu)先調度機制帶來的問題和解決辦法。這里還要強調一點:一些需要長時間運行的查詢操作,也會使寫進程“餓死”!因此,應用中應盡量避免出現長時間運行的查詢操作,不要總想用一條SELECT語句來解決問題,因為這種看似巧妙的SQL語句,往往比較復雜,執(zhí)行時間較長,在可能的情況下可以通過使用中間表等措施對SQL語句做一定的“分解”,使每一步查詢都能在較短時間完成,從而減少鎖沖突。如果復雜查詢不可避免,應盡量安排在數據庫空閑時段執(zhí)行,比如一些定期統(tǒng)計可以安排在夜間執(zhí)行。

InnoDB鎖問題

InnoDB與MyISAM的最大不同有兩點:一是支持事務(TRANSACTION);二是采用了行級鎖。行級鎖與表級鎖本來就有許多不同之處,另外,事務的引入也帶來了一些新問題。下面我們先介紹一點背景知識,然后詳細討論InnoDB的鎖問題。

背景知識

1.事務(Transaction)及其ACID屬性

事務是由一組SQL語句組成的邏輯處理單元,事務具有以下4個屬性,通常簡稱為事務的ACID屬性。

  • 原子性(Atomicity):事務是一個原子操作單元,其對數據的修改,要么全都執(zhí)行,要么全都不執(zhí)行。

  • 一致性(Consistent):在事務開始和完成時,數據都必須保持一致狀態(tài)。這意味著所有相關的數據規(guī)則都必須應用于事務的修改,以保持數據的完整性;事務結束時,所有的內部數據結構(如B樹索引或雙向鏈表)也都必須是正確的。

  • 隔離性(Isolation):數據庫系統(tǒng)提供一定的隔離機制,保證事務在不受外部并發(fā)操作影響的“獨立”環(huán)境執(zhí)行。這意味著事務處理過程中的中間狀態(tài)對外部是不可見的,反之亦然。

  • 持久性(Durable):事務完成之后,它對于數據的修改是永久性的,即使出現系統(tǒng)故障也能夠保持。

銀行轉帳就是事務的一個典型例子。

2.并發(fā)事務處理帶來的問題

相對于串行處理來說,并發(fā)事務處理能大大增加數據庫資源的利用率,提高數據庫系統(tǒng)的事務吞吐量,從而可以支持更多的用戶。但并發(fā)事務處理也會帶來一些問題,主要包括以下幾種情況。

  • 更新丟失(Lost Update):當兩個或多個事務選擇同一行,然后基于最初選定的值更新該行時,由于每個事務都不知道其他事務的存在,就會發(fā)生丟失更新問題--最后的更新覆蓋了由其他事務所做的更新。例如,兩個編輯人員制作了同一文檔的電子副本。每個編輯人員獨立地更改其副本,然后保存更改后的副本,這樣就覆蓋了原始文檔。最后保存其更改副本的編輯人員覆蓋另一個編輯人員所做的更改。如果在一個編輯人員完成并提交事務之前,另一個編輯人員不能訪問同一文件,則可避免此問題。

  • 臟讀(Dirty Reads):一個事務正在對一條記錄做修改,在這個事務完成并提交前,這條記錄的數據就處于不一致狀態(tài);這時,另一個事務也來讀取同一條記錄,如果不加控制,第二個事務讀取了這些“臟”數據,并據此做進一步的處理,就會產生未提交的數據依賴關系。這種現象被形象地叫做"臟讀"。

  • 不可重復讀(Non-Repeatable Reads):一個事務在讀取某些數據后的某個時間,再次讀取以前讀過的數據,卻發(fā)現其讀出的數據已經發(fā)生了改變、或某些記錄已經被刪除了!這種現象就叫做“不可重復讀”。

  • 幻讀(Phantom Reads):一個事務按相同的查詢條件重新讀取以前檢索過的數據,卻發(fā)現其他事務插入了滿足其查詢條件的新數據,這種現象就稱為“幻讀”。

3.事務隔離級別

在上面講到的并發(fā)事務處理帶來的問題中,“更新丟失”通常是應該完全避免的。但防止更新丟失,并不能單靠數據庫事務控制器來解決,需要應用程序對要更新的數據加必要的鎖來解決,因此,防止更新丟失應該是應用的責任。

“臟讀”、“不可重復讀”和“幻讀”,其實都是數據庫讀一致性問題,必須由數據庫提供一定的事務隔離機制來解決。數據庫實現事務隔離的方式,基本上可分為以下兩種。

  • 一種是在讀取數據前,對其加鎖,阻止其他事務對數據進行修改。

  • 另一種是不用加任何鎖,通過一定機制生成一個數據請求時間點的一致性數據快照(Snapshot),并用這個快照來提供一定級別(語句級或事務級)的一致性讀取。從用戶的角度來看,好像是數據庫可以提供同一數據的多個版本,因此,這種技術叫做數據多版本并發(fā)控制(MultiVersion Concurrency Control,簡稱MVCC或MCC),也經常稱為多版本數據庫。

數據庫的事務隔離越嚴格,并發(fā)副作用越小,但付出的代價也就越大,因為事務隔離實質上就是使事務在一定程度上 “串行化”進行,這顯然與“并發(fā)”是矛盾的。同時,不同的應用對讀一致性和事務隔離程度的要求也是不同的,比如許多應用對“不可重復讀”和“幻讀”并不敏感,可能更關心數據并發(fā)訪問的能力。

為了解決“隔離”與“并發(fā)”的矛盾,ISO/ANSI SQL92定義了4個事務隔離級別,每個級別的隔離程度不同,允許出現的副作用也不同,應用可以根據自己的業(yè)務邏輯要求,通過選擇不同的隔離級別來平衡 “隔離”與“并發(fā)”的矛盾。下表很好地概括了這4個隔離級別的特性。

4種隔離級別比較

讀數據一致性及允許的并發(fā)副作用

隔離級別

讀數據一致性 臟讀 不可重復讀 幻讀

未提交讀(Read uncommitted)

最低級別,只能保證不讀取物理上損壞的數據

已提交度(Read committed)

語句級

可重復讀(Repeatable read)

事務級

可序列化(Serializable)

最高級別,事務級

最后要說明的是:各具體數據庫并不一定完全實現了上述4個隔離級別,例如,Oracle只提供Read committed和Serializable兩個標準隔離級別,另外還提供自己定義的Read only隔離級別;SQL Server除支持上述ISO/ANSI SQL92定義的4個隔離級別外,還支持一個叫做“快照”的隔離級別,但嚴格來說它是一個用MVCC實現的Serializable隔離級別。MySQL 支持全部4個隔離級別,但在具體實現時,有一些特點,比如在一些隔離級別下是采用MVCC一致性讀,但某些情況下又不是,這些內容在后面的章節(jié)中將會做進一步介紹。

獲取InnoDB行鎖爭用情況

可以通過檢查InnoDB_row_lock狀態(tài)變量來分析系統(tǒng)上的行鎖的爭奪情況:

mysql> show status like 'innodb_row_lock%';
+-------------------------------+-------+
| Variable_name | Value |
+-------------------------------+-------+
| InnoDB_row_lock_current_waits | 0 |
| InnoDB_row_lock_time | 0 |
| InnoDB_row_lock_time_avg | 0 |
| InnoDB_row_lock_time_max | 0 |
| InnoDB_row_lock_waits | 0 |
+-------------------------------+-------+
5 rows in set (0.01 sec)

如果發(fā)現鎖爭用比較嚴重,如InnoDB_row_lock_waits和InnoDB_row_lock_time_avg的值比較高,還可以通過設置InnoDB Monitors來進一步觀察發(fā)生鎖沖突的表、數據行等,并分析鎖爭用的原因。

具體方法如下:

mysql> CREATE TABLE innodb_monitor(a INT) ENGINE=INNODB;
Query OK, 0 rows affected (0.14 sec)

然后就可以用下面的語句來進行查看:

mysql> Show innodb status\G;
*************************** 1. row ***************************
Type: InnoDB
Name:
Status:
…
…
------------
TRANSACTIONS
------------
Trx id counter 0 117472192
Purge done for trx's n:o < 0 117472190 undo n:o < 0 0
History list length 17
Total number of lock structs in row lock hash table 0
LIST OF TRANSACTIONS FOR EACH SESSION:
---TRANSACTION 0 117472185, not started, process no 11052, OS thread id 1158191456
MySQL thread id 200610, query id 291197 localhost root
---TRANSACTION 0 117472183, not started, process no 11052, OS thread id 1158723936
MySQL thread id 199285, query id 291199 localhost root
Show innodb status
…

監(jiān)視器可以通過發(fā)出下列語句來停止查看:

mysql> DROP TABLE innodb_monitor;
Query OK, 0 rows affected (0.05 sec)

設置監(jiān)視器后,在SHOW INNODB STATUS的顯示內容中,會有詳細的當前鎖等待的信息,包括表名、鎖類型、鎖定記錄的情況等,便于進行進一步的分析和問題的確定。打開監(jiān)視器以后,默認情況下每15秒會向日志中記錄監(jiān)控的內容,如果長時間打開會導致.err文件變得非常的巨大,所以用戶在確認問題原因之后,要記得刪除監(jiān)控表以關閉監(jiān)視器,或者通過使用“--console”選項來啟動服務器以關閉寫日志文件。

InnoDB的行鎖模式及加鎖方法

InnoDB實現了以下兩種類型的行鎖。

  • 共享鎖(S):允許一個事務去讀一行,阻止其他事務獲得相同數據集的排他鎖。

  • 排他鎖(X):允許獲得排他鎖的事務更新數據,阻止其他事務取得相同數據集的共享讀鎖和排他寫鎖。另外,為了允許行鎖和表鎖共存,實現多粒度鎖機制,InnoDB還有兩種內部使用的意向鎖(Intention Locks),這兩種意向鎖都是表鎖。

  • 意向共享鎖(IS):事務打算給數據行加行共享鎖,事務在給一個數據行加共享鎖前必須先取得該表的IS鎖。

  • 意向排他鎖(IX):事務打算給數據行加行排他鎖,事務在給一個數據行加排他鎖前必須先取得該表的IX鎖。

上述鎖模式的兼容情況具體如下表所示。

InnoDB行鎖模式兼容性列表

請求鎖模式

是否兼容

當前鎖模式

X IX S IS
X 沖突 沖突 沖突 沖突
IX 沖突 兼容 沖突 兼容
S 沖突 沖突 兼容 兼容
IS 沖突 兼容 兼容 兼容

如果一個事務請求的鎖模式與當前的鎖兼容,InnoDB就將請求的鎖授予該事務;反之,如果兩者不兼容,該事務就要等待鎖釋放。

意向鎖是InnoDB自動加的,不需用戶干預。對于UPDATE、DELETE和INSERT語句,InnoDB會自動給涉及數據集加排他鎖(X);對于普通SELECT語句,InnoDB不會加任何鎖;事務可以通過以下語句顯示給記錄集加共享鎖或排他鎖。

  • 共享鎖(S):SELECT * FROM table_name WHERE ... LOCK IN SHARE MODE。

  • 排他鎖(X):SELECT * FROM table_name WHERE ... FOR UPDATE。

用SELECT ... IN SHARE MODE獲得共享鎖,主要用在需要數據依存關系時來確認某行記錄是否存在,并確保沒有人對這個記錄進行UPDATE或者DELETE操作。但是如果當前事務也需要對該記錄進行更新操作,則很有可能造成死鎖,對于鎖定行記錄后需要進行更新操作的應用,應該使用SELECT... FOR UPDATE方式獲得排他鎖。

在如下表所示的例子中,使用了SELECT ... IN SHARE MODE加鎖后再更新記錄,看看會出現什么情況,其中actor表的actor_id字段為主鍵。

InnoDB存儲引擎的共享鎖例子

session_1 session_2
mysql> set autocommit = 0;
Query OK, 0 rows affected (0.00 sec)
mysql> select actor_id,first_name,last_name from actor where actor_id = 178;
+----------+------------+-----------+
| actor_id | first_name | last_name |
+----------+------------+-----------+
| 178      | LISA       | MONROE    |
+----------+------------+-----------+
1 row in set (0.00 sec)
mysql> set autocommit = 0;
Query OK, 0 rows affected (0.00 sec)
mysql> select actor_id,first_name,last_name from actor where actor_id = 178;
+----------+------------+-----------+
| actor_id | first_name | last_name |
+----------+------------+-----------+
| 178      | LISA       | MONROE    |
+----------+------------+-----------+
1 row in set (0.00 sec)

當前session對actor_id=178的記錄加share mode 的共享鎖:

mysql> select actor_id,first_name,last_name from actor where actor_id = 178lock in share mode;
+----------+------------+-----------+
| actor_id | first_name | last_name |
+----------+------------+-----------+
| 178      | LISA       | MONROE    |
+----------+------------+-----------+
1 row in set (0.01 sec)

其他session仍然可以查詢記錄,并也可以對該記錄加share mode的共享鎖:

mysql> select actor_id,first_name,last_name from actor where actor_id = 178lock in share mode;
+----------+------------+-----------+
| actor_id | first_name | last_name |
+----------+------------+-----------+
| 178      | LISA       | MONROE    |
+----------+------------+-----------+
1 row in set (0.01 sec)

當前session對鎖定的記錄進行更新操作,等待鎖:

mysql> update actor set last_name = 'MONROE T' where actor_id = 178;

等待

其他session也對該記錄進行更新操作,則會導致死鎖退出:

mysql> update actor set last_name = 'MONROE T' where actor_id = 178;
ERROR 1213 (40001): Deadlock found when trying to get lock; try restarting transaction

獲得鎖后,可以成功更新:

mysql> update actor set last_name = 'MONROE T' where actor_id = 178;
Query OK, 1 row affected (17.67 sec)
Rows matched: 1  Changed: 1  Warnings: 0

當使用SELECT...FOR UPDATE加鎖后再更新記錄,出現如下表所示的情況。

InnoDB存儲引擎的排他鎖例子

session_1 session_2
mysql> set autocommit = 0;
Query OK, 0 rows affected (0.00 sec)
mysql> select actor_id,first_name,last_name from actor where actor_id = 178;
+----------+------------+-----------+
| actor_id | first_name | last_name |
+----------+------------+-----------+
| 178      | LISA       | MONROE    |
+----------+------------+-----------+
1 row in set (0.00 sec)
mysql> set autocommit = 0;
Query OK, 0 rows affected (0.00 sec)
mysql> select actor_id,first_name,last_name from actor where actor_id = 178;
+----------+------------+-----------+
| actor_id | first_name | last_name |
+----------+------------+-----------+
| 178      | LISA       | MONROE    |
+----------+------------+-----------+
1 row in set (0.00 sec)

當前session對actor_id=178的記錄加for update的排它鎖:

mysql> select actor_id,first_name,last_name from actor where actor_id = 178 for update;
+----------+------------+-----------+
| actor_id | first_name | last_name |
+----------+------------+-----------+
| 178      | LISA       | MONROE    |
+----------+------------+-----------+
1 row in set (0.00 sec)

其他session可以查詢該記錄,但是不能對該記錄加共享鎖,會等待獲得鎖:

mysql> select actor_id,first_name,last_name from actor where actor_id = 178;
+----------+------------+-----------+
| actor_id | first_name | last_name |
+----------+------------+-----------+
| 178      | LISA       | MONROE    |
+----------+------------+-----------+
1 row in set (0.00 sec)
mysql> select actor_id,first_name,last_name from actor where actor_id = 178 for update;

等待

當前session可以對鎖定的記錄進行更新操作,更新后釋放鎖:

mysql> update actor set last_name = 'MONROE T' where actor_id = 178;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0
mysql> commit;
Query OK, 0 rows affected (0.01 sec)

其他session獲得鎖,得到其他session提交的記錄:

mysql> select actor_id,first_name,last_name from actor where actor_id = 178 for update;
+----------+------------+-----------+
| actor_id | first_name | last_name |
+----------+------------+-----------+
| 178      | LISA       | MONROE T  |
+----------+------------+-----------+
1 row in set (9.59 sec)


InnoDB行鎖實現方式

InnoDB行鎖是通過給索引上的索引項加鎖來實現的,這一點MySQL與Oracle不同,后者是通過在數據塊中對相應數據行加鎖來實現的。InnoDB這種行鎖實現特點意味著:只有通過索引條件檢索數據,InnoDB才使用行級鎖,否則,InnoDB將使用表鎖!

在實際應用中,要特別注意InnoDB行鎖的這一特性,不然的話,可能導致大量的鎖沖突,從而影響并發(fā)性能。下面通過一些實際例子來加以說明。

(1)在不通過索引條件查詢的時候,InnoDB確實使用的是表鎖,而不是行鎖。

在如下所示的例子中,開始tab_no_index表沒有索引:

mysql> create table tab_no_index(id int,name varchar(10)) engine=innodb;
Query OK, 0 rows affected (0.15 sec)
mysql> insert into tab_no_index values(1,'1'),(2,'2'),(3,'3'),(4,'4');
Query OK, 4 rows affected (0.00 sec)
Records: 4 Duplicates: 0 Warnings: 0

InnoDB存儲引擎的表在不使用索引時使用表鎖例子

session_1 session_2
mysql> set autocommit=0;
Query OK, 0 rows affected (0.00 sec)
mysql> select * from tab_no_index where id = 1 ;
+------+------+
| id   | name |
+------+------+
| 1    | 1    |
+------+------+
1 row in set (0.00 sec)
mysql> set autocommit=0;
Query OK, 0 rows affected (0.00 sec)
mysql> select * from tab_no_index where id = 2 ;
+------+------+
| id   | name |
+------+------+
| 2    | 2    |
+------+------+
1 row in set (0.00 sec)
mysql> select * from tab_no_index where id = 1 for update;
+------+------+
| id   | name |
+------+------+
| 1    | 1    |
+------+------+
1 row in set (0.00 sec)
mysql> select * from tab_no_index where id = 2 for update;

等待

在如上表所示的例子中,看起來session_1只給一行加了排他鎖,但session_2在請求其他行的排他鎖時,卻出現了鎖等待!原因就是在沒有索引的情況下,InnoDB只能使用表鎖。當我們給其增加一個索引后,InnoDB就只鎖定了符合條件的行,如下表所示。

創(chuàng)建tab_with_index表,id字段有普通索引:

mysql> create table tab_with_index(id int,name varchar(10)) engine=innodb;
Query OK, 0 rows affected (0.15 sec)
mysql> alter table tab_with_index add index id(id);
Query OK, 4 rows affected (0.24 sec)
Records: 4 Duplicates: 0 Warnings: 0

InnoDB存儲引擎的表在使用索引時使用行鎖例子

session_1 session_2
mysql> set autocommit=0;
Query OK, 0 rows affected (0.00 sec)
mysql> select * from tab_with_index where id = 1 ;
+------+------+
| id   | name |
+------+------+
| 1    | 1    |
+------+------+
1 row in set (0.00 sec)
mysql> set autocommit=0;
Query OK, 0 rows affected (0.00 sec)
mysql> select * from tab_with_index where id = 2 ;
+------+------+
| id   | name |
+------+------+
| 2    | 2    |
+------+------+
1 row in set (0.00 sec)
mysql> select * from tab_with_index where id = 1 for update;
+------+------+
| id   | name |
+------+------+
| 1    | 1    |
+------+------+
1 row in set (0.00 sec)
mysql> select * from tab_with_index where id = 2 for update;
+------+------+
| id   | name |
+------+------+
| 2    | 2    |
+------+------+
1 row in set (0.00 sec)

(2)由于MySQL的行鎖是針對索引加的鎖,不是針對記錄加的鎖,所以雖然是訪問不同行的記錄,但是如果是使用相同的索引鍵,是會出現鎖沖突的。應用設計的時候要注意這一點。

在如下表所示的例子中,表tab_with_index的id字段有索引,name字段沒有索引:

mysql> alter table tab_with_index drop index name;
Query OK, 4 rows affected (0.22 sec)
Records: 4 Duplicates: 0 Warnings: 0
mysql> insert into tab_with_index values(1,'4');
Query OK, 1 row affected (0.00 sec)
mysql> select * from tab_with_index where id = 1;
+------+------+
| id | name |
+------+------+
| 1 | 1 |
| 1 | 4 |
+------+------+
2 rows in set (0.00 sec)

InnoDB存儲引擎使用相同索引鍵的阻塞例子

session_1 session_2
mysql> set autocommit=0;
Query OK, 0 rows affected (0.00 sec)
mysql> set autocommit=0;
Query OK, 0 rows affected (0.00 sec)
mysql> select * from tab_with_index where id = 1 and name = '1' for update;
+------+------+
| id   | name |
+------+------+
| 1    | 1    |
+------+------+
1 row in set (0.00 sec)

雖然session_2訪問的是和session_1不同的記錄,但是因為使用了相同的索引,所以需要等待鎖:

mysql> select * from tab_with_index where id = 1 and name = '4' for update;

等待

(3)當表有多個索引的時候,不同的事務可以使用不同的索引鎖定不同的行,另外,不論是使用主鍵索引、唯一索引或普通索引,InnoDB都會使用行鎖來對數據加鎖。

在如下表所示的例子中,表tab_with_index的id字段有主鍵索引,name字段有普通索引:

mysql> alter table tab_with_index add index name(name);
Query OK, 5 rows affected (0.23 sec)
Records: 5 Duplicates: 0 Warnings: 0

InnoDB存儲引擎的表使用不同索引的阻塞例子

session_1 session_2
mysql> set autocommit=0;
Query OK, 0 rows affected (0.00 sec)
mysql> set autocommit=0;
Query OK, 0 rows affected (0.00 sec)
mysql> select * from tab_with_index where id = 1 for update;
+------+------+
| id   | name |
+------+------+
| 1    | 1    |
| 1    | 4    |
+------+------+
2 rows in set (0.00 sec)

Session_2使用name的索引訪問記錄,因為記錄沒有被索引,所以可以獲得鎖:

mysql> select * from tab_with_index where name = '2' for update;
+------+------+
| id   | name |
+------+------+
| 2    | 2    |
+------+------+
1 row in set (0.00 sec)

由于訪問的記錄已經被session_1鎖定,所以等待獲得鎖。:

mysql> select * from tab_with_index where name = '4' for update;

(4)即便在條件中使用了索引字段,但是否使用索引來檢索數據是由MySQL通過判斷不同執(zhí)行計劃的代價來決定的,如果MySQL認為全表掃描效率更高,比如對一些很小的表,它就不會使用索引,這種情況下InnoDB將使用表鎖,而不是行鎖。因此,在分析鎖沖突時,別忘了檢查SQL的執(zhí)行計劃,以確認是否真正使用了索引。

在下面的例子中,檢索值的數據類型與索引字段不同,雖然MySQL能夠進行數據類型轉換,但卻不會使用索引,從而導致InnoDB使用表鎖。通過用explain檢查兩條SQL的執(zhí)行計劃,我們可以清楚地看到了這一點。

例子中tab_with_index表的name字段有索引,但是name字段是varchar類型的,如果where條件中不是和varchar類型進行比較,則會對name進行類型轉換,而執(zhí)行的全表掃描。

mysql> alter table tab_no_index add index name(name);
Query OK, 4 rows affected (8.06 sec)
Records: 4 Duplicates: 0 Warnings: 0
mysql> explain select * from tab_with_index where name = 1 \G
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: tab_with_index
type: ALL
possible_keys: name
key: NULL
key_len: NULL
ref: NULL
rows: 4
Extra: Using where
1 row in set (0.00 sec)
mysql> explain select * from tab_with_index where name = '1' \G
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: tab_with_index
type: ref
possible_keys: name
key: name
key_len: 23
ref: const
rows: 1
Extra: Using where
1 row in set (0.00 sec)

間隙鎖(Next-Key鎖)

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

舉例來說,假如emp表中只有101條記錄,其empid的值分別是 1,2,...,100,101,下面的SQL:

Select * from emp where empid > 100 for update;

是一個范圍條件的檢索,InnoDB不僅會對符合條件的empid值為101的記錄加鎖,也會對empid大于101(這些記錄并不存在)的“間隙”加鎖。

InnoDB使用間隙鎖的目的,一方面是為了防止幻讀,以滿足相關隔離級別的要求,對于上面的例子,要是不使用間隙鎖,如果其他事務插入了empid大于100的任何記錄,那么本事務如果再次執(zhí)行上述語句,就會發(fā)生幻讀;另外一方面,是為了滿足其恢復和復制的需要。有關其恢復和復制對鎖機制的影響,以及不同隔離級別下InnoDB使用間隙鎖的情況,在后續(xù)的章節(jié)中會做進一步介紹。

很顯然,在使用范圍條件檢索并鎖定記錄時,InnoDB這種加鎖機制會阻塞符合條件范圍內鍵值的并發(fā)插入,這往往會造成嚴重的鎖等待。因此,在實際應用開發(fā)中,尤其是并發(fā)插入比較多的應用,我們要盡量優(yōu)化業(yè)務邏輯,盡量使用相等條件來訪問更新數據,避免使用范圍條件。

還要特別說明的是,InnoDB除了通過范圍條件加鎖時使用間隙鎖外,如果使用相等條件請求給一個不存在的記錄加鎖,InnoDB也會使用間隙鎖!

在如下表所示的例子中,假如emp表中只有101條記錄,其empid的值分別是1,2,......,100,101。

InnoDB存儲引擎的間隙鎖阻塞例子

session_1 session_2
mysql> select @@tx_isolation;
+-----------------+
| @@tx_isolation  |
+-----------------+
| REPEATABLE-READ |
+-----------------+
1 row in set (0.00 sec)
mysql> set autocommit = 0;
Query OK, 0 rows affected (0.00 sec)
mysql> select @@tx_isolation;
+-----------------+
| @@tx_isolation  |
+-----------------+
| REPEATABLE-READ |
+-----------------+
1 row in set (0.00 sec)
mysql> set autocommit = 0;
Query OK, 0 rows affected (0.00 sec)

當前session對不存在的記錄加for update的鎖:

mysql> select * from emp where empid = 102 for update;
Empty set (0.00 sec)

這時,如果其他session插入empid為102的記錄(注意:這條記錄并不存在),也會出現鎖等待:

mysql>insert into emp(empid,...) values(102,...);

阻塞等待

Session_1 執(zhí)行rollback:

mysql> rollback;
Query OK, 0 rows affected (13.04 sec)

由于其他session_1回退后釋放了Next-Key鎖,當前session可以獲得鎖并成功插入記錄:

mysql>insert into emp(empid,...) values(102,...);
Query OK, 1 row affected (13.35 sec)

恢復和復制的需要,對InnoDB鎖機制的影響

MySQL通過BINLOG錄執(zhí)行成功的INSERT、UPDATE、DELETE等更新數據的SQL語句,并由此實現MySQL數據庫的恢復和主從復制(可以參見本書“管理篇”的介紹)。MySQL的恢復機制(復制其實就是在Slave Mysql不斷做基于BINLOG的恢復)有以下特點。

l 一是MySQL的恢復是SQL語句級的,也就是重新執(zhí)行BINLOG中的SQL語句。這與Oracle數據庫不同,Oracle是基于數據庫文件塊的。

l 二是MySQL的Binlog是按照事務提交的先后順序記錄的,恢復也是按這個順序進行的。這點也與Oralce不同,Oracle是按照系統(tǒng)更新號(System Change Number,SCN)來恢復數據的,每個事務開始時,Oracle都會分配一個全局唯一的SCN,SCN的順序與事務開始的時間順序是一致的。

從上面兩點可知,MySQL的恢復機制要求:在一個事務未提交前,其他并發(fā)事務不能插入滿足其鎖定條件的任何記錄,也就是不允許出現幻讀,這已經超過了ISO/ANSI SQL92“可重復讀”隔離級別的要求,實際上是要求事務要串行化。這也是許多情況下,InnoDB要用到間隙鎖的原因,比如在用范圍條件更新記錄時,無論在Read Commited或是Repeatable Read隔離級別下,InnoDB都要使用間隙鎖,但這并不是隔離級別要求的,有關InnoDB在不同隔離級別下加鎖的差異在下一小節(jié)還會介紹。

另外,對于“insert into target_tab select * from source_tab where ...”和“create table new_tab ...select ... From source_tab where ...(CTAS)”這種SQL語句,用戶并沒有對source_tab做任何更新操作,但MySQL對這種SQL語句做了特別處理。先來看如下表的例子。

CTAS操作給原表加鎖例子

session_1 session_2
mysql> set autocommit = 0;
Query OK, 0 rows affected (0.00 sec)
mysql> select * from target_tab;
Empty set (0.00 sec)
mysql> select * from source_tab where name = '1';
+----+------+----+
| d1 | name | d2 |
+----+------+----+
|  4 | 1    |  1 |
|  5 | 1    |  1 |
|  6 | 1    |  1 |
|  7 | 1    |  1 |
|  8 | 1    |  1 |
+----+------+----+
5 rows in set (0.00 sec)
mysql> set autocommit = 0;
Query OK, 0 rows affected (0.00 sec)
mysql> select * from target_tab;
Empty set (0.00 sec)
mysql> select * from source_tab where name = '1';
+----+------+----+
| d1 | name | d2 |
+----+------+----+
|  4 | 1    |  1 |
|  5 | 1    |  1 |
|  6 | 1    |  1 |
|  7 | 1    |  1 |
|  8 | 1    |  1 |
+----+------+----+
5 rows in set (0.00 sec)
mysql> insert into target_tab select d1,name from source_tab where name = '1';
Query OK, 5 rows affected (0.00 sec)
Records: 5  Duplicates: 0  Warnings: 0
mysql> update source_tab set name = '1' where name = '8';

等待

commit;

返回結果

commit;

在上面的例子中,只是簡單地讀 source_tab表的數據,相當于執(zhí)行一個普通的SELECT語句,用一致性讀就可以了。ORACLE正是這么做的,它通過MVCC技術實現的多版本數據來實現一致性讀,不需要給source_tab加任何鎖。我們知道InnoDB也實現了多版本數據,對普通的SELECT一致性讀,也不需要加任何鎖;但這里InnoDB卻給source_tab加了共享鎖,并沒有使用多版本數據一致性讀技術!

MySQL為什么要這么做呢?其原因還是為了保證恢復和復制的正確性。因為不加鎖的話,如果在上述語句執(zhí)行過程中,其他事務對source_tab做了更新操作,就可能導致數據恢復的結果錯誤。為了演示這一點,我們再重復一下前面的例子,不同的是在session_1執(zhí)行事務前,先將系統(tǒng)變量 innodb_locks_unsafe_for_binlog的值設置為“on”(其默認值為off),具體結果如下表所示。

CTAS操作不給原表加鎖帶來的安全問題例子

session_1 session_2
mysql> set autocommit = 0;
Query OK, 0 rows affected (0.00 sec)
mysql>set innodb_locks_unsafe_for_binlog='on'
Query OK, 0 rows affected (0.00 sec)
mysql> select * from target_tab;
Empty set (0.00 sec)
mysql> select * from source_tab where name = '1';
+----+------+----+
| d1 | name | d2 |
+----+------+----+
|  4 | 1    |  1 |
|  5 | 1    |  1 |
|  6 | 1    |  1 |
|  7 | 1    |  1 |
|  8 | 1    |  1 |
+----+------+----+
5 rows in set (0.00 sec)
mysql> set autocommit = 0;
Query OK, 0 rows affected (0.00 sec)
mysql> select * from target_tab;
Empty set (0.00 sec)
mysql> select * from source_tab where name = '1';
+----+------+----+
| d1 | name | d2 |
+----+------+----+
|  4 | 1    |  1 |
|  5 | 1    |  1 |
|  6 | 1    |  1 |
|  7 | 1    |  1 |
|  8 | 1    |  1 |
+----+------+----+
5 rows in set (0.00 sec)
mysql> insert into target_tab select d1,name from source_tab where name = '1';
Query OK, 5 rows affected (0.00 sec)
Records: 5  Duplicates: 0  Warnings: 0

session_1未提交,可以對session_1的select的記錄進行更新操作。

mysql> update source_tab set name = '8' where name = '1';
Query OK, 5 rows affected (0.00 sec)
Rows matched: 5  Changed: 5  Warnings: 0
mysql> select * from source_tab where name = '8';
+----+------+----+
| d1 | name | d2 |
+----+------+----+
|  4 | 8    |  1 |
|  5 | 8    |  1 |
|  6 | 8    |  1 |
|  7 | 8    |  1 |
|  8 | 8    |  1 |
+----+------+----+
5 rows in set (0.00 sec)

更新操作先提交

mysql> commit;
Query OK, 0 rows affected (0.05 sec)

插入操作后提交

mysql> commit;
Query OK, 0 rows affected (0.07 sec)

此時查看數據,target_tab中可以插入source_tab更新前的結果,這符合應用邏輯:

mysql> select * from source_tab where name = '8';
+----+------+----+
| d1 | name | d2 |
+----+------+----+
|  4 | 8    |  1 |
|  5 | 8    |  1 |
|  6 | 8    |  1 |
|  7 | 8    |  1 |
|  8 | 8    |  1 |
+----+------+----+
5 rows in set (0.00 sec)
mysql> select * from target_tab;
+------+------+
| id   | name |
+------+------+
| 4    | 1.00 |
| 5    | 1.00 |
| 6    | 1.00 |
| 7    | 1.00 |
| 8    | 1.00 |
+------+------+
5 rows in set (0.00 sec)
mysql> select * from tt1 where name = '1';
Empty set (0.00 sec)
mysql> select * from source_tab where name = '8';
+----+------+----+
| d1 | name | d2 |
+----+------+----+
|  4 | 8    |  1 |
|  5 | 8    |  1 |
|  6 | 8    |  1 |
|  7 | 8    |  1 |
|  8 | 8    |  1 |
+----+------+----+
5 rows in set (0.00 sec)
mysql> select * from target_tab;
+------+------+
| id   | name |
+------+------+
| 4    | 1.00 |
| 5    | 1.00 |
| 6    | 1.00 |
| 7    | 1.00 |
| 8    | 1.00 |
+------+------+
5 rows in set (0.00 sec)

從上可見,設置系統(tǒng)變量innodb_locks_unsafe_for_binlog的值為“on”后,InnoDB不再對source_tab加鎖,結果也符合應用邏輯,但是如果分析BINLOG的內容:

......
SET TIMESTAMP=1169175130;
BEGIN;
# at 274
#070119 10:51:57 server id 1 end_log_pos 105 Query thread_id=1 exec_time=0 error_code=0
SET TIMESTAMP=1169175117;
update source_tab set name = '8' where name = '1';
# at 379
#070119 10:52:10 server id 1 end_log_pos 406 Xid = 5
COMMIT;
# at 406
#070119 10:52:14 server id 1 end_log_pos 474 Query thread_id=2 exec_time=0 error_code=0
SET TIMESTAMP=1169175134;
BEGIN;
# at 474
#070119 10:51:29 server id 1 end_log_pos 119 Query thread_id=2 exec_time=0 error_code=0
SET TIMESTAMP=1169175089;
insert into target_tab select d1,name from source_tab where name = '1';
# at 593
#070119 10:52:14 server id 1 end_log_pos 620 Xid = 7
COMMIT;
......

可以發(fā)現,在BINLOG中,更新操作的位置在INSERT...SELECT之前,如果使用這個BINLOG進行數據庫恢復,恢復的結果與實際的應用邏輯不符;如果進行復制,就會導致主從數據庫不一致!

通過上面的例子,我們就不難理解為什么MySQL在處理“Insert into target_tab select * from source_tab where ...”和“create table new_tab ...select ... From source_tab where ...”時要給source_tab加鎖,而不是使用對并發(fā)影響最小的多版本數據來實現一致性讀。還要特別說明的是,如果上述語句的SELECT是范圍條件,InnoDB還會給源表加間隙鎖(Next-Lock)。

因此,INSERT...SELECT...和 CREATE TABLE...SELECT...語句,可能會阻止對源表的并發(fā)更新,造成對源表鎖的等待。如果查詢比較復雜的話,會造成嚴重的性能問題,我們在應用中應盡量避免使用。實際上,MySQL將這種SQL叫作不確定(non-deterministic)的SQL,不推薦使用。

如果應用中一定要用這種SQL來實現業(yè)務邏輯,又不希望對源表的并發(fā)更新產生影響,可以采取以下兩種措施:

  • 一是采取上面示例中的做法,將innodb_locks_unsafe_for_binlog的值設置為“on”,強制MySQL使用多版本數據一致性讀。但付出的代價是可能無法用binlog正確地恢復或復制數據,因此,不推薦使用這種方式。

  • 二是通過使用“select * from source_tab ... Into outfile”和“l(fā)oad data infile ...”語句組合來間接實現,采用這種方式MySQL不會給source_tab加鎖。

InnoDB在不同隔離級別下的一致性讀及鎖的差異

前面講過,鎖和多版本數據是InnoDB實現一致性讀和ISO/ANSI SQL92隔離級別的手段,因此,在不同的隔離級別下,InnoDB處理SQL時采用的一致性讀策略和需要的鎖是不同的。同時,數據恢復和復制機制的特點,也對一些SQL的一致性讀策略和鎖策略有很大影響。將這些特性歸納成如下表所示的內容,以便讀者查閱。

InnoDB存儲引擎中不同SQL在不同隔離級別下鎖比較

隔離級別

一致性讀和鎖

SQL

Read Uncommited Read Commited Repeatable Read Serializable
SQL 條件
select 相等 None locks Consisten read/None lock Consisten read/None lock Share locks
范圍 None locks Consisten read/None lock Consisten read/None lock Share Next-Key
update 相等 exclusive locks exclusive locks exclusive locks Exclusive locks
范圍 exclusive next-key exclusive next-key exclusive next-key exclusive next-key
Insert N/A exclusive locks exclusive locks exclusive locks exclusive locks
replace 無鍵沖突 exclusive locks exclusive locks exclusive locks exclusive locks
鍵沖突 exclusive next-key exclusive next-key exclusive next-key exclusive next-key
delete 相等 exclusive locks exclusive locks exclusive locks exclusive locks
范圍 exclusive next-key exclusive next-key exclusive next-key exclusive next-key
Select ... from ... Lock in share mode 相等 Share locks Share locks Share locks Share locks
范圍 Share locks Share locks Share Next-Key Share Next-Key
Select * from ... For update 相等 exclusive locks exclusive locks exclusive locks exclusive locks
范圍 exclusive locks Share locks exclusive next-key exclusive next-key

Insert into ... Select ...

(指源表鎖)

innodb_locks_unsafe_for_binlog=off Share Next-Key Share Next-Key Share Next-Key Share Next-Key
innodb_locks_unsafe_for_binlog=on None locks Consisten read/None lock Consisten read/None lock Share Next-Key

create table ... Select ...

(指源表鎖)

innodb_locks_unsafe_for_binlog=off Share Next-Key Share Next-Key Share Next-Key Share Next-Key
innodb_locks_unsafe_for_binlog=on None locks Consisten read/None lock Consisten read/None lock Share Next-Key

從上表可以看出:對于許多SQL,隔離級別越高,InnoDB給記錄集加的鎖就越嚴格(尤其是使用范圍條件的時候),產生鎖沖突的可能性也就越高,從而對并發(fā)性事務處理性能的影響也就越大。因此,我們在應用中,應該盡量使用較低的隔離級別,以減少鎖爭用的機率。實際上,通過優(yōu)化事務邏輯,大部分應用使用Read Commited隔離級別就足夠了。對于一些確實需要更高隔離級別的事務,可以通過在程序中執(zhí)行SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ或SET SESSION TRANSACTION ISOLATION LEVEL SERIALIZABLE動態(tài)改變隔離級別的方式滿足需求。

什么時候使用表鎖

對于InnoDB表,在絕大部分情況下都應該使用行級鎖,因為事務和行鎖往往是我們之所以選擇InnoDB表的理由。但在個別特殊事務中,也可以考慮使用表級鎖。

  • 第一種情況是:事務需要更新大部分或全部數據,表又比較大,如果使用默認的行鎖,不僅這個事務執(zhí)行效率低,而且可能造成其他事務長時間鎖等待和鎖沖突,這種情況下可以考慮使用表鎖來提高該事務的執(zhí)行速度。

  • 第二種情況是:事務涉及多個表,比較復雜,很可能引起死鎖,造成大量事務回滾。這種情況也可以考慮一次性鎖定事務涉及的表,從而避免死鎖、減少數據庫因事務回滾帶來的開銷。

當然,應用中這兩種事務不能太多,否則,就應該考慮使用MyISAM表了。

在InnoDB下,使用表鎖要注意以下兩點。

(1)使用LOCK TABLES雖然可以給InnoDB加表級鎖,但必須說明的是,表鎖不是由InnoDB存儲引擎層管理的,而是由其上一層──MySQL Server負責的,僅當autocommit=0、innodb_table_locks=1(默認設置)時,InnoDB層才能知道MySQL加的表鎖,MySQL Server也才能感知InnoDB加的行鎖,這種情況下,InnoDB才能自動識別涉及表級鎖的死鎖;否則,InnoDB將無法自動檢測并處理這種死鎖。有關死鎖,下一小節(jié)還會繼續(xù)討論。

(2)在用 LOCK TABLES對InnoDB表加鎖時要注意,要將AUTOCOMMIT設為0,否則MySQL不會給表加鎖;事務結束前,不要用UNLOCK TABLES釋放表鎖,因為UNLOCK TABLES會隱含地提交事務;COMMIT或ROLLBACK并不能釋放用LOCK TABLES加的表級鎖,必須用UNLOCK TABLES釋放表鎖。正確的方式見如下語句:

例如,如果需要寫表t1并從表t讀,可以按如下做:

SET AUTOCOMMIT=0;
LOCK TABLES t1 WRITE, t2 READ, ...;
[do something with tables t1 and t2 here];
COMMIT;
UNLOCK TABLES;

關于死鎖

上文講過,MyISAM表鎖是deadlock free的,這是因為MyISAM總是一次獲得所需的全部鎖,要么全部滿足,要么等待,因此不會出現死鎖。但在InnoDB中,除單個SQL組成的事務外,鎖是逐步獲得的,這就決定了在InnoDB中發(fā)生死鎖是可能的。如下所示的就是一個發(fā)生死鎖的例子。

InnoDB存儲引擎中的死鎖例子

session_1 session_2
mysql> set autocommit = 0;
Query OK, 0 rows affected (0.00 sec)
mysql> select * from table_1 where where id=1 for update;
...

做一些其他處理...

mysql> set autocommit = 0;
Query OK, 0 rows affected (0.00 sec)
mysql> select * from table_2 where id=1 for update;
...
select * from table_2 where id =1 for update;

因session_2已取得排他鎖,等待

做一些其他處理...
mysql> select * from table_1 where where id=1 for update;

死鎖

在上面的例子中,兩個事務都需要獲得對方持有的排他鎖才能繼續(xù)完成事務,這種循環(huán)鎖等待就是典型的死鎖。

發(fā)生死鎖后,InnoDB一般都能自動檢測到,并使一個事務釋放鎖并回退,另一個事務獲得鎖,繼續(xù)完成事務。但在涉及外部鎖,或涉及表鎖的情況下,InnoDB并不能完全自動檢測到死鎖,這需要通過設置鎖等待超時參數 innodb_lock_wait_timeout來解決。需要說明的是,這個參數并不是只用來解決死鎖問題,在并發(fā)訪問比較高的情況下,如果大量事務因無法立即獲得所需的鎖而掛起,會占用大量計算機資源,造成嚴重性能問題,甚至拖跨數據庫。我們通過設置合適的鎖等待超時閾值,可以避免這種情況發(fā)生。

通常來說,死鎖都是應用設計的問題,通過調整業(yè)務流程、數據庫對象設計、事務大小,以及訪問數據庫的SQL語句,絕大部分死鎖都可以避免。下面就通過實例來介紹幾種避免死鎖的常用方法。

(1)在應用中,如果不同的程序會并發(fā)存取多個表,應盡量約定以相同的順序來訪問表,這樣可以大大降低產生死鎖的機會。在下面的例子中,由于兩個session訪問兩個表的順序不同,發(fā)生死鎖的機會就非常高!但如果以相同的順序來訪問,死鎖就可以避免。

InnoDB存儲引擎中表順序造成的死鎖例子

session_1 session_2
mysql> set autocommit=0;
Query OK, 0 rows affected (0.00 sec)
mysql> set autocommit=0;
Query OK, 0 rows affected (0.00 sec)
mysql> select first_name,last_name from actor where actor_id = 1 for update;
+------------+-----------+
| first_name | last_name |
+------------+-----------+
| PENELOPE   | GUINESS   |
+------------+-----------+
1 row in set (0.00 sec)
mysql> insert into country (country_id,country) values(110,'Test');
Query OK, 1 row affected (0.00 sec)
mysql> insert into country (country_id,country) values(110,'Test');

等待

mysql> select first_name,last_name from actor where actor_id = 1 for update;
+------------+-----------+
| first_name | last_name |
+------------+-----------+
| PENELOPE   | GUINESS   |
+------------+-----------+
1 row in set (0.00 sec)
mysql>  insert into country (country_id,country) values(110,'Test');
ERROR 1213 (40001): Deadlock found when trying to get lock; try restarting transaction

(2)在程序以批量方式處理數據的時候,如果事先對數據排序,保證每個線程按固定的順序來處理記錄,也可以大大降低出現死鎖的可能。

InnoDB存儲引擎中表數據操作順序不一致造成的死鎖例子

session_1 session_2
mysql> set autocommit=0;
Query OK, 0 rows affected (0.00 sec)
mysql> set autocommit=0;
Query OK, 0 rows affected (0.00 sec)
mysql> select first_name,last_name from actor where actor_id = 1 for update;
+------------+-----------+
| first_name | last_name |
+------------+-----------+
| PENELOPE   | GUINESS   |
+------------+-----------+
1 row in set (0.00 sec)
mysql> select first_name,last_name from actor where actor_id = 3 for update;
+------------+-----------+
| first_name | last_name |
+------------+-----------+
| ED         | CHASE     |
+------------+-----------+
1 row in set (0.00 sec)
mysql> select first_name,last_name from actor where actor_id = 3 for update;

等待

mysql> select first_name,last_name from actor where actor_id = 1 for update;
ERROR 1213 (40001): Deadlock found when trying to get lock; try restarting transaction
mysql> select first_name,last_name from actor where actor_id = 3 for update;
+------------+-----------+
| first_name | last_name |
+------------+-----------+
| ED         | CHASE     |
+------------+-----------+
1 row in set (4.71 sec)

(3)在事務中,如果要更新記錄,應該直接申請足夠級別的鎖,即排他鎖,而不應先申請共享鎖,更新時再申請排他鎖,因為當用戶申請排他鎖時,其他事務可能又已經獲得了相同記錄的共享鎖,從而造成鎖沖突,甚至死鎖。

(4)前面講過,在REPEATABLE-READ隔離級別下,如果兩個線程同時對相同條件記錄用SELECT...FOR UPDATE加排他鎖,在沒有符合該條件記錄情況下,兩個線程都會加鎖成功。程序發(fā)現記錄尚不存在,就試圖插入一條新記錄,如果兩個線程都這么做,就會出現死鎖。這種情況下,將隔離級別改成READ COMMITTED,就可避免問題,如下所示。

InnoDB存儲引擎中隔離級別引起的死鎖例子1

session_1 session_2
mysql> select @@tx_isolation;
+-----------------+
| @@tx_isolation  |
+-----------------+
| REPEATABLE-READ |
+-----------------+
1 row in set (0.00 sec)
mysql> set autocommit = 0;
Query OK, 0 rows affected (0.00 sec)
mysql> select @@tx_isolation;
+-----------------+
| @@tx_isolation  |
+-----------------+
| REPEATABLE-READ |
+-----------------+
1 row in set (0.00 sec)
mysql> set autocommit = 0;
Query OK, 0 rows affected (0.00 sec)

當前session對不存在的記錄加for update的鎖:

mysql> insert into actor (actor_id , first_name , last_name) values(201,'Lisa','Tom');

其他session也可以對不存在的記錄加for update的鎖:

mysql> insert into actor (actor_id, first_name , last_name) values(201,'Lisa','Tom');
ERROR 1213 (40001): Deadlock found when trying to get lock; try restarting transaction

因為其他session也對該記錄加了鎖,所以當前的插入會等待:

mysql> insert into actor (actor_id , first_name , last_name) values(201,'Lisa','Tom');

等待

因為其他session已經對記錄進行了更新,這時候再插入記錄就會提示死鎖并退出:

mysql> insert into actor (actor_id, first_name , last_name) values(201,'Lisa','Tom');
ERROR 1213 (40001): Deadlock found when trying to get lock; try restarting transaction

由于其他session已經退出,當前session可以獲得鎖并成功插入記錄:

mysql> insert into actor (actor_id , first_name , last_name) values(201,'Lisa','Tom');
Query OK, 1 row affected (13.35 sec)

(5)當隔離級別為READ COMMITTED時,如果兩個線程都先執(zhí)行SELECT...FOR UPDATE,判斷是否存在符合條件的記錄,如果沒有,就插入記錄。此時,只有一個線程能插入成功,另一個線程會出現鎖等待,當第1個線程提交后,第2個線程會因主鍵重出錯,但雖然這個線程出錯了,卻會獲得一個排他鎖!這時如果有第3個線程又來申請排他鎖,也會出現死鎖。

對于這種情況,可以直接做插入操作,然后再捕獲主鍵重異常,或者在遇到主鍵重錯誤時,總是執(zhí)行ROLLBACK釋放獲得的排他鎖,如下所示。

InnoDB存儲引擎中隔離級別引起的死鎖例子2

session_1 session_2 session_3
mysql> select @@tx_isolation;
+----------------+
| @@tx_isolation |
+----------------+
| READ-COMMITTED |
+----------------+
1 row in set (0.00 sec)
mysql> set autocommit=0;
Query OK, 0 rows affected (0.01 sec)
mysql> select @@tx_isolation;
+----------------+
| @@tx_isolation |
+----------------+
| READ-COMMITTED |
+----------------+
1 row in set (0.00 sec)
mysql> set autocommit=0;
Query OK, 0 rows affected (0.01 sec)
mysql> select @@tx_isolation;
+----------------+
| @@tx_isolation |
+----------------+
| READ-COMMITTED |
+----------------+
1 row in set (0.00 sec)
mysql> set autocommit=0;
Query OK, 0 rows affected (0.01 sec)

Session_1獲得for update的共享鎖:

mysql> select actor_id, first_name,last_name from actor where actor_id = 201 for update;
Empty set (0.00 sec)

由于記錄不存在,session_2也可以獲得for update的共享鎖:

mysql> select actor_id, first_name,last_name from actor where actor_id = 201 for update;
Empty set (0.00 sec)

Session_1可以成功插入記錄:

mysql> insert into actor (actor_id,first_name,last_name) values(201,'Lisa','Tom');
Query OK, 1 row affected (0.00 sec)

Session_2插入申請等待獲得鎖:

mysql> insert into actor (actor_id,first_name,last_name) values(201,'Lisa','Tom');

等待

Session_1成功提交:

mysql> commit;
Query OK, 0 rows affected (0.04 sec)

Session_2獲得鎖,發(fā)現插入記錄主鍵重,這個時候拋出了異常,但是并沒有釋放共享鎖:

mysql> insert into actor (actor_id,first_name,last_name) values(201,'Lisa','Tom');
ERROR 1062 (23000): Duplicate entry '201' for key 'PRIMARY'

Session_3申請獲得共享鎖,因為session_2已經鎖定該記錄,所以session_3需要等待:

mysql> select actor_id, first_name,last_name from actor where actor_id = 201 for update;

等待

這個時候,如果session_2直接對記錄進行更新操作,則會拋出死鎖的異常:

mysql> update actor set last_name='Lan' where actor_id = 201;
ERROR 1213 (40001): Deadlock found when trying to get lock; try restarting transaction

Session_2釋放鎖后,session_3獲得鎖:

mysql> select first_name, last_name from actor where actor_id = 201 for update;
+------------+-----------+
| first_name | last_name |
+------------+-----------+
| Lisa       | Tom       |
+------------+-----------+
1 row in set (31.12 sec)

盡管通過上面介紹的設計和SQL優(yōu)化等措施,可以大大減少死鎖,但死鎖很難完全避免。因此,在程序設計中總是捕獲并處理死鎖異常是一個很好的編程習慣。

如果出現死鎖,可以用SHOW INNODB STATUS命令來確定最后一個死鎖產生的原因。返回結果中包括死鎖相關事務的詳細信息,如引發(fā)死鎖的SQL語句,事務已經獲得的鎖,正在等待什么鎖,以及被回滾的事務等。據此可以分析死鎖產生的原因和改進措施。下面是一段SHOW INNODB STATUS輸出的樣例:

mysql> show innodb status \G
…….
------------------------
LATEST DETECTED DEADLOCK
------------------------
070710 14:05:16
*** (1) TRANSACTION:
TRANSACTION 0 117470078, ACTIVE 117 sec, process no 1468, OS thread id 1197328736 inserting
mysql tables in use 1, locked 1
LOCK WAIT 5 lock struct(s), heap size 1216
MySQL thread id 7521657, query id 673468054 localhost root update
insert into country (country_id,country) values(110,'Test')
………
*** (2) TRANSACTION:
TRANSACTION 0 117470079, ACTIVE 39 sec, process no 1468, OS thread id 1164048736 starting index read, thread declared inside InnoDB 500
mysql tables in use 1, locked 1
4 lock struct(s), heap size 1216, undo log entries 1
MySQL thread id 7521664, query id 673468058 localhost root statistics
select first_name,last_name from actor where actor_id = 1 for update
*** (2) HOLDS THE LOCK(S):
………
*** (2) WAITING FOR THIS LOCK TO BE GRANTED:
………
*** WE ROLL BACK TRANSACTION (1)
……

本文全面講解了Mysql表鎖,行鎖,共享鎖,排它鎖,間隙鎖的詳細使用方法,希望對大家有所幫助

相關文章

  • MySQL索引詳細解析

    MySQL索引詳細解析

    索引是有雙面性的,合理的建立索引可以提高數據庫的效率。但是如果沒有合理的構建索引和使用索引,可能會導致索引失效或者影響數據庫性能,這篇文章主要介紹了MySql索引原理與操作
    2022-10-10
  • MySQL?UPDATE多表關聯更新的實現示例

    MySQL?UPDATE多表關聯更新的實現示例

    MySQL可以基于多表查詢更新數據,本文主要介紹了MySQL?UPDATE多表關聯更新的實現示例,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-08-08
  • 解決MySql版本問題sql_mode=only_full_group_by

    解決MySql版本問題sql_mode=only_full_group_by

    這篇文章主要介紹了解決MySql版本問題sql_mode=only_full_group_by,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • Windows7下安裝使用MySQL8.0.16修改密碼、連接Navicat問題

    Windows7下安裝使用MySQL8.0.16修改密碼、連接Navicat問題

    這篇文章主要介紹了Windows7下安裝使用MySQL8.0.16修改密碼、連接Navicat問題,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-06-06
  • mysql數據庫重置表主鍵id的實現

    mysql數據庫重置表主鍵id的實現

    在我們的開發(fā)過程中,難免在做測試的時候會生成一些雜亂無章的SQL主鍵數據,本文主要介紹了mysql數據庫重置表主鍵id的實現,具有一定的參考價值,感興趣的可以了解一下
    2025-03-03
  • jdbc調用mysql存儲過程實現代碼

    jdbc調用mysql存儲過程實現代碼

    接下來將介紹下mysql存儲過程的創(chuàng)建及調用,調用時涉及到jdbc的知識,不熟悉的朋友還要溫習下jdbc哦,話不多說看代碼,希望可以幫助到你
    2013-03-03
  • window系統(tǒng)mysql無法輸入和無法顯示中文的解決方法

    window系統(tǒng)mysql無法輸入和無法顯示中文的解決方法

    這篇文章主要介紹了window系統(tǒng)mysql無法輸入和無法顯示中文的解決方法,本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-06-06
  • mysql5.7.20免安裝版配置方法圖文教程

    mysql5.7.20免安裝版配置方法圖文教程

    這篇文章主要為大家詳細介紹了mysql5.7.20 免安裝版配置方法圖文教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-05-05
  • 淺談MySQL timestamp(3)問題

    淺談MySQL timestamp(3)問題

    本文主要介紹了淺談MySQL timestamp(3)問題,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-01-01
  • MySQL中的join以及on條件的用法解析

    MySQL中的join以及on條件的用法解析

    這篇文章主要介紹了MySQL中的join以及on條件的用法,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11

最新評論

五十路老熟女码av| 春色激情网欧美成人| 久草视频在线一区二区三区资源站| 天天干天天操天天扣| 亚洲欧美一区二区三区爱爱动图| 精品一区二区三区欧美| 亚洲中文字字幕乱码| 欧美精品伦理三区四区| 18禁污污污app下载| 欧美成人黄片一区二区三区 | 亚洲丝袜老师诱惑在线观看| 98精产国品一二三产区区别| 瑟瑟视频在线观看免费视频| 日韩av中文在线免费观看| 午夜精品久久久久麻豆影视| 精品一区二区三区午夜| 中国把吊插入阴蒂的视频| 五十路熟女人妻一区二| av久久精品北条麻妃av观看| 精品视频中文字幕在线播放| 亚洲变态另类色图天堂网| 三级等保密码要求条款| 不卡日韩av在线观看| 在线视频这里只有精品自拍| 国产精品自拍视频大全| 日韩欧美中文国产在线| 91社福利《在线观看| 天天日天天干天天要| 熟妇一区二区三区高清版| 99热99这里精品6国产| 免费在线播放a级片| 欧美精品欧美极品欧美视频| 粉嫩欧美美人妻小视频| 制丝袜业一区二区三区| 丝袜肉丝一区二区三区四区在线| 成人激情文学网人妻| 女同性ⅹxx女同h偷拍| 中文字幕 人妻精品| 久久久久五月天丁香社区| 国产美女午夜福利久久| 午夜久久香蕉电影网| 国产精品视频资源在线播放| 人妻少妇性色欲欧美日韩| 欧美精品久久久久久影院| 999久久久久999| 国产精品视频资源在线播放| 中文字幕一区二区自拍| 九九视频在线精品播放| 国产精品黄色的av| 精品人妻一二三区久久| 日韩精品啪啪视频一道免费| 欧美一区二区中文字幕电影| 国产三级片久久久久久久 | 欧美在线一二三视频| 91传媒一区二区三区| 亚洲区美熟妇久久久久| 在线免费观看日本伦理| 大骚逼91抽插出水视频| 在线亚洲天堂色播av电影| 黄色三级网站免费下载| 无码国产精品一区二区高潮久久4| 国产一区二区三免费视频| 女生自摸在线观看一区二区三区| 国产亚洲视频在线二区| 亚洲欧美一区二区三区电影| 深夜男人福利在线观看| 欧美日韩国产一区二区三区三州| 三级av中文字幕在线观看| 天天干天天日天天谢综合156| 淫秽激情视频免费观看| 又粗又硬又猛又爽又黄的| 综合国产成人在线观看| 中文字幕在线免费第一页| 亚洲综合另类精品小说| 超碰在线中文字幕一区二区| 天堂资源网av中文字幕| 18禁网站一区二区三区四区| 精品国产亚洲av一淫| 人妻素人精油按摩中出| 欧美日本国产自视大全| 日曰摸日日碰夜夜爽歪歪| 日韩国产乱码中文字幕| 18禁网站一区二区三区四区| 亚洲在线一区二区欧美| 日本美女成人在线视频| 欧美特级特黄a大片免费| 日韩欧美国产精品91| 欧美爆乳肉感大码在线观看 | 青娱乐最新视频在线| 97人妻色免费视频| 欧美在线偷拍视频免费看| 色爱av一区二区三区| 亚洲免费av在线视频| 免费费一级特黄真人片 | 日韩影片一区二区三区不卡免费| 97人妻总资源视频| 亚洲日产av一区二区在线| 午夜毛片不卡免费观看视频| 亚洲护士一区二区三区| 国产91久久精品一区二区字幕| 99的爱精品免费视频| 97超碰国语国产97超碰| av中文字幕网址在线| 日本最新一二三区不卡在线| 人妻少妇av在线观看| av资源中文字幕在线观看| caoporn蜜桃视频| av成人在线观看一区| 五十路av熟女松本翔子| 国产三级片久久久久久久| 成熟熟女国产精品一区| 国产精品一区二区三区蜜臀av| 可以在线观看的av中文字幕| 国产精品成久久久久三级蜜臀av | 欧美综合婷婷欧美综合| 日美女屁股黄邑视频| 中国黄片视频一区91| 淫秽激情视频免费观看| 久久热这里这里只有精品| 美女在线观看日本亚洲一区| 中文字幕综合一区二区| 97精品视频在线观看| 91免费观看在线网站 | 黄色黄色黄片78在线| av在线免费观看亚洲天堂| 福利午夜视频在线观看| 国产片免费观看在线观看| 欧美激情电影免费在线| 亚洲精品国品乱码久久久久| 亚洲午夜在线视频福利| 夜色福利视频在线观看| 超级av免费观看一区二区三区| 91天堂精品一区二区| 日本男女操逼视频免费看| 精品一区二区三区欧美| 欧美精产国品一二三产品价格 | 99精品国自产在线人| 日韩欧美一级aa大片| 国产精品中文av在线播放| 久草视频首页在线观看| 大鸡巴后入爆操大屁股美女| 2022国产综合在线干| 精品国产午夜视频一区二区| 国产自拍黄片在线观看| 一区二区三区久久中文字幕| 黄色成人在线中文字幕| 福利片区一区二体验区| 男人插女人视频网站| 欧美一级片免费在线成人观看 | 天美传媒mv视频在线观看| 大胸性感美女羞爽操逼毛片| 国产精品视频一区在线播放| 91精品国产麻豆国产| 亚洲av无乱一区二区三区性色| 啊啊啊想要被插进去视频| 欧美区一区二区三视频| 中文字幕高清在线免费播放| 性生活第二下硬不起来| 老司机深夜免费福利视频在线观看| 91精品国产观看免费| 日韩美在线观看视频黄| 午夜精品在线视频一区| 国产熟妇人妻ⅹxxxx麻豆| 国产极品美女久久久久久| 国产高清精品极品美女| 18禁无翼鸟成人在线| 中文字幕乱码av资源| 久久国产精品精品美女| 日本少妇精品免费视频| 韩国女主播精品视频网站| 亚洲av无乱一区二区三区性色| 老司机免费视频网站在线看| 亚洲国产中文字幕啊啊啊不行了| 偷拍自拍 中文字幕| 97精品视频在线观看| 一区二区三区综合视频| 97国产在线av精品| 人人妻人人爽人人添夜| 伊人综合aⅴ在线网| 日韩一个色综合导航| 色爱av一区二区三区| 国产亚洲精品品视频在线| 中文字幕网站你懂的| 欧美日韩不卡一区不区二区| 免费在线播放a级片| 韩国一级特黄大片做受| 成人高潮aa毛片免费| 久草视频在线一区二区三区资源站| 亚洲熟女女同志女同| 黄网十四区丁香社区激情五月天| 91色九色porny| 国内自拍第一页在线观看| 免费在线福利小视频| 国产亚洲欧美视频网站| 中文字幕最新久久久| 11久久久久久久久久久| 成人H精品动漫在线无码播放| 经典国语激情内射视频| 免费大片在线观看视频网站| 2019av在线视频| 日韩精品一区二区三区在线播放| 人妻少妇av在线观看| 亚洲精品国产久久久久久| 亚洲高清国产一区二区三区| 午夜福利人人妻人人澡人人爽| 亚洲欧美福利在线观看| 青青青青在线视频免费观看| 色哟哟国产精品入口| 成人蜜臀午夜久久一区| jiujiure精品视频在线| 日韩精品电影亚洲一区| 国产精彩对白一区二区三区| 特级无码毛片免费视频播放| 非洲黑人一级特黄片| 黄色成年网站午夜在线观看| 久久精品久久精品亚洲人| 伊人精品福利综合导航| 粉嫩av懂色av蜜臀av| 做爰视频毛片下载蜜桃视频1| 三级黄色亚洲成人av| av在线观看网址av| 老司机你懂得福利视频| 大香蕉大香蕉在线看| 91国语爽死我了不卡| 激情五月婷婷免费视频| 中文 成人 在线 视频| 亚洲成人激情视频免费观看了| 人妻另类专区欧美制服| 久青青草视频手机在线免费观看| 亚洲精品欧美日韩在线播放 | 91国产在线免费播放| 中文字母永久播放1区2区3区| 人人妻人人澡欧美91精品| 九色视频在线观看免费| 五月天色婷婷在线观看视频免费| 四虎永久在线精品免费区二区| 精品久久久久久久久久久a√国产 日本女大学生的黄色小视频 | 在线国产日韩欧美视频| 少妇系列一区二区三区视频| 亚洲免费在线视频网站| 玖玖一区二区在线观看| 亚洲福利午夜久久久精品电影网| 国产精彩对白一区二区三区| 成人福利视频免费在线| 午夜在线观看岛国av,com| 最新欧美一二三视频 | 激情图片日韩欧美人妻| 大屁股肉感人妻中文字幕在线| 国产乱子伦一二三区| 天天射,天天操,天天说| 国产日韩一区二区在线看| 白嫩白嫩美女极品国产在线观看| 97成人免费在线观看网站| 污污小视频91在线观看| 青青色国产视频在线| 免费黄高清无码国产| 2021天天色天天干| 国产精选一区在线播放| 夏目彩春在线中文字幕| av中文字幕在线导航| 无码精品一区二区三区人 | 欧美怡红院视频在线观看| 亚洲中文字幕国产日韩| 岛国av高清在线成人在线| 日韩亚洲高清在线观看| AV无码一区二区三区不卡| 日韩美av高清在线| 男生舔女生逼逼视频| 免费福利av在线一区二区三区| 国产熟妇乱妇熟色T区| 91香蕉成人app下载| 日韩国产乱码中文字幕| AV无码一区二区三区不卡| 免费黄页网站4188| 中文字日产幕乱六区蜜桃| 久久美欧人妻少妇一区二区三区| 大陆av手机在线观看| 91国内精品自线在拍白富美| 岳太深了紧紧的中文字幕| 天天爽夜夜爽人人爽QC| 成年人黄色片免费网站| 视频二区在线视频观看| 国产一区自拍黄视频免费观看| 国产成人综合一区2区| 日本熟妇色熟妇在线观看| 自拍 日韩 欧美激情| 国产又粗又黄又硬又爽| 乱亲女秽乱长久久久| 国产精品精品精品999| 天天干天天爱天天色| 日韩午夜福利精品试看| 天天色天天舔天天射天天爽| 绯色av蜜臀vs少妇| 国产精品久久久久久久久福交| 亚洲人人妻一区二区三区| 91极品大一女神正在播放| 天天色天天操天天舔| 午夜美女少妇福利视频| 北条麻妃肉色丝袜视频| 超pen在线观看视频公开97| 国产大鸡巴大鸡巴操小骚逼小骚逼 | 国产黄色a级三级三级三级| 中出中文字幕在线观看| 日本午夜爽爽爽爽爽视频在线观看| 午夜精品一区二区三区福利视频 | 欧美色呦呦最新网址| 黄色在线观看免费观看在线| 中国视频一区二区三区| 亚洲天天干 夜夜操| 天天色天天操天天透| 黄色片一级美女黄色片| 免费成人va在线观看| 亚洲精品一线二线在线观看| 亚洲精品欧美日韩在线播放| 大香蕉伊人国产在线| 国产精品三级三级三级| 欧美精品 日韩国产| 日本少妇的秘密免费视频| 国产高潮无码喷水AV片在线观看| 蜜臀av久久久久蜜臀av麻豆| 在线观看一区二区三级| 国产麻豆剧传媒精品国产av蜜桃 | 一区二区三区av高清免费| www日韩a级s片av| 在线免费观看靠比视频的网站| av手机免费在线观看高潮| 91高清成人在线视频| 久久久久久久一区二区三| 在线免费91激情四射 | 在线观看911精品国产| 色吉吉影音天天干天天操| 91在线视频在线精品3| 免费费一级特黄真人片| 91精品免费久久久久久| 免费十精品十国产网站| 大胆亚洲av日韩av| av线天堂在线观看| 国产极品美女久久久久久| 亚洲日本一区二区三区 | 亚洲一区av中文字幕在线观看| 婷婷久久久综合中文字幕| 不卡日韩av在线观看| 啪啪啪操人视频在线播放| av完全免费在线观看av| 色婷婷六月亚洲综合香蕉| 亚洲特黄aaaa片| 午夜激情精品福利视频| 成人24小时免费视频| 欧美一区二区三区激情啪啪啪| 亚洲高清视频在线不卡| 人妻av无码专区久久绿巨人| 成人24小时免费视频| 精品欧美一区二区vr在线观看| 亚洲av人人澡人人爽人人爱| 久久www免费人成一看片| 91亚洲国产成人精品性色| 国产 在线 免费 精品| 动漫美女的小穴视频| 午夜青青草原网在线观看| 青青青青在线视频免费观看| 亚洲一区二区人妻av| 自拍偷拍 国产资源| 鸡巴操逼一级黄色气| AV无码一区二区三区不卡| 国产av欧美精品高潮网站| 蝴蝶伊人久久中文娱乐网| 亚洲1卡2卡三卡4卡在线观看| 午夜精品一区二区三区福利视频| 亚洲少妇高潮免费观看| 综合一区二区三区蜜臀| 在线免费观看日本伦理| 欧美精品免费aaaaaa| 中文 成人 在线 视频| 中文字幕av一区在线观看| 日本精品视频不卡一二三| 人妻少妇亚洲精品中文字幕| 99热久久极品热亚洲| 日韩av熟妇在线观看| 老熟妇凹凸淫老妇女av在线观看| 国产精品亚洲在线观看| 亚洲欧美成人综合视频| sspd152中文字幕在线| 亚洲免费视频欧洲免费视频| 综合激情网激情五月五月婷婷| 国产黄色大片在线免费播放| 中文字幕之无码色多多| 亚洲 中文 自拍 无码| 亚洲欧美综合另类13p| 天天日天天舔天天射进去| 青青热久免费精品视频在线观看| 成年女人免费播放视频| 国产97在线视频观看| 久久三久久三久久三久久| 99国内精品永久免费视频| 福利视频一区二区三区筱慧| 中文字幕人妻三级在线观看| 直接能看的国产av| 国产精品人妻一区二区三区网站| 91人妻精品久久久久久久网站| 适合午夜一个人看的视频| 成人亚洲国产综合精品| 亚洲欧美久久久久久久久| 75国产综合在线视频| 1000部国产精品成人观看视频 | 国产综合视频在线看片| xxx日本hd高清| 我想看操逼黄色大片| 天天做天天干天天操天天射| 91天堂天天日天天操| 欧美成人小视频在线免费看| 中出中文字幕在线观看| 中文字幕一区二区人妻电影冢本| 午夜精品一区二区三区4| 91精品资源免费观看| 天天色天天操天天舔| 精品久久婷婷免费视频| 国产精品三级三级三级| 国产视频精品资源网站| 国产一区二区三免费视频| 国产实拍勾搭女技师av在线| 天天日天天日天天射天天干| 日本熟女50视频免费| 欧美精品资源在线观看| 性感美女诱惑福利视频| av中文字幕在线观看第三页| 人妻少妇亚洲精品中文字幕| 玩弄人妻熟妇性色av少妇| 91天堂天天日天天操| 中文字幕在线一区精品| 18禁美女羞羞免费网站| 51国产偷自视频在线播放| 精品区一区二区三区四区人妻| 国产一区二区神马久久| 成年人的在线免费视频| 97a片免费在线观看| 一区二区三区另类在线| 黄色成年网站午夜在线观看| 国产熟妇人妻ⅹxxxx麻豆| 在线观看av2025| 社区自拍揄拍尻屁你懂的| 亚洲天堂第一页中文字幕| 日韩欧美一级精品在线观看| 亚洲欧美激情中文字幕| 538精品在线观看视频| 中文字幕一区二 区二三区四区| 91在线免费观看成人| 揄拍成人国产精品免费看视频 | 亚洲成人免费看电影| 亚洲精品久久综合久| 人妻丝袜精品中文字幕| caoporm超碰国产| 亚洲综合另类欧美久久| 在线观看av2025| 精品成人啪啪18免费蜜臀| 4个黑人操素人视频网站精品91 | 久久精品亚洲国产av香蕉| 中文字幕日韩精品就在这里| 欧美精品黑人性xxxx| 国产之丝袜脚在线一区二区三区| 人妻丝袜av在线播放网址| 婷婷五月亚洲综合在线| 9l人妻人人爽人人爽| 中文字幕人妻被公上司喝醉在线| 青青草原色片网站在线观看| 人妻丝袜榨强中文字幕| 亚洲第17页国产精品| 97青青青手机在线视频 | 国产综合高清在线观看| 久久久久久久一区二区三| 搡老熟女一区二区在线观看| 日本性感美女写真视频| 少妇高潮无套内谢麻豆| 一区二区三区视频,福利一区二区| 91欧美在线免费观看| 日本av在线一区二区三区| 成人av亚洲一区二区| 午夜国产福利在线观看| 亚洲精品ww久久久久久| 久久国产精品精品美女| 国产女人叫床高潮大片视频| 福利午夜视频在线合集| jiujiure精品视频在线| 国产变态另类在线观看| 美女在线观看日本亚洲一区| 强行扒开双腿猛烈进入免费版| 亚洲精品在线资源站| 黄色的网站在线免费看| 绝顶痉挛大潮喷高潮无码| 一区二区三区激情在线| aiss午夜免费视频| 成人精品在线观看视频| 亚洲国产第一页在线观看| 一区二区三区视频,福利一区二区| 大鸡吧插逼逼视频免费看| 国产精品手机在线看片| 亚洲精品成人网久久久久久小说 | 自拍偷拍亚洲欧美在线视频| 国产激情av网站在线观看| 国产自拍在线观看成人| 丰满少妇人妻xxxxx| 欧美日韩熟女一区二区三区| 人妻熟女中文字幕aⅴ在线| 激情人妻校园春色亚洲欧美| 亚洲在线免费h观看网站| 韩国亚洲欧美超一级在线播放视频| 国产a级毛久久久久精品| av中文字幕福利网| 人妻在线精品录音叫床| 精产国品久久一二三产区区别 | 超pen在线观看视频公开97| 又大又湿又爽又紧A视频| 99久久久无码国产精品性出奶水| 啊啊啊视频试看人妻| 激情内射在线免费观看| 午夜精品在线视频一区| 日本人妻少妇18—xx| 偷青青国产精品青青在线观看| 任我爽精品视频在线播放| 亚洲免费成人a v| 经典国语激情内射视频| 男人和女人激情视频| 北条麻妃高跟丝袜啪啪| 亚洲av黄色在线网站| 男人的天堂av日韩亚洲| gav成人免费播放| 偷拍自拍国产在线视频| 亚洲av无乱一区二区三区性色| 精品区一区二区三区四区人妻 | 日韩精品中文字幕播放| 视频一区二区综合精品| 婷婷午夜国产精品久久久| 人妻少妇亚洲精品中文字幕| 老司机在线精品福利视频| 国产精品自拍偷拍a| av一本二本在线观看| 成年美女黄网站18禁久久| 成人av在线资源网站| 精品欧美一区二区vr在线观看| 免费福利av在线一区二区三区| 天天日天天天天天天天天天天| 亚洲天天干 夜夜操| 4个黑人操素人视频网站精品91| 天天日天天敢天天干| 自拍偷区二区三区麻豆| 狠狠躁狠狠爱网站视频| 国产97视频在线精品| 少妇系列一区二区三区视频| 性感美女高潮视频久久久| 亚洲美女高潮喷浆视频| 色偷偷伊人大杳蕉综合网| 日韩欧美高清免费在线| 天天操,天天干,天天射| 最新国产精品拍在线观看| 精品成人午夜免费看| 欧美一级片免费在线成人观看| 91久久综合男人天堂| lutube在线成人免费看| 大鸡吧插逼逼视频免费看| av高潮迭起在线观看| 亚洲熟女女同志女同| 亚洲av男人的天堂你懂的| 色综合久久五月色婷婷综合| 99热这里只有国产精品6| 欧美视频一区免费在线| 晚上一个人看操B片| 蜜臀成人av在线播放| 欧美精品资源在线观看| 亚洲精品 欧美日韩| 午夜在线精品偷拍一区二| 中文字幕一区二区亚洲一区| av在线观看网址av| 久久综合老鸭窝色综合久久| 性色蜜臀av一区二区三区| 精品91自产拍在线观看一区| 成人色综合中文字幕| 国产日韩一区二区在线看| 精品人人人妻人人玩日产欧| 蜜桃视频入口久久久| 日本www中文字幕| 91免费放福利在线观看| 成人免费毛片aaaa| 直接能看的国产av| 国产精品国产三级麻豆| 天天操夜夜操天天操天天操| 日美女屁股黄邑视频| 中文字幕一区二区三区人妻大片 | 肏插流水妹子在线乐播下载 | 在线观看欧美黄片一区二区三区| 2012中文字幕在线高清| 韩国AV无码不卡在线播放 | 中文字幕一区二区自拍| 夜色撩人久久7777| 国产视频在线视频播放| gav成人免费播放| 亚洲中文字幕国产日韩| 六月婷婷激情一区二区三区| 女蜜桃臀紧身瑜伽裤| 天天操天天插天天色| 日韩美女福利视频网| 男人的天堂av日韩亚洲| 亚洲人妻30pwc| 午夜久久久久久久99| 黄色录像鸡巴插进去| 国产卡一卡二卡三乱码手机| 九色视频在线观看免费| 欧美精品一二三视频| 搞黄色在线免费观看| 亚国产成人精品久久久| 免费无码人妻日韩精品一区二区 | 四虎永久在线精品免费区二区| 国产成人精品一区在线观看| 日本后入视频在线观看 | 丝袜美腿视频诱惑亚洲无 | 中文字幕—97超碰网| 老司机免费视频网站在线看| 国产又粗又猛又爽又黄的视频美国| 91精品国产麻豆国产| 国产女孩喷水在线观看| 无码中文字幕波多野不卡| 免费无毒热热热热热热久| 丰满少妇翘臀后进式| 男女啪啪啪啪啪的网站| 一区二区三区四区视频在线播放| 中文字幕第三十八页久久| 中文字幕国产专区欧美激情| 精品亚洲国产中文自在线| 亚洲一区久久免费视频| 天天操天天射天天操天天天| 亚洲av日韩精品久久久| 久久精品36亚洲精品束缚| 久久久久久久久久久免费女人| 91chinese在线视频| 777奇米久久精品一区| 四川乱子伦视频国产vip| 成年人中文字幕在线观看| 日韩av免费观看一区| 插小穴高清无码中文字幕 | 狠狠躁狠狠爱网站视频| 少妇深喉口爆吞精韩国| 高潮喷水在线视频观看| 偷拍自拍 中文字幕| 亚洲av无硬久久精品蜜桃| 少妇露脸深喉口爆吞精| 天天干狠狠干天天操| 91久久综合男人天堂| 韩国AV无码不卡在线播放| 午夜毛片不卡在线看| 家庭女教师中文字幕在线播放| 97色视频在线观看| 超级av免费观看一区二区三区| 视频二区在线视频观看| 中文字幕无码日韩专区免费| 国产精品视频欧美一区二区| 在线免费观看欧美小视频| 99久久久无码国产精品性出奶水| 视频一区二区三区高清在线| 果冻传媒av一区二区三区| 日韩欧美在线观看不卡一区二区| 亚洲天堂第一页中文字幕| 国产不卡av在线免费| 国产精品sm调教视频| 日本男女操逼视频免费看| 韩国AV无码不卡在线播放| 亚洲综合在线观看免费| 国产伦精品一区二区三区竹菊| 99热99这里精品6国产| 2018在线福利视频| 都市家庭人妻激情自拍视频| 亚洲国产欧美国产综合在线| 一色桃子人妻一区二区三区| 天天色天天操天天舔| av中文在线天堂精品| 天天操夜夜操天天操天天操| 一二三中文乱码亚洲乱码one | 欧美精品欧美极品欧美视频 | 国产精品人妻熟女毛片av久| 欧美天堂av无线av欧美| asmr福利视频在线观看| 在线观看视频一区麻豆| 熟女人妻在线观看视频| 男人天堂色男人av| 久青青草视频手机在线免费观看| 在线新三级黄伊人网| 91麻豆精品秘密入口在线观看| 香蕉aⅴ一区二区三区| 国产精品视频男人的天堂| 成年人免费看在线视频| 91久久综合男人天堂| 91亚洲手机在线视频播放| 青青操免费日综合视频观看| 久久三久久三久久三久久| 9国产精品久久久久老师| 激情五月婷婷免费视频| 黄色的网站在线免费看| 久久这里有免费精品| 欧美视频综合第一页| 首之国产AV医生和护士小芳| 国产女孩喷水在线观看| 精品少妇一二三视频在线| 加勒比视频在线免费观看| 国产精品一区二区久久久av| 国产第一美女一区二区三区四区| 青青草国内在线视频精选| 欧美麻豆av在线播放| 久久99久久99精品影院| 欧美va亚洲va天堂va| 久久久久久久亚洲午夜综合福利 | 亚洲蜜臀av一区二区三区九色 | 经典国语激情内射视频| 亚洲中文字字幕乱码| 黄色成人在线中文字幕| 日本韩国免费一区二区三区视频 | 专门看国产熟妇的网站| 日本一本午夜在线播放| 九九热99视频在线观看97| 精内国产乱码久久久久久| 九色视频在线观看免费| 国产一级麻豆精品免费| 性欧美激情久久久久久久| 在线观看免费岛国av| 加勒比视频在线免费观看| 国产日韩精品一二三区久久久| 偷拍自拍亚洲美腿丝袜| 青青草在观免费国产精品| 国产亚洲四十路五十路| 91精品激情五月婷婷在线| 中文字幕在线观看极品视频| 91传媒一区二区三区| 日本少妇的秘密免费视频| 欧美视频不卡一区四区| 2022中文字幕在线| 5528327男人天堂| av天堂资源最新版在线看| 成人18禁网站在线播放| 中文字幕av一区在线观看| av在线免费中文字幕| 天堂av在线官网中文| 岛国av高清在线成人在线| 久久久久久久久久性潮| 国产在线91观看免费观看| 黄色视频在线观看高清无码| 免费看高清av的网站| free性日本少妇| 欧美xxx成人在线| 91大神福利视频网| 9久在线视频只有精品| 女人精品内射国产99| 97a片免费在线观看| 专门看国产熟妇的网站| 91小伙伴中女熟女高潮| 男人天堂av天天操| 青青社区2国产视频| 欧美视频中文一区二区三区| 亚洲福利天堂久久久久久| 日本男女操逼视频免费看| 欧洲日韩亚洲一区二区三区| 中出中文字幕在线观看| 在线播放 日韩 av| 日韩黄色片在线观看网站| 在线不卡成人黄色精品| 性生活第二下硬不起来| 亚洲精品乱码久久久久久密桃明| 男人天堂av天天操| av中文字幕在线导航| 18禁美女黄网站色大片下载| 青青社区2国产视频| 人妻少妇av在线观看| 天天操天天爽天天干| 亚洲视频在线观看高清| 亚洲天堂成人在线观看视频网站| 人妻少妇性色欲欧美日韩 | 国产亚洲国产av网站在线| 亚洲精品午夜aaa久久| 日日操夜夜撸天天干| 2021久久免费视频| 天天日夜夜操天天摸| 中文字幕在线免费第一页| 成人av亚洲一区二区| 亚洲av第国产精品| 日日夜夜精品一二三| 国产亚洲欧美45p| 91人妻精品久久久久久久网站 | 欧美3p在线观看一区二区三区| 天堂av在线最新版在线| 久草视频首页在线观看| 97少妇精品在线观看| 国产精品入口麻豆啊啊啊| 青青青艹视频在线观看| 国产午夜无码福利在线看| 熟女视频一区,二区,三区| 动漫精品视频在线观看| 91一区精品在线观看| 黄色片黄色片wyaa| 久久永久免费精品人妻专区| 中文字幕1卡1区2区3区| 麻豆性色视频在线观看| 亚洲一区av中文字幕在线观看| 欧洲欧美日韩国产在线| 日本性感美女写真视频| 国产福利小视频免费观看| 操操网操操伊剧情片中文字幕网| huangse网站在线观看| 国产精品视频男人的天堂| 1000部国产精品成人观看视频 | weyvv5国产成人精品的视频| avjpm亚洲伊人久久| 美味人妻2在线播放| 老司机欧美视频在线看| 操操网操操伊剧情片中文字幕网| 日日爽天天干夜夜操| 亚洲高清免费在线观看视频| 五十路在线观看完整版| 国产福利小视频二区| 天堂av在线官网中文| 国产视频精品资源网站| 好吊操视频这里只有精品| 日韩人妻xxxxx| 在线网站你懂得老司机| 青青青视频自偷自拍38碰| 五月色婷婷综合开心网4438| 成人av亚洲一区二区| 在线国产精品一区二区三区| 欧美黑人巨大性xxxxx猛交| 2021久久免费视频| 在线观看av2025| 91大神福利视频网| av天堂加勒比在线| 在线视频免费观看网| 大香蕉福利在线观看| 欧美日韩国产一区二区三区三州| 国产1区,2区,3区| 天干天天天色天天日天天射| 欧美天堂av无线av欧美| 国产aⅴ一线在线观看| 青青青国产片免费观看视频| 日韩成人性色生活片| 亚洲av琪琪男人的天堂| 成人24小时免费视频| 91p0rny九色露脸熟女| 欧美综合婷婷欧美综合| 大香蕉福利在线观看| 亚欧在线视频你懂的| 自拍偷拍一区二区三区图片| 天天操天天干天天插| 在线观看黄色成年人网站| 国产又粗又猛又爽又黄的视频在线| 成人在线欧美日韩国产| 国内资源最丰富的网站| 青青社区2国产视频| 天天操,天天干,天天射| 国产又粗又猛又爽又黄的视频在线| 大陆av手机在线观看| 欧美香蕉人妻精品一区二区| 久久久精品999精品日本| 传媒在线播放国产精品一区| 国产97视频在线精品| 日本一区二区三区免费小视频| 亚洲一区二区三区五区| 97超碰免费在线视频| 亚洲av自拍偷拍综合| 日韩av有码一区二区三区4| 岛国黄色大片在线观看 | 一区二区三区综合视频| 欧美日本在线观看一区二区| 天码人妻一区二区三区在线看| 日本午夜爽爽爽爽爽视频在线观看| 人妻av无码专区久久绿巨人 | 午夜在线观看岛国av,com| 一区二区三区 自拍偷拍| 国产亚洲视频在线观看| 91精品激情五月婷婷在线| 精品久久久久久久久久中文蒉| 国产大学生援交正在播放| 九一传媒制片厂视频在线免费观看| 91国语爽死我了不卡| 精品国产在线手机在线| 97小视频人妻一区二区| 视频一区二区在线免费播放| 国产在线自在拍91国语自产精品| 大香蕉伊人国产在线| 久久这里只有精彩视频免费| 最新97国产在线视频| 自拍偷拍,中文字幕| 999九九久久久精品| 亚洲激情偷拍一区二区| 动漫精品视频在线观看| 黄色大片男人操女人逼| 亚洲av可乐操首页| 韩国一级特黄大片做受| 日本三极片视频网站观看| 欧美亚洲一二三区蜜臀| 成人区人妻精品一区二视频| 日韩欧美国产一区不卡| 国产日韩一区二区在线看| 国产精品亚洲а∨天堂免| 国产一区二区火爆视频| 久久精品国产亚洲精品166m| 91超碰青青中文字幕| 久久久91蜜桃精品ad| 福利在线视频网址导航| 成人伊人精品色xxxx视频| 国产真实乱子伦a视频| 97精品综合久久在线| 国产在线观看免费人成短视频| 午夜在线观看一区视频| 午夜福利人人妻人人澡人人爽| 天天日天天敢天天干| 亚洲熟妇无码一区二区三区| 一区国内二区日韩三区欧美| 亚洲视频在线观看高清| 天堂av在线官网中文| 欧美精品欧美极品欧美视频 | 中文字幕第三十八页久久| 亚洲欧美日韩视频免费观看| 亚洲丝袜老师诱惑在线观看| 开心 色 六月 婷婷| 亚洲av无码成人精品区辽| 国产美女午夜福利久久| 国产精品自拍视频大全| 久久久精品国产亚洲AV一| 久草视频在线一区二区三区资源站| 国产精品亚洲在线观看| 久久精品视频一区二区三区四区| 熟女视频一区,二区,三区| 亚洲精品福利网站图片| 日本韩国亚洲综合日韩欧美国产| 91快播视频在线观看| 久草电影免费在线观看| 少妇人妻二三区视频| 一区二区在线视频中文字幕| 秋霞午夜av福利经典影视| 免费在线黄色观看网站| 一区二区在线视频中文字幕| 18禁美女羞羞免费网站| 伊人情人综合成人久久网小说 | 久草视频在线看免费| 一区国内二区日韩三区欧美| 97精品成人一区二区三区| 93人妻人人揉人人澡人人| 亚洲精品欧美日韩在线播放 | 亚洲av自拍天堂网| 成人免费做爰高潮视频| 久久久久久久久久久久久97| 99热这里只有精品中文| 午夜精彩视频免费一区| 在线观看免费av网址大全| 亚洲欧美日韩视频免费观看| 亚洲国产精品美女在线观看| 东京热男人的av天堂| 国产女人露脸高潮对白视频| 亚洲福利精品福利精品福利| 久久久久久9999久久久久| 91人妻精品一区二区在线看| 97小视频人妻一区二区| 任你操视频免费在线观看| gav成人免费播放| 国产va在线观看精品| 丝袜长腿第一页在线| 国产黄色高清资源在线免费观看| 免费在线黄色观看网站| 老司机福利精品视频在线| 91麻豆精品久久久久| 红桃av成人在线观看| 大香蕉大香蕉在线有码 av| 大白屁股精品视频国产| 日本男女操逼视频免费看| 午夜激情久久不卡一区二区 | 高清成人av一区三区| 人妻最新视频在线免费观看| 欧美老妇精品另类不卡片| 最新的中文字幕 亚洲| 成人资源在线观看免费官网| 欧美日韩一区二区电影在线观看 | 午夜精品亚洲精品五月色| 美女福利视频网址导航| 人人爽亚洲av人人爽av| 国产成人精品午夜福利训2021| 午夜精品一区二区三区更新| 肏插流水妹子在线乐播下载 | 国产亚洲精品欧洲在线观看| 亚洲成人国产综合一区| 中国视频一区二区三区| 免费大片在线观看视频网站| 白白操白白色在线免费视频 | 91欧美在线免费观看| 在线国产日韩欧美视频| 51精品视频免费在线观看| 亚洲变态另类色图天堂网| 久久www免费人成一看片| 久久热久久视频在线观看| 国产黄色高清资源在线免费观看| 国产综合高清在线观看| 丝袜肉丝一区二区三区四区在线 | 中文字幕乱码人妻电影| 亚洲男人的天堂a在线| 国产自拍黄片在线观看| 精品成人啪啪18免费蜜臀| 国产欧美精品不卡在线| 18禁免费av网站| 国产精品大陆在线2019不卡| 欧美久久久久久三级网| 精品黑人巨大在线一区| 亚洲青青操骚货在线视频| 成人国产影院在线观看| 中文字幕一区二 区二三区四区| 日本人妻欲求不满中文字幕| 国产免费av一区二区凹凸四季| 国产一区二区久久久裸臀| 福利视频一区二区三区筱慧 | 久久久久久国产精品| 国产精品黄色的av| 最新91精品视频在线| 天堂av在线官网中文| 免费福利av在线一区二区三区| 成人精品视频99第一页| 日韩黄色片在线观看网站| 国产一区二区欧美三区| 亚洲av日韩av网站| 国产白嫩美女一区二区| 午夜精品一区二区三区更新| 任你操视频免费在线观看| 亚洲视频乱码在线观看| 人人爱人人妻人人澡39| 亚洲一区二区三区av网站| 粉嫩av懂色av蜜臀av| 成年人该看的视频黄免费| 日本在线不卡免费视频| 在线免费91激情四射 | avjpm亚洲伊人久久| 男人的网址你懂的亚洲欧洲av| 黑人变态深video特大巨大| 国产+亚洲+欧美+另类| 国产视频在线视频播放| 2018最新中文字幕在线观看| 一区二区视频视频视频| av视屏免费在线播放| 青青草亚洲国产精品视频| 天天色天天爱天天爽| 99精品国产免费久久| 性感美女高潮视频久久久| 一区二区三区四区五区性感视频| 夜女神免费福利视频| 99久久99久国产黄毛片| 适合午夜一个人看的视频| 国产无遮挡裸体免费直播视频| 九九热99视频在线观看97| 亚洲熟女女同志女同| 91人妻人人做人人爽在线| 免费观看丰满少妇做受| 在线免费观看亚洲精品电影| 涩涩的视频在线观看视频| 黑人乱偷人妻中文字幕| 日韩精品中文字幕在线| 在线观看av亚洲情色| 黄色片年轻人在线观看| 日韩熟女系列一区二区三区| 久久久久久久精品成人热| 97年大学生大白天操逼 | 班长撕开乳罩揉我胸好爽| 国产亚洲视频在线观看| 欧美精品久久久久久影院| 天天干天天日天天谢综合156| 日本一区精品视频在线观看| 丝袜美腿欧美另类 中文字幕| 大屁股肉感人妻中文字幕在线| 精品91自产拍在线观看一区| 好太好爽好想要免费| 欧美黄色录像免费看的| 国产成人一区二区三区电影网站| 五十路人妻熟女av一区二区| 国产va在线观看精品| 清纯美女在线观看国产| 日韩欧美国产精品91| 国产精品视频男人的天堂| 在线观看成人国产电影| 亚洲视频在线视频看视频在线| 欧美黑人巨大性xxxxx猛交| 男人的天堂一区二区在线观看| 一级A一级a爰片免费免会员| 亚洲男人在线天堂网| 成年女人免费播放视频| 男人靠女人的逼视频| 大鸡吧插入女阴道黄色片| 国产精品自拍偷拍a| 欧美在线精品一区二区三区视频 | 99久久成人日韩欧美精品| 国产精品成久久久久三级蜜臀av| gogo国模私拍视频| 国产精品日韩欧美一区二区| 最近中文2019年在线看| 精品视频一区二区三区四区五区 | 午夜福利资源综合激情午夜福利资 | 亚洲国产精品久久久久蜜桃| 亚洲日本一区二区三区| 天天操天天干天天日狠狠插| 免费观看污视频网站| 999久久久久999| 伊人成人综合开心网| 青青青aaaa免费| 欧美aa一级一区三区四区| 又粗又硬又猛又爽又黄的| 免费在线福利小视频| 干逼又爽又黄又免费的视频| 含骚鸡巴玩逼逼视频| 日本韩国亚洲综合日韩欧美国产| 日本熟妇一区二区x x| 粉嫩av蜜乳av蜜臀| 最新日韩av传媒在线| 晚上一个人看操B片| 国产午夜亚洲精品不卡在线观看| 日韩亚洲高清在线观看| 国产大鸡巴大鸡巴操小骚逼小骚逼| 欲乱人妻少妇在线视频裸| 偷拍自拍视频图片免费| 亚洲va天堂va国产va久| 无码精品一区二区三区人| 五十路息与子猛烈交尾视频| 中文字幕在线永久免费播放| 亚洲午夜精品小视频| 大香蕉福利在线观看| 国产成人精品一区在线观看| 欧美精品亚洲精品日韩在线| 午夜激情高清在线观看| 成人性爱在线看四区| 天天操天天干天天日狠狠插| 天堂v男人视频在线观看| 天天干狠狠干天天操| 欧美激情电影免费在线| 77久久久久国产精产品| 在线视频精品你懂的| 黄色三级网站免费下载| 日韩人妻xxxxx| 中文字幕网站你懂的| 亚洲激情唯美亚洲激情图片| 春色激情网欧美成人| 欧美久久久久久三级网| 亚洲国产成人在线一区| 91p0rny九色露脸熟女| 国产日韩精品免费在线| 99精品视频在线观看婷婷| 欧美地区一二三专区| 免费在线看的黄片视频| 成人av亚洲一区二区| 亚洲av日韩av第一区二区三区| 成人国产影院在线观看| 亚洲美女高潮喷浆视频| 93视频一区二区三区| 2019av在线视频| 亚洲国产欧美一区二区丝袜黑人| 亚洲熟女久久久36d| 久久农村老妇乱69系列| 久久久久久cao我的性感人妻| aⅴ五十路av熟女中出| 成人H精品动漫在线无码播放| 91九色国产熟女一区二区| 日韩二区视频一线天婷婷五| 亚洲精品国产久久久久久| 国产又粗又硬又大视频| 蜜桃臀av蜜桃臀av| 经典av尤物一区二区| 国产成人一区二区三区电影网站| 亚洲第一黄色在线观看| 97青青青手机在线视频 | 91久久综合男人天堂| 夜夜嗨av蜜臀av| 无码国产精品一区二区高潮久久4 日韩欧美一级精品在线观看 | 啪啪啪啪啪啪啪啪av| 五十路人妻熟女av一区二区| 亚洲一区二区三区精品视频在线 | 都市激情校园春色狠狠| 中文字幕在线乱码一区二区| 男女啪啪啪啪啪的网站| 亚洲欧美综合另类13p| 天天操天天射天天操天天天| mm131美女午夜爽爽爽| 国产亚洲精品欧洲在线观看| 日本xx片在线观看| 日本黄色特一级视频| 国产精品久久久久国产三级试频| 日本啪啪啪啪啪啪啪| 日韩国产乱码中文字幕| 传媒在线播放国产精品一区| 强行扒开双腿猛烈进入免费版| 国产午夜亚洲精品不卡在线观看| 晚上一个人看操B片| 色吉吉影音天天干天天操| 中国熟女@视频91| 在线观看视频 你懂的| 在线免费观看视频一二区| 九色视频在线观看免费| jul—619中文字幕在线| 在线免费观看国产精品黄色| 韩国一级特黄大片做受| 免费高清自慰一区二区三区网站| 在线观看视频网站麻豆| 亚洲成人激情视频免费观看了| 一区二区久久成人网| 亚洲区欧美区另类最新章节| 国产品国产三级国产普通话三级| 丰满的子国产在线观看| 亚洲av无码成人精品区辽| 黄色无码鸡吧操逼视频| 75国产综合在线视频| 一区二区三区四区视频在线播放 | 国产亚洲国产av网站在线| 午夜精彩视频免费一区| 99国产精品窥熟女精品| 色伦色伦777国产精品| av男人天堂狠狠干| 亚洲av无硬久久精品蜜桃| 99热久久极品热亚洲| 精产国品久久一二三产区区别| 四川五十路熟女av| 2012中文字幕在线高清| 中文字幕 码 在线视频| 亚洲最大黄 嗯色 操 啊| 婷婷六月天中文字幕| 亚洲精品久久视频婷婷| 国产精品黄色的av| 亚洲护士一区二区三区| 在线观看黄色成年人网站| 在线观看黄色成年人网站| 亚洲男人的天堂a在线| 五月天中文字幕内射| 精品少妇一二三视频在线| 中文字幕在线永久免费播放| 国产午夜激情福利小视频在线| 看一级特黄a大片日本片黑人| 亚洲av一妻不如妾| 91国产在线免费播放| 在线 中文字幕 一区| 91免费黄片可看视频| 亚洲无线观看国产高清在线| yellow在线播放av啊啊啊| 超级av免费观看一区二区三区| 国产精品一二三不卡带免费视频| 亚洲第17页国产精品| 好了av中文字幕在线| 人妻在线精品录音叫床| 天天躁日日躁狠狠躁躁欧美av | av天堂加勒比在线| 大胆亚洲av日韩av| 免费观看成年人视频在线观看| 二区中出在线观看老师| 91快播视频在线观看| 小穴多水久久精品免费看| 少妇人妻100系列| 亚洲免费福利一区二区三区| 91免费福利网91麻豆国产精品| 人妻丝袜精品中文字幕| 99久久超碰人妻国产| 黄色成人在线中文字幕| 大鸡巴操b视频在线| 人人妻人人澡人人爽人人dvl| 午夜场射精嗯嗯啊啊视频| 日本成人不卡一区二区| 精品人人人妻人人玩日产欧| 国产视频一区二区午夜| 国产日韩欧美美利坚蜜臀懂色| 女警官打开双腿沦为性奴| 三上悠亚和黑人665番号| 日韩精品电影亚洲一区| 男人的天堂一区二区在线观看| 久久久久久九九99精品| 孕妇奶水仑乱A级毛片免费看| 亚洲美女自偷自拍11页| 欧美成人精品欧美一级黄色| 激情五月婷婷免费视频| 又粗又长 明星操逼小视频| 新婚人妻聚会被中出| 国产激情av网站在线观看| 亚洲 国产 成人 在线| 日本黄在免费看视频| 97小视频人妻一区二区| 天天日天天日天天射天天干| 在线观看视频网站麻豆| 99久久99一区二区三区| 亚洲国产精品黑丝美女| 亚洲成人熟妇一区二区三区 | 久久99久久99精品影院| 日本福利午夜电影在线观看| 男人和女人激情视频| 日韩三级黄色片网站| 黄片大全在线观看观看| 高潮喷水在线视频观看| 成人高潮aa毛片免费| 亚洲在线一区二区欧美| 久久久久只精品国产三级| 午夜精品一区二区三区福利视频| 夜色福利视频在线观看| 午夜在线观看一区视频| 国产在线自在拍91国语自产精品| 国产精品熟女久久久久浪潮| 都市家庭人妻激情自拍视频| 欧美一级色视频美日韩| 97年大学生大白天操逼| 日韩美女福利视频网| 福利片区一区二体验区| 啪啪啪啪啪啪啪啪av| 亚洲人妻国产精品综合| 亚国产成人精品久久久| 青青草在观免费国产精品| 又粗又硬又猛又爽又黄的| 国产在线观看免费人成短视频| 久草极品美女视频在线观看| 大尺度激情四射网站| 久久久久久久亚洲午夜综合福利| 日韩精品啪啪视频一道免费| 五月天色婷婷在线观看视频免费| 日本a级视频老女人| 大屁股熟女一区二区三区| 深田咏美亚洲一区二区| 大屁股肉感人妻中文字幕在线| 2019av在线视频| 欧洲日韩亚洲一区二区三区| 黄色资源视频网站日韩| 青青草亚洲国产精品视频| 精品国产污污免费网站入口自| 亚洲无码一区在线影院| 国产黄色a级三级三级三级| 午夜精品亚洲精品五月色| 国产午夜激情福利小视频在线| 国产91精品拍在线观看| 国产精品亚洲在线观看| 欧美精品免费aaaaaa| 精品视频中文字幕在线播放| 日韩欧美国产一区不卡| 在线观看av观看av| 天天做天天干天天舔| huangse网站在线观看| 丰满熟女午夜福利视频| 伊人综合免费在线视频| 99热99这里精品6国产| 天天日天天操天天摸天天舔| 特大黑人巨大xxxx| 亚洲精品国产在线电影| 欧美黑人与人妻精品| 日韩精品中文字幕播放| 11久久久久久久久久久| 在线制服丝袜中文字幕| 中文字幕av第1页中文字幕| 午夜频道成人在线91| 亚洲精品无码久久久久不卡| 欧美精品久久久久久影院| 亚洲午夜在线视频福利| 中文字幕日韩无敌亚洲精品| 欧美日韩一级黄片免费观看| 四虎永久在线精品免费区二区| 日本少妇高清视频xxxxx| 天天日天天透天天操| 啊啊好慢点插舔我逼啊啊啊视频| eeuss鲁片一区二区三区| av俺也去在线播放| 人妻自拍视频中国大陆| 午夜在线观看岛国av,com| 亚洲高清免费在线观看视频| 青娱乐最新视频在线| 亚洲国产成人无码麻豆艾秋| 天堂av在线官网中文| 色综合久久无码中文字幕波多| av乱码一区二区三区| 日本人竟这样玩学生妹| 亚洲人人妻一区二区三区| 不卡一区一区三区在线| 亚洲精品无码久久久久不卡| 青青青青青免费视频| 巨乳人妻日下部加奈被邻居中出| 亚洲中文字幕乱码区| 98精产国品一二三产区区别| 2020中文字幕在线播放| 日本韩国免费一区二区三区视频| 亚洲在线免费h观看网站| 老司机午夜精品视频资源| 福利视频网久久91| 欧美一区二区三区在线资源| 国产九色91在线观看精品| 韩国AV无码不卡在线播放| 男人的天堂一区二区在线观看| 漂亮 人妻被中出中文| 伊人情人综合成人久久网小说 | 专门看国产熟妇的网站| 亚洲av天堂在线播放| 国产黄色片蝌蚪九色91| 午夜精品一区二区三区城中村| 熟女在线视频一区二区三区| 五十路息与子猛烈交尾视频| 51国产成人精品视频| 免费在线观看污污视频网站| 九色视频在线观看免费| 日本三极片中文字幕| 热99re69精品8在线播放| 日韩伦理短片在线观看| 亚洲一区二区三区五区| ka0ri在线视频| 中文字幕无码日韩专区免费| 国产黑丝高跟鞋视频在线播放 | 欧美偷拍亚洲一区二区| 亚洲视频乱码在线观看| 99热这里只有精品中文| 亚洲推理片免费看网站| 亚洲特黄aaaa片| 免费看高清av的网站| 日韩一区二区三区三州| 国产美女精品福利在线| 中文字幕中文字幕 亚洲国产| 性欧美激情久久久久久久| 久久久久久久久久久免费女人| 小穴多水久久精品免费看| 中文字幕免费在线免费| 日韩欧美制服诱惑一区在线| 中文字幕人妻一区二区视频| 青青青aaaa免费| 免费在线看的黄片视频| 亚洲免费va在线播放| 国产精品视频资源在线播放| 唐人色亚洲av嫩草| 免费在线观看污污视频网站| 激情人妻校园春色亚洲欧美| 中文字幕人妻三级在线观看| 亚洲va天堂va国产va久| 无忧传媒在线观看视频| 久久久极品久久蜜桃| 成人国产影院在线观看| 在线观看欧美黄片一区二区三区| 日本xx片在线观看| 骚逼被大屌狂草视频免费看| 超鹏97历史在线观看| 日本在线不卡免费视频| 最新黄色av网站在线观看| 欧美第一页在线免费观看视频| 久青青草视频手机在线免费观看| 亚洲熟女女同志女同| 成人高清在线观看视频| 一区二区三区四区中文| 91精品视频在线观看免费| www日韩毛片av| 亚洲欧美日韩视频免费观看| 日韩伦理短片在线观看| 午夜精品一区二区三区城中村| 青草久久视频在线观看| 国产综合高清在线观看| 性欧美日本大妈母与子| 亚洲精品午夜aaa久久| 亚洲国产免费av一区二区三区| 在线观看国产免费麻豆| 精品首页在线观看视频| 国产亚洲精品视频合集| 98视频精品在线观看| 欧美亚洲免费视频观看| 亚洲国际青青操综合网站 | v888av在线观看视频| 亚洲激情,偷拍视频| 岳太深了紧紧的中文字幕| free性日本少妇| 黄色资源视频网站日韩| 狠狠操操操操操操操操操 | 国产在线免费观看成人| 天天日天天添天天爽| 亚洲一区二区三区uij| www久久久久久久久久久| AV无码一区二区三区不卡| 中文字幕免费福利视频6| 欧美一区二区三区啪啪同性| 天天日天天天天天天天天天天 | 97香蕉碰碰人妻国产樱花| 888亚洲欧美国产va在线播放| 极品丝袜一区二区三区| 亚洲欧美成人综合视频| 亚洲福利午夜久久久精品电影网| 最近的中文字幕在线mv视频| 国产精品伦理片一区二区| 热99re69精品8在线播放| 偷偷玩弄新婚人妻h视频| 精品国产在线手机在线| 亚洲人成精品久久久久久久| 性感美女诱惑福利视频| 国产片免费观看在线观看| 亚洲国际青青操综合网站| 在线成人日韩av电影| 久碰精品少妇中文字幕av| 一区二区三区av高清免费| www久久久久久久久久久| 午夜精品福利91av| 专门看国产熟妇的网站| av中文字幕福利网| 好吊操视频这里只有精品| 2017亚洲男人天堂| 91免费福利网91麻豆国产精品 | 国产乱子伦一二三区| 国产午夜激情福利小视频在线| 久草视频在线看免费| 国产日韩av一区二区在线| 可以免费看的www视频你懂的| 亚洲综合另类欧美久久| 国产一区二区火爆视频| 国产使劲操在线播放| 91国产在线视频免费观看| 亚洲精品av在线观看| 国产性感美女福利视频| 久久精品国产23696| 大鸡巴后入爆操大屁股美女| 国产白袜脚足J棉袜在线观看| 午夜av一区二区三区| 中文字幕无码日韩专区免费| 绝色少妇高潮3在线观看| 日本成人一区二区不卡免费在线| 激情综合治理六月婷婷| 福利在线视频网址导航 | 91精品啪在线免费| 亚洲特黄aaaa片| 天天操天天干天天日狠狠插 | 欧美激情电影免费在线| 视频 一区二区在线观看| 色综合久久五月色婷婷综合| 久青青草视频手机在线免费观看| 岛国黄色大片在线观看| 淫秽激情视频免费观看| 99精品一区二区三区的区| 亚洲超碰97人人做人人爱| 婷婷色国产黑丝少妇勾搭AV| 亚洲精品午夜久久久久| 可以免费看的www视频你懂的 | 亚洲专区激情在线观看视频| 久久久久久九九99精品| 9久在线视频只有精品| 国产美女一区在线观看| 日韩精品啪啪视频一道免费| 亚洲午夜在线视频福利| 自拍偷拍日韩欧美一区二区| 农村胖女人操逼视频| 中文字幕在线永久免费播放| 亚洲综合乱码一区二区| 精品人妻伦一二三区久| 天天操天天爽天天干| 在线观看av亚洲情色| 欧美一区二区三区啪啪同性| 日本特级片中文字幕| 岛国黄色大片在线观看| 午夜毛片不卡在线看| a v欧美一区=区三区| 亚洲av人人澡人人爽人人爱| 大香蕉日本伊人中文在线| 欧美精品激情在线最新观看视频 | 午夜美女福利小视频| 日本免费一级黄色录像 | av视屏免费在线播放| 少妇与子乱在线观看| 日本特级片中文字幕| 亚洲 清纯 国产com| 亚洲天天干 夜夜操| 丝袜国产专区在线观看| 日韩激情文学在线视频| 久久这里只有精彩视频免费| 欧美在线偷拍视频免费看| 日日夜夜狠狠干视频| 亚洲码av无色中文| 这里有精品成人国产99| 欧美另类一区二区视频| 最近中文字幕国产在线| 亚洲欧美综合另类13p| jiuse91九色视频| 色花堂在线av中文字幕九九| 国产 在线 免费 精品| 视频在线亚洲一区二区| gay gay男男瑟瑟在线网站| 啊啊啊视频试看人妻| 2022中文字幕在线| av在线观看网址av| 午夜在线观看岛国av,com| 青青伊人一精品视频| sw137 中文字幕 在线| 成年人的在线免费视频| 婷婷色中文亚洲网68| 国产福利小视频二区| 久草视频在线看免费| 狠狠地躁夜夜躁日日躁| 日韩精品啪啪视频一道免费| 欧美男人大鸡吧插女人视频| 大鸡巴插入美女黑黑的阴毛| 在线观看视频 你懂的| 精品欧美一区二区vr在线观看 | 性感美女高潮视频久久久| 国产精品久久久黄网站| 日本xx片在线观看| 天天插天天狠天天操| 成人av在线资源网站| 不戴胸罩引我诱的隔壁的人妻| 日韩三级电影华丽的外出| 夜夜嗨av一区二区三区中文字幕| 亚洲图库另类图片区| 青青青青操在线观看免费| 香蕉片在线观看av| 国产福利小视频大全| 天天干天天操天天爽天天摸| 男人操女人逼逼视频网站| 五十路熟女av天堂| 国产欧美日韩在线观看不卡| 国产精品久久久久久久久福交 | 91片黄在线观看喷潮| 日本男女操逼视频免费看| 青青伊人一精品视频| 天天干天天日天天干天天操| eeuss鲁片一区二区三区| 91在线视频在线精品3| 国产va在线观看精品| 激情五月婷婷免费视频| 日韩精品二区一区久久| 亚洲一区二区三区五区 | 香蕉片在线观看av| 美女视频福利免费看| 国产第一美女一区二区三区四区 | 97国产福利小视频合集| 中文字幕成人日韩欧美| 91精品综合久久久久3d动漫| 黄色无码鸡吧操逼视频| 在线免费观看视频一二区| 99re国产在线精品| sspd152中文字幕在线| 大骚逼91抽插出水视频| 婷婷综合亚洲爱久久| 欧美天堂av无线av欧美| 深田咏美亚洲一区二区| 国产女人被做到高潮免费视频| 成年女人免费播放视频| 国产黄色片在线收看| 亚洲免费在线视频网站| 欧美特色aaa大片| 欧美精品一区二区三区xxxx| 欧美激情电影免费在线| 11久久久久久久久久久| yy96视频在线观看| 青青青青操在线观看免费| 欧美精产国品一二三区| 国产视频一区在线观看| 成人网18免费视频版国产| 日韩精品二区一区久久| 99精品免费观看视频| 成人国产影院在线观看| 888欧美视频在线| 亚洲欧美自拍另类图片| 精品视频一区二区三区四区五区| 国产精品久久综合久久| 午夜久久久久久久99| 天天色天天舔天天射天天爽| 青青在线视频性感少妇和隔壁黑丝 | 国产一区二区在线欧美| 亚洲2021av天堂| 中国黄色av一级片| 国产精品久久久久网| 日本后入视频在线观看 | 精品一区二区三区在线观看| 三级av中文字幕在线观看| 99精品亚洲av无码国产另类| 十八禁在线观看地址免费| 婷婷五月亚洲综合在线| 国产变态另类在线观看| 538精品在线观看视频| 亚洲一级av大片免费观看| 蜜桃视频入口久久久| AV无码一区二区三区不卡| 日韩人妻在线视频免费| 亚洲蜜臀av一区二区三区九色| 激情五月婷婷综合色啪| 久久久久91精品推荐99| 极品丝袜一区二区三区| 特级无码毛片免费视频播放| 黄页网视频在线免费观看| 高潮喷水在线视频观看| 性欧美日本大妈母与子| 91亚洲精品干熟女蜜桃频道| 中文字幕一区二区亚洲一区| 激情内射在线免费观看| 91亚洲国产成人精品性色| 欧美成人黄片一区二区三区 | 久久久久久性虐视频| 中文字幕综合一区二区| 欧洲精品第一页欧洲精品亚洲| 漂亮 人妻被中出中文| 2017亚洲男人天堂| 人妻丝袜av在线播放网址| 久久精品国产999| 国产成人小视频在线观看无遮挡| jiuse91九色视频| 一区二区麻豆传媒黄片| 521精品视频在线观看| 果冻传媒av一区二区三区 | 黄网十四区丁香社区激情五月天| 91国语爽死我了不卡| 国产成人一区二区三区电影网站| 一区二区三区的久久的蜜桃的视频| 国产一线二线三线的区别在哪| 不戴胸罩引我诱的隔壁的人妻| 青青草国内在线视频精选| 一区二区三区四区视频| gogo国模私拍视频| 五十路老熟女码av| 国产精品手机在线看片| 人人超碰国字幕观看97| 亚洲成人精品女人久久久| 欧美国产亚洲中英文字幕| 最新中文字幕免费视频| av俺也去在线播放| 国产 在线 免费 精品| 欧美特级特黄a大片免费| 清纯美女在线观看国产| 中文字幕在线第一页成人| 绝色少妇高潮3在线观看| 91桃色成人网络在线观看| 黑人变态深video特大巨大| 中文字母永久播放1区2区3区| 天天日天天敢天天干| 免费观看污视频网站| 亚洲高清视频在线不卡| 国产午夜亚洲精品不卡在线观看| 一区二区三区精品日本| 亚洲综合一区二区精品久久| 好男人视频在线免费观看网站| 国产精品国产三级国产精东| 韩国爱爱视频中文字幕| lutube在线成人免费看| 亚洲国产中文字幕啊啊啊不行了| 日韩影片一区二区三区不卡免费| 欧美亚洲国产成人免费在线| 亚洲一级av大片免费观看| 亚洲国产免费av一区二区三区| 无忧传媒在线观看视频| 国产精品入口麻豆啊啊啊| 午夜精品久久久久久99热| 97国产福利小视频合集| 在线观看的黄色免费网站| 一区二区三区四区五区性感视频| 亚洲高清国产拍青青草原| 天堂av在线播放免费| 亚洲欧美人精品高清| 日本人妻精品久久久久久| 在线观看视频一区麻豆| 精品人人人妻人人玩日产欧| 日韩美av高清在线| 福利午夜视频在线合集| 护士特殊服务久久久久久久| 在线成人日韩av电影| 国产一级精品综合av| 香蕉aⅴ一区二区三区| 午夜dv内射一区区| 五色婷婷综合狠狠爱| 亚洲激情av一区二区| 亚洲人人妻一区二区三区| 免费黄色成人午夜在线网站| 亚洲熟女女同志女同| 日本av在线一区二区三区| 中文字幕国产专区欧美激情| 黄色在线观看免费观看在线| 日日爽天天干夜夜操| 中文字幕日韩精品日本| 好男人视频在线免费观看网站| 婷婷激情四射在线观看视频| 天天日天天日天天射天天干| 美女视频福利免费看| 国产一区成人在线观看视频| 韩国女主播精品视频网站| 91亚洲国产成人精品性色| 99精品免费观看视频| 国产精品手机在线看片| 欧美80老妇人性视频| 亚洲天堂av最新网址| 一区二区三区毛片国产一区| 1区2区3区不卡视频| 欧美久久久久久三级网| 这里有精品成人国产99| 亚洲美女高潮喷浆视频| 欧美交性又色又爽又黄麻豆| 偷拍自拍亚洲视频在线观看| 成人资源在线观看免费官网| 久久久久久久99精品| 日本啪啪啪啪啪啪啪| 欧美爆乳肉感大码在线观看| 99re6热在线精品| 欧美日韩精品永久免费网址| 精品一区二区三区三区88| 男人的天堂av日韩亚洲| 在线观看视频一区麻豆| h国产小视频福利在线观看| 亚洲第17页国产精品| 成熟熟女国产精品一区| 欧洲精品第一页欧洲精品亚洲 | 中文字幕乱码人妻电影| 国产视频一区在线观看| 亚洲av无硬久久精品蜜桃| 三级黄色亚洲成人av| 免费69视频在线看| 97人人模人人爽人人喊| 国产日韩一区二区在线看 | 日本性感美女写真视频| 国产黄色片蝌蚪九色91| 国产精品午夜国产小视频| 内射久久久久综合网| 视频 国产 精品 熟女 | 日韩加勒比东京热二区| 白白操白白色在线免费视频 | 高清成人av一区三区| 黄色无码鸡吧操逼视频| 国产高清在线观看1区2区| 日韩精品中文字幕在线| 亚洲人妻国产精品综合| 亚洲日本一区二区久久久精品| 亚洲国产在线精品国偷产拍| 中国熟女@视频91| 综合精品久久久久97| 日视频免费在线观看| 亚洲女人的天堂av| 岛国青草视频在线观看| 老司机在线精品福利视频| 精品一区二区三区午夜| 新婚人妻聚会被中出| 亚洲欧美成人综合视频| 国产品国产三级国产普通话三级| 亚洲精品国品乱码久久久久 | 亚洲欧美激情中文字幕| 天天想要天天操天天干| 亚洲中文精品人人免费| 久久免看30视频口爆视频| 91天堂精品一区二区| av一区二区三区人妻| 欧洲国产成人精品91铁牛tv| 久久精品亚洲国产av香蕉| 93精品视频在线观看| 天天干天天爱天天色| 福利在线视频网址导航 | 日本韩国亚洲综合日韩欧美国产| 红杏久久av人妻一区| 国产精品人妻66p| 日韩在线中文字幕色| 男人的天堂av日韩亚洲| 国产无遮挡裸体免费直播视频| 91久久国产成人免费网站| 亚洲av可乐操首页| 亚洲美女自偷自拍11页| 在线观看视频污一区| 蜜桃色婷婷久久久福利在线| 激情五月婷婷免费视频| 国产在线自在拍91国语自产精品| 一区二区三区激情在线| 亚洲熟女久久久36d| 男人操女人逼逼视频网站| 欧美一区二区三区乱码在线播放 | 天天日天天敢天天干| 精品老妇女久久9g国产| 一区二区三区麻豆福利视频| 欧美乱妇无乱码一区二区| 欧美80老妇人性视频| 国产欧美精品免费观看视频| 亚洲视频在线视频看视频在线| 国产一区二区久久久裸臀| 99re国产在线精品| 美女张开腿让男生操在线看| 美女福利视频导航网站| 国产精品黄大片在线播放| 亚洲av日韩av第一区二区三区| 国产精品福利小视频a| 女警官打开双腿沦为性奴| 顶级尤物粉嫩小尤物网站| 精品高跟鞋丝袜一区二区| av线天堂在线观看| 五十路老熟女码av| 韩国男女黄色在线观看| 成熟熟女国产精品一区| 国产熟妇乱妇熟色T区| 成人影片高清在线观看| 视频一区二区三区高清在线| 婷婷午夜国产精品久久久| 精品少妇一二三视频在线| 国产精品自偷自拍啪啪啪| 激情啪啪啪啪一区二区三区| 鸡巴操逼一级黄色气| 91麻豆精品传媒国产黄色片| 国产精品成久久久久三级蜜臀av | 亚洲免费国产在线日韩| 91久久人澡人人添人人爽乱| 福利国产视频在线观看| 久久综合老鸭窝色综合久久| 99精品国产aⅴ在线观看| 一二三中文乱码亚洲乱码one| 欧美亚洲国产成人免费在线| 天天爽夜夜爽人人爽QC| 中文字幕奴隷色的舞台50| 91免费黄片可看视频| 欧美麻豆av在线播放| 亚洲午夜精品小视频| 最新中文字幕免费视频| 日韩亚洲高清在线观看| 亚洲av琪琪男人的天堂| 国产精品久久久黄网站| heyzo蜜桃熟女人妻| 亚洲码av无色中文| 在线视频这里只有精品自拍| 亚洲 中文 自拍 无码| 欧美精品亚洲精品日韩在线| 亚洲一区久久免费视频| 黄色片一级美女黄色片| 亚洲av成人网在线观看| 欧美黄片精彩在线免费观看| 日本韩国在线观看一区二区| 天天干天天日天天干天天操| 沈阳熟妇28厘米大战黑人| av在线播放国产不卡| 亚洲va天堂va国产va久| 日视频免费在线观看| 久久艹在线观看视频| 免费观看成年人视频在线观看| 欧美黑人与人妻精品| 91精品国产黑色丝袜| 黄色片黄色片wyaa| 人人妻人人爽人人添夜| 97国产在线观看高清| 黄色三级网站免费下载| 亚洲av色图18p| 国产一线二线三线的区别在哪| 亚洲高清国产拍青青草原| 黄网十四区丁香社区激情五月天 | 福利视频广场一区二区| 久久香蕉国产免费天天| 久久久久久久久久久久久97| 丝袜肉丝一区二区三区四区在线 | 日辽宁老肥女在线观看视频| 91 亚洲视频在线观看| 免费成人av中文字幕| 国产日韩av一区二区在线| 人妻熟女在线一区二区| 夫妻在线观看视频91| 精品日产卡一卡二卡国色天香| 久久久精品999精品日本| 国产一区二区神马久久| 人妻久久无码中文成人| 青青青青草手机在线视频免费看 | 97人妻人人澡爽人人精品| 国产欧美精品不卡在线| 1000部国产精品成人观看视频| 国产黄网站在线观看播放| 日韩人妻xxxxx| 欧美交性又色又爽又黄麻豆| 大陆胖女人与丈夫操b国语高清| 久久丁香花五月天色婷婷| 91九色porny国产在线| 国产精品一区二区av国| jiujiure精品视频在线| 欧美精品资源在线观看| 日韩欧美国产一区ab| 91精品国产91青青碰| 欧美精品激情在线最新观看视频| 91精品国产高清自在线看香蕉网| 午夜在线观看岛国av,com| 色呦呦视频在线观看视频| 日韩av中文在线免费观看| 麻豆精品成人免费视频| av网址国产在线观看| 天堂va蜜桃一区入口| 男人在床上插女人视频| 日韩美女搞黄视频免费| 日本五十路熟新垣里子| 亚洲护士一区二区三区| 亚洲1区2区3区精华液| 亚洲成人熟妇一区二区三区 | 亚洲麻豆一区二区三区| 熟女俱乐部一二三区| 一区二区三区久久中文字幕| 成人性爱在线看四区| 婷婷色中文亚洲网68| 免费在线观看污污视频网站| 极品丝袜一区二区三区| 大鸡吧插逼逼视频免费看 | 91色老99久久九九爱精品| 日本美女性生活一级片| 国产精品国色综合久久 | 清纯美女在线观看国产| 亚洲欧美日韩视频免费观看| 欧美日本aⅴ免费视频| 欧美精品 日韩国产| 久久午夜夜伦痒痒想咳嗽P| 黄色中文字幕在线播放| 狠狠的往里顶撞h百合| 91p0rny九色露脸熟女| 99热久久极品热亚洲| 中文字幕日韩人妻在线三区| 不卡一不卡二不卡三| 国产之丝袜脚在线一区二区三区 | 亚洲成人黄色一区二区三区| 91高清成人在线视频| 成人av天堂丝袜在线观看| 国产成人午夜精品福利| av在线免费资源站| 亚洲欧美清纯唯美另类| 九色精品视频在线播放| 国产亚洲视频在线二区| 国产麻豆剧果冻传媒app| 女同性ⅹxx女同hd| 天堂va蜜桃一区入口| 看一级特黄a大片日本片黑人| 伊人精品福利综合导航| 91精品一区二区三区站长推荐| 久久热这里这里只有精品| 97人人模人人爽人人喊| 美女操逼免费短视频下载链接| 北条麻妃高跟丝袜啪啪| 国产不卡av在线免费| 亚洲午夜在线视频福利| 久久久极品久久蜜桃| 中文字幕在线第一页成人| 很黄很污很色的午夜网站在线观看| 久久精品国产23696| 国产成人小视频在线观看无遮挡| 亚洲av自拍天堂网| 在线免费观看视频一二区| 欧美中国日韩久久精品| 国产av欧美精品高潮网站| 好男人视频在线免费观看网站| 啪啪啪啪啪啪啪免费视频| 一个人免费在线观看ww视频| 亚洲欧美另类自拍偷拍色图| 免费费一级特黄真人片| 狠狠操狠狠操免费视频| 五月激情婷婷久久综合网| 性生活第二下硬不起来| 亚洲国产精品黑丝美女| 青青青爽视频在线播放| 欧美中国日韩久久精品| 日本美女成人在线视频| 很黄很污很色的午夜网站在线观看| 色哟哟国产精品入口| 亚洲午夜电影之麻豆| 国产真实乱子伦a视频| 亚洲精品国产久久久久久| 天天想要天天操天天干| 91成人在线观看免费视频| 天天躁日日躁狠狠躁躁欧美av| 自拍偷拍亚洲欧美在线视频| 亚洲成人熟妇一区二区三区| 97国产福利小视频合集| 日噜噜噜夜夜噜噜噜天天噜噜噜| 黄页网视频在线免费观看 | 日本在线一区二区不卡视频| 亚洲人妻30pwc| 日本在线一区二区不卡视频| 成年美女黄网站18禁久久| 91精品综合久久久久3d动漫| av一区二区三区人妻| 天天干天天操天天玩天天射| 欧美另类z0z变态| 抽查舔水白紧大视频| 青青青视频手机在线观看| 在线免费观看欧美小视频| 99热这里只有精品中文| 亚洲中文字幕国产日韩| 熟女人妻一区二区精品视频| 一区二区三区日韩久久| 97精品成人一区二区三区| 国产麻豆乱子伦午夜视频观看| 亚洲中文精品字幕在线观看| 欧美一级色视频美日韩| 欧美偷拍自拍色图片| 又大又湿又爽又紧A视频| 福利午夜视频在线观看| 日韩熟女av天堂系列| 日曰摸日日碰夜夜爽歪歪| 亚洲国产免费av一区二区三区| 可以免费看的www视频你懂的| 欧美第一页在线免费观看视频| 99re国产在线精品| 国产视频在线视频播放| 一区二区久久成人网| 男人操女人的逼免费视频| 欧美精品黑人性xxxx| av中文字幕国产在线观看| 日韩av熟妇在线观看| 在线观看欧美黄片一区二区三区 | 99精品久久久久久久91蜜桃| 亚洲 清纯 国产com| 在线观看免费岛国av| 日韩中文字幕精品淫| 国产精品成久久久久三级蜜臀av| 夜鲁夜鲁狠鲁天天在线| 一区二区三区日本伦理| 午夜极品美女福利视频| caoporm超碰国产| 免费在线观看污污视频网站| av在线播放国产不卡| 日韩欧美制服诱惑一区在线| 中文字幕av一区在线观看| 91精品免费久久久久久| 大胸性感美女羞爽操逼毛片| 熟女在线视频一区二区三区| 天天干天天啪天天舔| 五十路av熟女松本翔子| 影音先锋女人av噜噜色| 日本熟妇喷水xxx| 首之国产AV医生和护士小芳| 男生舔女生逼逼视频| 国产精品视频欧美一区二区| 日韩欧美亚洲熟女人妻| 在线观看欧美黄片一区二区三区 | 青娱乐在线免费视频盛宴| 无码日韩人妻精品久久| yellow在线播放av啊啊啊| 亚洲免费视频欧洲免费视频| 精品一区二区三区在线观看| 大屁股熟女一区二区三区| 啪啪啪啪啪啪啪免费视频| 66久久久久久久久久久| 国产视频一区在线观看| 青娱乐最新视频在线| 精品欧美一区二区vr在线观看| 久久香蕉国产免费天天| 亚洲免费成人a v| yy96视频在线观看| 无忧传媒在线观看视频| 国产真实乱子伦a视频| 欧美亚洲免费视频观看| 天天艹天天干天天操| 国产精品免费不卡av| 一级A一级a爰片免费免会员| 老司机午夜精品视频资源| 5528327男人天堂| 综合精品久久久久97| 亚洲另类伦春色综合小| 日日夜夜狠狠干视频| 亚洲免费在线视频网站| 在线新三级黄伊人网| 亚洲精品国偷自产在线观看蜜桃| 天天操天天弄天天射| 2020韩国午夜女主播在线| 老司机你懂得福利视频| 91亚洲精品干熟女蜜桃频道 | 国产午夜男女爽爽爽爽爽视频 | 少妇人妻久久久久视频黄片| 免费黄高清无码国产| 早川濑里奈av黑人番号| 青青青青视频在线播放| 999热精品视频在线| 美女吃鸡巴操逼高潮视频| 中文字幕日本人妻中出| 午夜精品福利91av| 国产av自拍偷拍盛宴| 男女啪啪视频免费在线观看| 91久久人澡人人添人人爽乱| 亚洲av无乱一区二区三区性色| 韩国三级aaaaa高清视频| 偷青青国产精品青青在线观看 | 精品少妇一二三视频在线| 2020韩国午夜女主播在线| 成人sm视频在线观看| yellow在线播放av啊啊啊| 婷婷久久久综合中文字幕| 亚洲综合图片20p| 中字幕人妻熟女人妻a62v网| 国产自拍黄片在线观看| 亚洲欧美激情人妻偷拍| 九色精品视频在线播放| 日本欧美视频在线观看三区| 国产精品久久久久网| 99热久久这里只有精品8| 任你操视频免费在线观看| 丰满的继坶3中文在线观看| 少妇ww搡性bbb91| 一区二区三区精品日本| 护士小嫩嫩又紧又爽20p| 亚洲欧美成人综合视频| 天天日天天透天天操| 男人插女人视频网站| 免费在线观看视频啪啪| 中文字幕,亚洲人妻| 精品日产卡一卡二卡国色天香| 人妻素人精油按摩中出| 成人影片高清在线观看| 班长撕开乳罩揉我胸好爽| 激情图片日韩欧美人妻| 绝色少妇高潮3在线观看| 日本性感美女视频网站| 日本在线一区二区不卡视频| 亚洲福利精品视频在线免费观看| 男人天堂色男人av| 欧美精品国产综合久久| 啊啊好大好爽啊啊操我啊啊视频 | 亚洲区美熟妇久久久久| 女生被男生插的视频网站| 精品国产成人亚洲午夜| 国产精品久久久黄网站| 久草福利电影在线观看| 国产高清97在线观看视频| 日本韩国免费福利精品| 亚洲精品国品乱码久久久久| jiujiure精品视频在线| 国产精品视频欧美一区二区| 99re久久这里都是精品视频| 熟女人妻三十路四十路人妻斩| 岛国一区二区三区视频在线| 性感美女福利视频网站| 白嫩白嫩美女极品国产在线观看| 操日韩美女视频在线免费看| 狠狠躁夜夜躁人人爽天天久天啪| 亚洲国际青青操综合网站| 国产精品午夜国产小视频| 免费观看国产综合视频| 蝴蝶伊人久久中文娱乐网| 亚洲成人三级在线播放| 91中文字幕免费在线观看| 国产在线拍揄自揄视频网站| 麻豆精品成人免费视频| 不卡日韩av在线观看| 99一区二区在线观看| 国产精品免费不卡av| 日韩特级黄片高清在线看| 2021国产一区二区| 国产成人午夜精品福利| 国产高清在线在线视频| 男人插女人视频网站| 日韩特级黄片高清在线看| 青青青国产片免费观看视频| 国产中文字幕四区在线观看| 伊人综合免费在线视频| 1区2区3区不卡视频| 5528327男人天堂| 精品成人午夜免费看| av日韩在线免费播放| 亚洲av自拍偷拍综合| 亚洲国产第一页在线观看| 国产福利小视频免费观看| 最新国产亚洲精品中文在线| 免费费一级特黄真人片| 天天日天天干天天要| 5528327男人天堂| 日本特级片中文字幕| 久久h视频在线观看| 欧美在线一二三视频| 91欧美在线免费观看| 91精品国产91久久自产久强| 青青草亚洲国产精品视频| 久草视频在线一区二区三区资源站| 人人妻人人爱人人草| 亚洲中文字幕校园春色| 东京热男人的av天堂| 一区二区三区综合视频| 亚洲精品色在线观看视频| 午夜毛片不卡免费观看视频| 日本又色又爽又黄又粗| 日韩精品中文字幕在线| 天天日天天干天天干天天日| 日韩熟女系列一区二区三区| 欧美黑人性猛交xxxxⅹooo| 中文字幕人妻熟女在线电影| 又大又湿又爽又紧A视频| 老司机福利精品视频在线| 亚洲中文字幕综合小综合| 男女啪啪视频免费在线观看| 午夜美女少妇福利视频| 少妇ww搡性bbb91| 亚洲天天干 夜夜操| 亚洲欧美另类自拍偷拍色图| 欧美伊人久久大香线蕉综合| 国产黄色片在线收看| 国产精品久久久久网| 91精品国产高清自在线看香蕉网| 99热99这里精品6国产| 欧美成人猛片aaaaaaa| 欧美成人小视频在线免费看| 免费成人av中文字幕| 免费福利av在线一区二区三区| 99久久99久国产黄毛片| 青青草亚洲国产精品视频| 嫩草aⅴ一区二区三区| 精品久久久久久久久久久a√国产| 亚洲另类在线免费观看| 久久精品美女免费视频| 久久免费看少妇高潮完整版| 绝顶痉挛大潮喷高潮无码| 好了av中文字幕在线| 亚洲在线观看中文字幕av| 亚洲精品色在线观看视频| 色婷婷六月亚洲综合香蕉| 偷拍自拍亚洲视频在线观看| 黄色男人的天堂视频| 成人18禁网站在线播放| 亚洲国产40页第21页| 早川濑里奈av黑人番号| 在线不卡日韩视频播放| 亚洲欧美自拍另类图片| 最新91九色国产在线观看| 91试看福利一分钟| 日本一道二三区视频久久| 精品91高清在线观看| 亚洲成人黄色一区二区三区| 亚洲中文字幕乱码区| 国产真实灌醉下药美女av福利| 日本男女操逼视频免费看| 丝袜长腿第一页在线| 18禁无翼鸟成人在线| 一级黄色av在线观看| 午夜美女少妇福利视频| 三上悠亚和黑人665番号| 天天色天天操天天透| 国产精品国产三级国产精东 | 91精品国产综合久久久蜜| 2021国产一区二区| 中文亚洲欧美日韩无线码| 国产精品黄色的av| 亚洲区欧美区另类最新章节| 亚洲精品国产久久久久久| 日韩一区二区三区三州| 男女之间激情网午夜在线| 99热国产精品666| 日韩在线视频观看有码在线| 成年午夜影片国产片| 在线成人日韩av电影| 色哟哟国产精品入口| 大鸡巴后入爆操大屁股美女| 精品一区二区三区午夜| 在线观看成人国产电影| 日韩剧情片电影在线收看| 黄色片一级美女黄色片| 大香蕉日本伊人中文在线| 亚洲在线免费h观看网站| chinese国产盗摄一区二区| 69精品视频一区二区在线观看| 精品视频中文字幕在线播放| 日本黄在免费看视频| 一区二区三区久久久91| 免费无码人妻日韩精品一区二区| 神马午夜在线观看视频| 国产黄色片蝌蚪九色91| 精品视频一区二区三区四区五区| 老鸭窝日韩精品视频观看| 日日夜夜精品一二三| av一区二区三区人妻| 男人在床上插女人视频| 精品亚洲在线免费观看| 亚洲av第国产精品| 成年人的在线免费视频| av中文字幕在线观看第三页| 一区二区三区综合视频| 91极品大一女神正在播放| 天天插天天色天天日| 亚洲的电影一区二区三区| 国产丰满熟女成人视频| 天天夜天天日天天日| nagger可以指黑人吗| 全国亚洲男人的天堂| 亚洲激情av一区二区| AV天堂一区二区免费试看| 亚洲欧美久久久久久久久| 日韩欧美高清免费在线| 又大又湿又爽又紧A视频| 亚洲欧美久久久久久久久| 国产极品美女久久久久久| 免费看国产av网站| 色婷婷综合激情五月免费观看| 岛国av高清在线成人在线| 亚洲一区二区三区精品乱码| 亚洲狠狠婷婷综合久久app| 日韩欧美国产一区不卡| 91人妻精品久久久久久久网站| 黄页网视频在线免费观看| mm131美女午夜爽爽爽| 天天色天天操天天透| 黄色av网站免费在线| 欧美精品欧美极品欧美视频| 免费av岛国天堂网站| 夜夜嗨av蜜臀av| av在线shipin| 日日夜夜大香蕉伊人| ka0ri在线视频| 一区二区久久成人网| 青青擦在线视频国产在线| 久久精品国产999| 激情色图一区二区三区| 欧美日本在线视频一区| 端庄人妻堕落挣扎沉沦| 成熟丰满熟妇高潮xx×xx| 色综合久久五月色婷婷综合| 黑人巨大精品欧美视频| 欧美亚洲国产成人免费在线| 人妻av无码专区久久绿巨人 | 国内精品在线播放第一页| 国产福利小视频免费观看| 国产中文字幕四区在线观看| 93精品视频在线观看| 天天日天天天天天天天天天天| 视频一区二区在线免费播放| 国产在线观看黄色视频| 国产三级片久久久久久久| 阿v天堂2014 一区亚洲| 亚洲综合在线观看免费| 国产乱子伦一二三区| 啪啪啪啪啪啪啪啪啪啪黄色| 欧美精产国品一二三产品区别大吗| 揄拍成人国产精品免费看视频| 国产精品自拍在线视频| 黑人乱偷人妻中文字幕| 天天日天天日天天射天天干| 水蜜桃国产一区二区三区| 一区二区三区视频,福利一区二区| 99亚洲美女一区二区三区| 中文字幕免费福利视频6| 日韩欧美在线观看不卡一区二区 | 国产日本欧美亚洲精品视| 国产高清精品一区二区三区| 免费在线观看视频啪啪| 亚洲av成人免费网站| 久草视频 久草视频2| 午夜免费观看精品视频| 91试看福利一分钟| 免费男阳茎伸入女阳道视频| 超pen在线观看视频公开97| 欧亚日韩一区二区三区观看视频| 男人靠女人的逼视频| 国产中文精品在线观看| 亚洲一区制服丝袜美腿| 偷拍美女一区二区三区| av老司机精品在线观看| 2020久久躁狠狠躁夜夜躁| 免费高清自慰一区二区三区网站| 国产日韩精品免费在线| 老司机欧美视频在线看| 精品国产午夜视频一区二区| 2022中文字幕在线| 日日夜夜大香蕉伊人| 精品人妻每日一部精品| 亚洲免费av在线视频| 激情五月婷婷免费视频| 亚洲国产免费av一区二区三区| 婷婷激情四射在线观看视频| 又黄又刺激的午夜小视频|