成人性生交大片免费看视频r_亚洲综合极品香蕉久久网_在线视频免费观看一区_亚洲精品亚洲人成人网在线播放_国产精品毛片av_久久久久国产精品www_亚洲国产一区二区三区在线播_日韩一区二区三区四区区区_亚洲精品国产无套在线观_国产免费www

主頁 > 知識庫 > 詳談innodb的鎖(record,gap,Next-Key lock)

詳談innodb的鎖(record,gap,Next-Key lock)

熱門標(biāo)簽:安國在哪里辦理400電話 昆明智能外呼系統(tǒng)中心 電銷機器人說明書 智能電銷機器人靠譜么 電銷機器人公眾號推送 南宋地圖標(biāo)注黃河華山 長安區(qū)違法建房地圖標(biāo)注 手機用地圖標(biāo)注工具 地圖標(biāo)注培訓(xùn)

Record lock單條索引記錄上加鎖,record lock鎖住的永遠(yuǎn)是索引,而非記錄本身,即使該表上沒有任何索引,那么innodb會在后臺創(chuàng)建一個隱藏的聚集主鍵索引,那么鎖住的就是這個隱藏的聚集主鍵索引。所以說當(dāng)一條sql沒有走任何索引時,那么將會在每一條聚集索引后面加X鎖,這個類似于表鎖,但原理上和表鎖應(yīng)該是完全不同的。

Gap lock在索引記錄之間的間隙中加鎖,或者是在某一條索引記錄之前或者之后加鎖,并不包括該索引記錄本身。gap lock的機制主要是解決可重復(fù)讀模式下的幻讀問題,關(guān)于幻讀的演示和gap鎖如何解決了幻讀。關(guān)于這一塊,先給出幾個定義

快照讀:

簡單的select操作,沒有l(wèi)ock in share mode或for update,快照讀不會加任何的鎖,而且由于mysql的一致性非鎖定讀的機制存在,任何快照讀也不會被阻塞。但是如果事務(wù)的隔離級別是SERIALIZABLE的話,那么快照讀也會被加上共享的next-key鎖,本文不對SERIALIZABLE隔離級別做敘述。

當(dāng)前讀:

官方文檔的術(shù)語叫l(wèi)ocking read,也就是insert,update,delete,select..in share mode和select..for update,當(dāng)前讀會在所有掃描到的索引記錄上加鎖,不管它后面的where條件到底有沒有命中對應(yīng)的行記錄。當(dāng)前讀可能會引起死鎖。

意向鎖:

innodb的意向鎖主要用戶多粒度的鎖并存的情況。比如事務(wù)A要在一個表上加S鎖,如果表中的一行已被事務(wù)B加了X鎖,那么該鎖的申請也應(yīng)被阻塞。如果表中的數(shù)據(jù)很多,逐行檢查鎖標(biāo)志的開銷將很大,系統(tǒng)的性能將會受到影響。為了解決這個問題,可以在表級上引入新的鎖類型來表示其所屬行的加鎖情況,這就引出了“意向鎖”的概念。舉個例子,如果表中記錄1億,事務(wù)A把其中有幾條記錄上了行鎖了,這時事務(wù)B需要給這個表加表級鎖,如果沒有意向鎖的話,那就要去表中查找這一億條記錄是否上鎖了。如果存在意向鎖,那么假如事務(wù)A在更新一條記錄之前,先加意向鎖,再加X鎖,事務(wù)B先檢查該表上是否存在意向鎖,存在的意向鎖是否與自己準(zhǔn)備加的鎖沖突,如果有沖突,則等待直到事務(wù)A釋放,而無須逐條記錄去檢測。事務(wù)B更新表時,其實無須知道到底哪一行被鎖了,它只要知道反正有一行被鎖了就行了。
說白了意向鎖的主要作用是處理行鎖和表鎖之間的矛盾,能夠顯示“某個事務(wù)正在某一行上持有了鎖,或者準(zhǔn)備去持有鎖”

不可重復(fù)讀:

指的是在同一個事務(wù)中,連續(xù)幾次快照讀,讀取的記錄應(yīng)該是一樣的

不可重復(fù)讀的演示較為簡單,本文不做討論。

幻讀:

指的是在一個事務(wù)A中執(zhí)行了一個當(dāng)前讀操作,而另外一個事務(wù)B在事務(wù)A的影響區(qū)間內(nèi)insert了一條記錄,這時事務(wù)A再執(zhí)行一個當(dāng)前讀操作時,出現(xiàn)了幻行。這和不可重復(fù)讀的主要區(qū)別就在與事務(wù)A中一個是快照讀,一個當(dāng)前讀;并且事務(wù)B中一個是任何的dml操作,一個只是insert。比如在A中select * from test where id10 lock in share mode結(jié)果集為(1,2,3),這時在B中對test表插入了一條記錄4,這時在A中重新查詢結(jié)果集就是(1,2,3,4),和事務(wù)A在第一次查詢出來的結(jié)果集不一致,這里的4就是幻行。

演示條件:由于可重讀的隔離級別下,默認(rèn)采用Next-Key Locks,就是Record lock和gap lock的結(jié)合,即除了鎖住記錄本身,還要再鎖住索引之間的間隙,所以這個gap lock機制默認(rèn)打開,并不會產(chǎn)生幻行,那么我們要演示幻行的話,要么將隔離級別改為read-commited,要么在REPEATABLE-READ模式下禁用掉gap lock,這里我們采用的是第二種方式。

幻讀的演示在演示之前又引入了innodb_locks_unsafe_for_binlog參數(shù),該參數(shù)可以禁用gap lock。

innodb_locks_unsafe_for_binlog:靜態(tài)參數(shù),默認(rèn)為0,表示啟動gap lock,如果設(shè)置為1,表示禁用gap lock,這時mysql就只有record lock了,不過值得注意的是,即使了設(shè)置了1,關(guān)于外鍵和唯一鍵重復(fù)檢查方面用到的gap lock依舊有效。這時可以簡單地理解成事務(wù)的隔離級別退化成可重復(fù)讀,然后兩者應(yīng)該還是有所區(qū)別的。建議是不要隨便設(shè)置,我們這里設(shè)置只是做個簡單的幻讀演示,mysql后續(xù)的版本可能都會廢棄掉這個參數(shù)了。

session 1 先將myid>95的記錄加一個當(dāng)前讀

mysql> show create table test_gap_lock\G
*************************** 1. row ***************************
Table: test_gap_lock
Create Table: CREATE TABLE `test_gap_lock` (
`id` int(11) NOT NULL,
`name` varchar(100) DEFAULT NULL,
`myid` int(11) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `uniq_name` (`name`),
KEY `idex_myid` (`myid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)
mysql> begin;
mysql> select * from test_gap_lock where myid>95 for update;
+----+------------+------+
| id | name | myid |
+----+------------+------+
| 1 | jiang | 99 |
| 2 | hubingmei | 99 |
| 5 | hubingmei4 | 100 |
+----+------------+------+
3 rows in set (0.00 sec)

session 2 這時session 2插入myid=98的記錄成功了。

insert into test_gap_lock values(6,'jiang2',98);

Query OK, 1 row affected (0.00 sec)

session 1 這時session 1再次查看時發(fā)現(xiàn)記錄myid=98的記錄已經(jīng)存在了,這條記錄就是幻行。

mysql> select * from test_gap_lock where myid>95 for update;
+----+------------+------+
| id | name | myid |
+----+------------+------+
| 1 | jiang | 99 |
| 2 | hubingmei | 99 |
| 5 | hubingmei4 | 100 |
| 6 | jiang2 | 98 |
+----+------------+------+
4 rows in set (0.00 sec)

gap lock機制解決幻讀問題演示條件:我們再把innodb_locks_unsafe_for_binlog值改回默認(rèn)值0,并且tx_isolation為

REPEATABLE-READ,演示時務(wù)必explain下,確保該sql走了非唯一索引idx_myid(因為如果測試數(shù)據(jù)較少的話,可能優(yōu)化器直接走全表掃描,那就導(dǎo)致鎖住所有記錄,無法模擬出gap鎖)

演示范例 1(非唯一索引+范圍當(dāng)前讀)mysql> show create table test_gap_lock\G

*************************** 1. row ***************************
Table: test_gap_lock
Create Table: CREATE TABLE `test_gap_lock` (
`id` int(11) NOT NULL,
`name` varchar(100) DEFAULT NULL,
`myid` int(11) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `uniq_name` (`name`),
KEY `idex_myid` (`myid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)

session 1 先explain確保session的當(dāng)前讀sql執(zhí)行走了索引idx_myid

mysql> begin;
Query OK, 0 rows affected (0.00 sec)
mysql> explain select * from test_gap_lock where myid>100 for update;
+----+-------------+---------------+-------+---------------+-----------+---------+------+------+-----------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+---------------+-------+---------------+-----------+---------+------+------+-----------------------+
| 1 | SIMPLE | test_gap_lock | range | idex_myid | idex_myid | 5 | NULL | 2 | Using index condition |
+----+-------------+---------------+-------+---------------+-----------+---------+------+------+-----------------------+
1 row in set (0.00 sec)
mysql> select * from test_gap_lock where myid>100 for update;
+----+------------+------+
| id | name | myid |
+----+------------+------+
| 5 | hubingmei4 | 101 |
| 98 | test | 105 |
+----+------------+------+
2 rows in set (0.00 sec)

session 2 先插入myid=56的成功,因為鎖住的間隙是myid>100,56不在該范圍內(nèi);再插入myid=109時,會一直卡住直到session 1commit,rollback或者直接鎖等待超時,在鎖等待超時前在session 1中執(zhí)行同樣的sql,得到的結(jié)果依舊只有id=5,98的記錄,這樣就避免了幻讀問題

mysql> insert into test_gap_lock values(999,'test2',56);
Query OK, 1 row affected (0.00 sec)
mysql> insert into test_gap_lock values(123,'test4',109);
ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction

演示范例2(非唯一索引+等值當(dāng)前讀)mysql> select * from test_gap_lock;

+-----+------------+------+
| id | name | myid |
+-----+------------+------+
| 1 | jiang | 98 |
| 2 | hubingmei | 99 |
| 5 | hubingmei4 | 101 |
| 6 | jiang2 | 100 |
| 7 | jiang22 | 70 |
| 67 | jiang222 | 80 |
| 98 | test | 105 |
| 123 | test4 | 109 |
| 999 | test2 | 56 |
+-----+------------+------+
9 rows in set (0.00 sec)
session 1
mysql> begin;
Query OK, 0 rows affected (0.00 sec)
mysql> explain delete from test_gap_lock where myid=100;
+----+-------------+---------------+-------+---------------+-----------+---------+-------+------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+---------------+-------+---------------+-----------+---------+-------+------+-------------+
| 1 | SIMPLE | test_gap_lock | range | idex_myid | idex_myid | 5 | const | 2 | Using where |
+----+-------------+---------------+-------+---------------+-----------+---------+-------+------+-------------+
1 row in set (0.00 sec)
mysql> delete from test_gap_lock where myid=100;
Query OK, 2 rows affected (0.00 sec)

session 2 插入myid=99的記錄依舊阻塞,存在gap鎖;插入myid=97的記錄成功

mysql> insert into test_gap_lock values(676,'gap recored test',99);
ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction
mysql> insert into test_gap_lock values(675,'gap recored test1',97);
Query OK, 1 row affected (0.00 sec)

范例3(主鍵索引+范圍當(dāng)前讀)

mysql> select * from test_gap_lock ;
+-----+------------+------+
| id | name | myid |
+-----+------------+------+
| 1 | jiang | 98 |
| 2 | hubingmei | 98 |
| 5 | hubingmei4 | 100 |
| 6 | jiang2 | 100 |
| 7 | jiang22 | 70 |
| 67 | jiang222 | 80 |
| 98 | test | 105 |
| 123 | test4 | 109 |
| 999 | test2 | 56 |
+-----+------------+------+
9 rows in set (0.00 sec)
session 1
mysql> begin;
Query OK, 0 rows affected (0.00 sec)
mysql> explain select * from test_gap_lock where id > 100 for update;
+----+-------------+---------------+-------+---------------+---------+---------+------+------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+---------------+-------+---------------+---------+---------+------+------+-------------+
| 1 | SIMPLE | test_gap_lock | range | PRIMARY | PRIMARY | 4 | NULL | 2 | Using where |
+----+-------------+---------------+-------+---------------+---------+---------+------+------+-------------+
1 row in set (0.00 sec)
mysql> select * from test_gap_lock where id > 100 for update;
+-----+-------+------+
| id | name | myid |
+-----+-------+------+
| 123 | test4 | 109 |
| 999 | test2 | 56 |
+-----+-------+------+
2 rows in set (0.00 sec)

session 2(id=3可插入;id=108無法插入,存在gap lock;id=123的記錄無法select..in share mode,因為該記錄上存在record lock;id=125可以被select..in share mode和update,這點比較奇怪,應(yīng)該這也算是當(dāng)前讀,不過后來查看官方文檔得知,gap鎖只會阻塞insert操作,因為gap間隙中是不存在任何記錄的,除了insert操作,其他的操作結(jié)果應(yīng)該都等價于空操作,mysql就不去阻塞它了)

mysql> insert into test_gap_lock values(108,'gap lock test3',123);
ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction
mysql> insert into test_gap_lock values(3,'gap lock test3',123);
Query OK, 1 row affected (0.00 sec)
mysql> select * from test_gap_lock where id=125 lock in share mode;
Empty set (0.00 sec)
mysql> explain select * from test_gap_lock where id=125 lock in share mode;
+----+-------------+-------+------+---------------+------+---------+------+------+-----------------------------------------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+------+---------------+------+---------+------+------+-----------------------------------------------------+
| 1 | SIMPLE | NULL | NULL | NULL | NULL | NULL | NULL | NULL | Impossible WHERE noticed after reading const tables |
+----+-------------+-------+------+---------------+------+---------+------+------+-----------------------------------------------------+
1 row in set (0.00 sec)
mysql> update test_gap_lock set myid=12345 where id=125;
Query OK, 0 rows affected (0.00 sec)
Rows matched: 0 Changed: 0 Warnings: 0

gap lock的內(nèi)部加鎖原理gap lock的前置條件:1 事務(wù)隔離級別為REPEATABLE-READ,innodb_locks_unsafe_for_binlog參數(shù)為0,且sql走的索引為非唯一索引

2 事務(wù)隔離級別為REPEATABLE-READ,innodb_locks_unsafe_for_binlog參數(shù)為0,且sql是一個范圍的當(dāng)前讀操作,這時即使不是非唯一索引也會加gap lock

gap lock的加鎖步驟

針對上面的范例1(非唯一索引+范圍當(dāng)前讀)和范例3(主鍵索引+范圍當(dāng)前讀)比較好理解,那為什么范例2(非主鍵索引+等值當(dāng)前讀)為什么也會產(chǎn)生gap lock,這要從btree 索引的原理講起,我們都知道,btree索引是按照順序排列的,并且innodb存在主鍵聚集索引,本人繪圖能力有限,已范例2的加鎖過程分析舉例,手寫加鎖過程如下圖


從圖中的數(shù)據(jù)組織順序可以看出,myid=100的記錄有兩條,如果加gap鎖就會產(chǎn)生三個間隙,分別是gap1(98,100),gap2(100,100),gap3(100,105),在這三個開區(qū)間(如果我高中數(shù)學(xué)沒記錯的話)內(nèi)的myid數(shù)值無法插入,顯然gap1還有(myid=99,id=3)(myid

=99,id=4)等記錄,gap2無實際的間隙,gap3還有(myid=101,id=7)等記錄。并且,在myid=100的兩條記錄上加了record lock,也就是這兩條數(shù)據(jù)業(yè)務(wù)無法被其他session進(jìn)行當(dāng)前讀操作(范例三可以看出)

Next-Key Locks

在默認(rèn)情況下,mysql的事務(wù)隔離級別是可重復(fù)讀,并且innodb_locks_unsafe_for_binlog參數(shù)為0,這時默認(rèn)采用next-key locks。所謂Next-Key Locks,就是Record lock和gap lock的結(jié)合,即除了鎖住記錄本身,還要再鎖住索引之間的間隙。

下面我們針對大部分的SQL類型分析是如何加鎖的,假設(shè)事務(wù)隔離級別為可重復(fù)讀。

select .. from

不加任何類型的鎖

select...from lock in share mode

在掃描到的任何索引記錄上加共享的(shared)next-key lock,還有主鍵聚集索引加排它鎖

select..from for update

在掃描到的任何索引記錄上加排它的next-key lock,還有主鍵聚集索引加排它鎖

update..where delete from..where

在掃描到的任何索引記錄上加next-key lock,還有主鍵聚集索引加排它鎖

insert into..

簡單的insert會在insert的行對應(yīng)的索引記錄上加一個排它鎖,這是一個record lock,并沒有g(shù)ap,所以并不會阻塞其他session在gap間隙里插入記錄。不過在insert操作之前,還會加一種鎖,官方文檔稱它為insertion intention gap lock,也就是意向的gap鎖。這個意向gap鎖的作用就是預(yù)示著當(dāng)多事務(wù)并發(fā)插入相同的gap空隙時,只要插入的記錄不是gap間隙中的相同位置,則無需等待其他session就可完成,這樣就使得insert操作無須加真正的gap lock。想象一下,如果一個表有一個索引idx_test,表中有記錄1和8,那么每個事務(wù)都可以在2和7之間插入任何記錄,只會對當(dāng)前插入的記錄加record lock,并不會阻塞其他session插入與自己不同的記錄,因為他們并沒有任何沖突。

假設(shè)發(fā)生了一個唯一鍵沖突錯誤,那么將會在重復(fù)的索引記錄上加讀鎖。當(dāng)有多個session同時插入相同的行記錄時,如果另外一個session已經(jīng)獲得改行的排它鎖,那么將會導(dǎo)致死鎖。

insert導(dǎo)致的死鎖現(xiàn)象演示1

mysql> show create table t1\G
*************************** 1. row ***************************
Table: t1
Create Table: CREATE TABLE `t1` (
`i` int(11) NOT NULL DEFAULT '0',
PRIMARY KEY (`i`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)

session 1

mysql> begin;
Query OK, 0 rows affected (0.00 sec)
mysql> INSERT INTO t1 VALUES(1);
Query OK, 1 row affected (0.00 sec)


session 2 這時session2一直被卡住

mysql> begin;
Query OK, 0 rows affected (0.00 sec)
mysql> INSERT INTO t1 VALUES(1);


session 3 這時session3也一直被卡住

mysql> begin;

Query OK, 0 rows affected (0.00 sec)

mysql> INSERT INTO t1 VALUES(1);


session 1 這時我們回滾session1

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


發(fā)現(xiàn)session 2的insert成功,而session3檢測到死鎖回滾

session 2 Query OK, 1 row affected (28.87 sec)

session 3 ERROR 1213 (40001): Deadlock found when trying to get lock; try restarting transaction

死鎖原因分析:

首先session1插入一條記錄,獲得該記錄的排它鎖,這時session2和session3都檢測到了主鍵沖突錯誤,但是由于session1并沒有提交,所以session1并不算插入成功,于是它并不能直接報錯吧,于是session2和session3都申請了該記錄的共享鎖,這時還沒獲取到共享鎖,處于等待隊列中。這時session1 rollback了,也就釋放了該行記錄的排它鎖,那么session2和session3都獲取了該行上的共享鎖。而session2和session3想要插入記錄,必須獲取排它鎖,但由于他們自己都擁有了共享鎖,于是永遠(yuǎn)無法獲取到排它鎖,于是死鎖就發(fā)生了。如果這時session1是commit而不是rollback的話,那么session2和session3都直接報錯主鍵沖突錯誤。查看死鎖日志也是一目了然



insert導(dǎo)致的死鎖現(xiàn)象2

另外一個類似的死鎖是session1刪除了id=1的記錄并未提交,這時session2和session3插入id=1的記錄。這時session1 commit了,session2和session3需要insert的話,就需要獲取排它鎖,那么死鎖也就發(fā)生了;session1 rollback,則session2和session3報錯主鍵沖突。這里不再做演示。


INSERT ... ON DUPLICATE KEY UPDATE

這種sql和insert加鎖的不同的是,如果檢測到鍵沖突,它直接申請加排它鎖,而不是共享鎖。

replace

replace操作如果沒有檢測到鍵沖突的話,那么它的加鎖策略和insert相似;如果檢測到鍵沖突,那么它也是直接再申請加排它鎖

INSERT INTO T SELECT ... FROM S WHERE ...

在T表上的加鎖策略和普通insert一致,另外還會在S表上的相關(guān)記錄上加共享的next-key lock。(如果是可重復(fù)讀模式,則不會加鎖)

CREATE TABLE ... SELECT ...在select的表上加共享的next-key lock

自增id的加鎖策略

當(dāng)一張表的某個字段是自增列時,innodb會在該索引的末位加一個排它鎖。為了訪問這個自增的數(shù)值,需要加一個表級鎖,不過這個表級鎖的持續(xù)時間只有當(dāng)前sql,而不是整個事務(wù),即當(dāng)前sql執(zhí)行完,該表級鎖就釋放了。其他session無法在這個表級鎖持有時插入任何記錄。

外鍵檢測的加鎖策略

如果存在外鍵約束,任何的insert,update,delete將會檢測約束條件,將會在相應(yīng)的記錄上加共享的record lock,無論是否存在外鍵沖突。

以上這篇詳談innodb的鎖(record,gap,Next-Key lock) 就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

您可能感興趣的文章:
  • mysql之innodb的鎖分類介紹
  • MySQL InnoDB之事務(wù)與鎖詳解
  • MySQL中InnoDB存儲引擎的鎖的基本使用教程

標(biāo)簽:合肥 長沙 潛江 江門 武漢 南昌 吉安 東莞

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《詳談innodb的鎖(record,gap,Next-Key lock)》,本文關(guān)鍵詞  詳談,innodb,的鎖,record,gap,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《詳談innodb的鎖(record,gap,Next-Key lock)》相關(guān)的同類信息!
  • 本頁收集關(guān)于詳談innodb的鎖(record,gap,Next-Key lock)的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    日本久久高清视频| 欧美日韩一级大片| av网站在线免费看| 在线免费观看一区二区三区| 精品日本高清在线播放| 97在线视频观看| 五月天久久比比资源色| 日本天堂一区| 国产乱精品一区二区三区| 亚洲精品男人天堂| 亚洲精品免费看| 狠狠色成人综合网图片区| 高清不卡一区二区在线| 99综合视频| 91成人在线免费视频| 日韩中文字幕在线免费观看| 日韩欧美另类一区二区| 久久久久久91香蕉国产| 欧美性猛交xxxx免费看久久| 欧美日韩加勒比精品一区| 午夜精品无码一区二区三区| jizz在线观看中文| 天堂网在线观看在线观看精品| 欧美一区二区在线视频观看| 1024在线看片| av资源在线播放| 欧美日韩成人免费视频| 九九热在线免费视频| eeuss性xxxxxx电影| 国产精品9999| 日韩三级在线播放| 午夜三级在线观看| 久久久99免费视频| xxx免费视频| 国产性猛交普通话对白| 538任你躁在线精品免费| 亚洲欧美色婷婷| 四虎国产精品成人免费入口| 污视频在线观看网站| 678在线观看视频| 日韩欧美亚洲区| 美腿丝袜亚洲图片| 中文字幕人妻互换av久久| 国内精品久久久久久久久久久| 老司机午夜免费精品视频| 精品午夜福利在线观看| www.久久久| www国产精品| 日韩视频在线观看一区二区三区| 91久久精品一区二区| yiren22亚洲综合伊人22| 欧美理伦片在线播放| 日韩欧美在线视频免费观看| 韩日在线一区| 日韩电影中文字幕在线观看| 欧美啪啪一区| 久久久999国产精品| 亚洲人一区二区| 中文字幕在线观看亚洲| 成人h动漫在线| 日本熟妇毛茸茸丰满| 国产日韩一区二区三免费高清| 催眠调教后宫乱淫校园| 日韩在线视频精品| **三级三级97片毛片| 国产精品资源在线看| 伊人伊人av电影| 无码人妻精品一区二区50| 国产精品theporn| 中国一级黄色录像| japanesexxxxfree在线观看| 91精品久久久久久9s密挑| 黄色高清视频在线观看| 欧美一级高潮片| 高潮按摩久久久久久av免费| 免费在线观看亚洲| 国产成人无码精品亚洲| ●精品国产综合乱码久久久久| 亚洲精品影片| 毛片毛片毛片毛片毛片毛片毛片毛片毛片| 久久久无码人妻精品一区| 5566先锋影音夜色资源站在线观看| 欧美日韩在线播放一区| 久久大胆人体| 免费成人av电影| 午夜精品久久久久99蜜桃最新版| 亚欧精品在线| 黄网在线播放| 国产91视频一区| 久久久久久久久久久久久久久久久| 日本xxxx免费| 999在线精品| 天天综合网站| 国产chinasex对白videos麻豆| 久久狠狠久久综合桃花| 免费看av软件| 99久久激情| 视频一区在线免费看| 国产黄色在线网站| 九九热精品在线视频| 国产午夜福利一区| 色综合久久88色综合天天提莫| 久久性感美女视频| 欧美国产精品久久| 狠狠综合久久av一区二区小说| 日本三级一区| 亚洲少妇一区二区三区| 国产精品xxxxxx| 老司机久久99久久精品播放免费| 最新国产成人在线观看| 国产a视频免费观看| 亚洲一区二区欧美日韩| 日本欧美高清| 女明星视频黄又免费| 在线免费观看日韩欧美| 欧美在线影院| 女人在下体塞跳蛋在线观看| 久久久无码中文字幕久...| 天堂av在线一区| 麻豆成人久久精品二区三区红| 色综合天天综合狠狠| 人妻体体内射精一区二区| 一区二区三区精品在线观看| 国产精品77777| 亚洲成人国产精品| 男女羞羞网站| 91sa在线看| 97久久中文字幕| 91综合久久一区二区| 又黄又www的网站| 亚洲欧美日韩不卡| 6080成人| 日本wwww色| 91精品一区二区| 三级在线观看| 亚洲人成伊人成综合网小说| 成人黄色免费| 日韩午夜在线观看视频| 六月丁香综合网| 精品视频一区二区三区四区| 国产又粗又长又爽| 亚洲天堂中文字幕在线| 中文字幕在线播放不卡一区| 国产99久久久国产精品潘金| 国内精品久久久久久久久| 亚洲午夜性刺激影院| 国产999视频| 黄视频网站免费看| 国产一区二区三区四区五区3d| 樱桃成人精品视频在线播放| 96视频在线观看欧美| 久久久久久久久综合| 丰满大乳奶做爰ⅹxx视频| av网站导航在线观看免费| 日韩有码在线播放| julia中文字幕一区二区99在线| 亚洲黄色精品视频| 黄色网免费看| missav|免费高清av在线看| 波多野结衣的一区二区三区| 国产又粗又猛又爽又黄av| 免费毛片在线播放免费| 欧美国产欧美亚州国产日韩mv天天看完整| 杨钰莹一级淫片aaaaaa播放| 日本在线视频观看| 国产精品腿扒开做爽爽爽挤奶网站| 日本欧美色综合网站免费| 另类中文字幕国产精品| 久久久精品网站| 在线看片福利| 亚洲不卡av一区二区三区| 欧美一级欧美一级| 成人91在线| 亚洲一二三区不卡| 色婷婷香蕉在线一区二区| 免费高清成人在线| 国产精品中出一区二区三区| 丰满少妇高潮在线观看| 国产欧美日韩一区二区三区| 欧美国产激情一区二区三区蜜月| 亚洲自拍偷拍区| 黑人巨大精品欧美一区二区| 99久久伊人| 四虎影音在线| 色播亚洲视频在线观看| 国产精品人人爽人人爽| 亚洲日本免费| 在线视频一区二区三区在线播放| 亚洲精品国产精品自产a区红杏吧| 精品欧美色视频网站在线观看| 国产一区二区丝袜| 三级在线观看视频| 日韩免费av电影| 91精品免费观看| 欧美日韩99| 爆操欧美美女| 三级网在线观看| 一本不卡影院| 人妻丰满熟妇av无码久久洗澡| 岛国在线视频免费看| 精品一区二区三区五区六区| 亚洲激情播播| 欧美亚洲爱爱另类综合| 亚洲综合一区在线| 26uuu亚洲国产精品| 欧美激情在线观看视频免费| 在线手机福利影院| 久久女同互慰一区二区三区| 牛夜精品久久久久久久99黑人| 黄色av网址在线观看| 国产精品日韩精品欧美精品| 狠狠v欧美ⅴ日韩v亚洲v大胸| 高清视频一区| 日韩最新免费不卡| 国内视频自拍在线视频| 大桥未久av一区二区三区中文| 精品欧美一区二区精品久久| www.成人精品免费网站青椒| 思思99re6国产在线播放| 欧美精品乱码久久久久久| 午夜午夜精品一区二区三区文| 亚洲国产清纯| 久久美女艺术照精彩视频福利播放| 午夜影视日本亚洲欧洲精品| 天天久久人人| 日韩精品视频免费专区在线播放| 资源网第一页久久久| 国产日本在线播放| 91精选福利| 99精品久久99久久久久| 四虎永久成年免费影院| 日本dvd播放| 亚洲综合免费观看高清完整版| 日本加勒比一区| 成人精品gif动图一区| 美国一级片在线观看| 亚洲AV无码一区二区三区少妇| 亚洲成年人av| 欧美在线观看一二区| 日韩va亚洲va欧美va久久| 玖草视频在线| 91精品国产闺蜜国产在线闺蜜| 中文字幕在线观看免费视频| 亚洲自拍偷拍网址| 欧美xfplay| 2一3sex性hd| 一区二区三区在线观看动漫| 成人免费网站在线观看视频| 国产黄色小视频在线观看| 成人在线视频国产| 国产精品国产自产拍在线| 午夜国产精品一区| 国产精品黄色av| 国产精品入口免费麻豆| 亚洲精品乱码久久久久久蜜桃91| 高清无码一区二区在线观看吞精| 国产精品一卡二卡| 看看黄色一级片| 成人免费看视频网站| 我要看黄色一级片| 亚洲图片欧美综合| 亚洲精品久久久久中文字幕欢迎你| 日韩中文字幕麻豆| 女人丝袜激情亚洲| 国产精品一级无码| 欧美日韩一区自拍| 男女羞羞视频教学| 在线播放/欧美激情| 亚洲第一区第二区第三区| 亚洲色偷偷综合亚洲av伊人| 日本成人在线不卡视频| 欧美成人高清视频在线观看| 国产精品久久久久永久免费看| 免费网站永久免费观看| 精品少妇人妻av一区二区| 欧美孕妇性xx| 91精品国产黑色紧身裤美女| 中文字幕黄色av| 91精品久久久久久久蜜月| 五月天激情图片| 国产精品777一区二区| 欧美一级视频免费在线观看| 天天天干夜夜夜操| 在线不卡国产精品| 亚洲成人精品综合在线| 91久久精品日日躁夜夜躁欧美| 日本视频www| 韩国女主播一区二区三区| 最新中文字幕av专区| 成人国产视频在线观看| 欧美成人高潮一二区在线看| 久久久精品国产sm调教| 菠萝蜜视频在线观看www入口| 免费看男女www网站入口在线| 免费欧美一级片| 91九色在线看| 一区二区三区加勒比av| 我不卡影院28| 欧美妇性猛交视频| 日韩精品亚洲元码| 国产精品一区二区无码对白| 亚洲a一区二区三区| 亚洲精品一区二区三区区别| 色狠狠av一区二区三区香蕉蜜桃| 好吊色欧美一区二区三区四区| 国精品**一区二区三区在线蜜桃| 国产精品69页| 91麻豆精品国产91久久久更新时间| 欧美一级国产精品| 无码小电影在线观看网站免费| 国产福利在线播放麻豆| 国产九色91| 欧洲精品毛片网站| 亚洲精品电影在线观看| 国产亚洲精品成人av久久ww| 亚洲麻豆一区二区三区| 国产伦精品一区二区三区千人斩| 少妇一区二区三区四区| 国产精品久久久久9999吃药| 国产精品一区二区三区观看| 日韩精品一区二区不卡| 中文字幕在线观看2018| 四虎影视av| 2023国产精品视频| 欧美乱妇一区二区三区不卡视频| 欧美国产激情视频| 日本成人中文| 午夜精品久久久久久久男人的天堂|