日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

Mysql InnoDB的鎖定機制實例詳解

瀏覽:84日期:2023-10-07 08:42:16
1.InnoDB的鎖定機制

InnoDB存儲引擎支持行級鎖,支持事務處理,事務是有一組SQL語句組成的邏輯處理單元,他的ACID特性如下:

原子性(Atomicity): 事務具有原子不可分割的特性,要么一起執行,要么都不執行。 一致性(Consistency): 在事務開始和事務結束時,數據都保持一致狀態。 隔離性(Isolation): 在事務開始和結束過程中,事務保持著一定的隔離特性,保證事務不受外部并發數據操作的影響。 持久性(Durability): 在事務完成后,數據將會被持久化到數據庫中。

并發事務能提高數據庫資源的利用率,提高了數據庫的事務吞吐量,但并發事務也存在一些問題,主要包括:

更新丟失(Lost Update): 兩個事務更新同一條數據,但第二個事務中途失敗退出,導致兩個修改都失效了;因為此時數據庫沒有執行任何鎖操作,并發事務并沒有被隔離。(現代數據庫已經不存在這種問題) 臟讀(Dirty Reads): 一個事務讀了某行數據,但是另一個事務已經更新了這行數據,這是非常危險的,很可能導致所有的操作被回滾。 不可重復讀: 一個事務對一行數據重復讀取兩次(多次),可是得到了不同的結果,在兩次讀取過程中,有可能存在另一個事務對數據進行了修改。 幻讀:事務在操作過程中進行兩次查詢,第二次查詢結果包含了第一次沒有出現的數據。出現幻讀的主要原因是兩次查詢過程中另一個事務插入新的數據。

數據庫并發中的“更新丟失”通常應該是完全避免的,但防止更新丟失數據,并不能單靠數據庫事務控制來解決,需要應用程序對要更新的數據加必要的鎖來解決,而以上出現的數據庫問題都必要由數據庫提供一定的事務隔離機制來解決。為了避免數據庫事務并發帶來的問題,在標準SQL規范中定義了4個事務的隔離級別,不同的隔離級別對事務處理不一樣。

數據庫隔離級別的比較

隔離級別 讀數據一致性 臟讀 不可重復讀 幻讀 未提交讀 (Read uncommitted) 最低級別,只能保證不讀取物理上損壞的數據 是 是 是 已提交讀 (Read committed) 語句級 否 是 是 可重復讀 (Repeatable read) 事務級 否 否 是 可序列化 (Serializable) 最高級別,事務級 否 否 否

InnoDB存儲引擎實現了4中行鎖,分別時共享鎖(S)、排他鎖(X)、意向共享鎖(IS)、意向排他鎖(IX)。

共享鎖:大家都能讀,但是不能改,只有其中一個獨占共享鎖時候才能改; 排它鎖:我要改,你們都不能改,也不能讀(但可以MVCC快照讀) 理解意向鎖

意向鎖不會和行級的S和X鎖沖突,只會和表級的S和X鎖沖突

意向鎖是為了避免遍歷全部行鎖

考慮這個例子:

事務A鎖住了表中的一行,讓這一行只能讀,不能寫。

之后,事務B申請整個表的寫鎖。

如果事務B申請成功,那么理論上它就能修改表中的任意一行,這與A持有的行鎖是沖突的。

數據庫需要避免這種沖突,就是說要讓B的申請被阻塞,直到A釋放了行鎖。

數據庫要怎么判斷這個沖突呢?

step1:判斷表是否已被其他事務用表鎖鎖表

step2:判斷表中的每一行是否已被行鎖鎖住。

注意step2,這樣的判斷方法效率實在不高,因為需要遍歷整個表。

于是就有了意向鎖。

在意向鎖存在的情況下,事務A必須先申請表的意向共享鎖,成功后再申請一行的行鎖。

在意向鎖存在的情況下,上面的判斷可以改成

step1:不變

step2:發現表上有意向共享鎖,說明表中有些行被共享行鎖鎖住了,因此,事務B申請表的寫鎖會被阻塞。

1.1通過索引檢索數據,上共享鎖,行鎖(如果不通過索引,會使用表鎖)

1.1通過索引檢索數據,上共享鎖,行鎖SessionA SessionBmysql> set autocommit=0; mysql> set autocommit=0;Query OK, 0 rows affected (0.02 sec) Query OK, 0 rows affected (0.02 sec)mysql> select * from test; mysql> select * from test;--------------------------------------------------------------------------------+----+-------+-------+-------+ +----+-------+-------+-------+ | id | name | money | level | | id | name | money | level |+----+-------+-------+-------+ +----+-------+-------+-------+| 1 | tom | 100 | 1 | | 1 | tom | 100 | 1 || 2 | jack | 200 | 2 | | 2 | jack | 200 | 2 || 3 | lucas | 300 | 3 | | 3 | lucas | 300 | 3 |+----+-------+-------+-------+ +----+-------+-------+-------+3 rows in set (0.00 sec) 3 rows in set (0.00 sec)--------------------------------------------------------------------------------對主鍵索引上共享鎖,其他事務也能獲取到共享鎖mysql> select * from test where id=1 lock in share mode;+----+------+-------+-------+| id | name | money | level |+----+------+-------+-------+| 1 | tom | 100 | 1 |+----+------+-------+-------+1 row in set (0.01 sec)--------------------------------------------------------------------------------事務B也能繼續加共享鎖mysql> select * from test where id=1 lock in share mode;+----+------+-------+-------+| id | name | money | level |+----+------+-------+-------+| 1 | tom | 100 | 1 |+----+------+-------+-------+1 row in set (0.01 sec)但無法更新,因為事務A也加了共享鎖mysql> update test set level=11 where id=1;ERROR 1205 (HY000): Lock wait timeout exceeded;try restarting transactionMORE:無法加排它鎖select *from test where id=1 for update;ERROR 1205 (HY000): Lock wait timeout exceeded;try restarting transaction可以更新未加鎖的,比如mysql> update test set level=11 where id=2;Query OK, 1 row affected (0.00 sec)Rows matched: 1 Changed: 1 Warnings: 0--------------------------------------------------------------------------------事務A也無法更新,因為事務B加了共享鎖mysql> update test set level=11 where id=1;ERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction--------------------------------------------------------------------------------任意一個釋放共享鎖,則獨占共享鎖的事務可以更新mysql> commit;Query OK, 0 rows affected (0.00 sec)--------------------------------------------------------------------------------事務B釋放鎖,事務A獨占,可以更新了mysql> update test set level=11 where id=1;Query OK, 1 row affected (0.00 sec)Rows matched: 1 Changed: 1 Warnings: 0

1.2通過索引檢索數據,上排他鎖,行鎖

1.2通過索引檢索數據,上排他鎖,行鎖SessionA SessionBmysql> set autocommit=0; mysql> set autocommit=0;Query OK, 0 rows affected (0.02 sec) Query OK, 0 rows affected (0.02 sec)mysql> select * from test; mysql> select * from test;--------------------------------------------------------------------------------+----+-------+-------+-------+ +----+-------+-------+-------+ | id | name | money | level | | id | name | money | level |+----+-------+-------+-------+ +----+-------+-------+-------+| 1 | tom | 100 | 1 | | 1 | tom | 100 | 1 || 2 | jack | 200 | 2 | | 2 | jack | 200 | 2 || 3 | lucas | 300 | 3 | | 3 | lucas | 300 | 3 |+----+-------+-------+-------+ +----+-------+-------+-------+3 rows in set (0.00 sec) 3 rows in set (0.00 sec)--------------------------------------------------------------------------------對主鍵索引上排他鎖,其他事務也能獲取到共享鎖mysql> select *from test whereid=1 for update;+----+------+-------+-------+| id | name | money | level |+----+------+-------+-------+| 1 | tom | 100 | 1 |+----+------+-------+-------+1 row in set (0.01 sec)--------------------------------------------------------------------------------事務B則不能繼續上排它鎖,會發生等待mysql> select *from test where id=1 for update;ERROR 1205 (HY000): Lock wait timeout exceeded;try restarting transactionMORE:也不能更新,因為更新也是上排它鎖mysql> update test set level=2 where id=1;ERROR 1205 (HY000): Lock wait timeout exceeded;try restarting transaction也不能上共享鎖mysql> select * from test where level=1 lock in share mode;ERROR 1205 (HY000): Lock wait timeout exceeded;try restarting transaction--------------------------------------------------------------------------------事務A可以更新mysql> update test set level=11 where id=1;Query OK, 1 row affected (0.08 sec)Rows matched: 1 Changed: 1 Warnings: 0--------------------------------------------------------------------------------釋放排它鎖mysql> commit;Query OK, 0 rows affected (0.00 sec)--------------------------------------------------------------------------------事務A釋放鎖,事務B就可以加排它鎖了mysql> select * from test where id=1 for update;+----+------+-------+-------+| id | name | money | level |+----+------+-------+-------+| 1 | tom | 100 | 1 |+----+------+-------+-------+1 row in set (0.00 sec)

1.3通過索引更新數據,也是上排他鎖,行鎖

對于 update,insert,delete 語句會自動加排它鎖

1.3通過索引更新數據,也是上排他鎖,行鎖SessionA SessionBmysql> set autocommit=0; mysql> set autocommit=0;Query OK, 0 rows affected (0.02 sec) Query OK, 0 rows affected (0.02 sec)mysql> select * from test; mysql> select * from test;--------------------------------------------------------------------------------+----+-------+-------+-------+ +----+-------+-------+-------+ | id | name | money | level | | id | name | money | level |+----+-------+-------+-------+ +----+-------+-------+-------+| 1 | tom | 100 | 1 | | 1 | tom | 100 | 1 || 2 | jack | 200 | 2 | | 2 | jack | 200 | 2 || 3 | lucas | 300 | 3 | | 3 | lucas | 300 | 3 |+----+-------+-------+-------+ +----+-------+-------+-------+3 rows in set (0.00 sec) 3 rows in set (0.00 sec)--------------------------------------------------------------------------------更新id=1的行,就給該行上了排它鎖,其他事務無法更新該行mysql> update test set level=11 where id=1;Query OK, 1 row affected (0.00 sec)Rows matched: 1 Changed: 1 Warnings: 0--------------------------------------------------------------------------------事務B則不能更新id=1的行,會發生等待mysql> update test set level=21 where id=1;ERROR 1205 (HY000): Lock wait timeout exceeded;try restarting transactionMORE:也不能上排它鎖mysql> select *from test where id=1 for update;ERROR 1205 (HY000): Lock wait timeout exceeded;try restarting transaction也不能上共享鎖mysql> select * from test where level=1 lock in share mode;ERROR 1205 (HY000): Lock wait timeout exceeded;try restarting transaction--------------------------------------------------------------------------------釋放排它鎖mysql> commit;Query OK, 0 rows affected (0.00 sec)--------------------------------------------------------------------------------事務A釋放鎖,事務B就可以加排它鎖了mysql> select * from test where id=1 for update;+----+------+-------+-------+| id | name | money | level |+----+------+-------+-------+| 1 | tom | 100 | 11|+----+------+-------+-------+1 row in set (0.00 sec)

2.1臟讀

//臟讀//2.1臟讀SessionA SessionBmysql> set autocommit=0; mysql> set autocommit=0;Query OK, 0 rows affected (0.02 sec) Query OK, 0 rows affected (0.02 sec)set session transaction isolationset session transaction isolation level read uncommitted;level read uncommitted; Query OK, 0 rows affected (0.00 sec)Query OK, 0 rows affected (0.00 sec) mysql> select * from test; mysql> select * from test;--------------------------------------------------------------------------------+----+-------+-------+-------+ +----+-------+-------+-------+ | id | name | money | level | | id | name | money | level |+----+-------+-------+-------+ +----+-------+-------+-------+| 1 | tom | 100 | 1 | | 1 | tom | 100 | 1 || 2 | jack | 200 | 2 | | 2 | jack | 200 | 2 || 3 | lucas | 300 | 3 | | 3 | lucas | 300 | 3 |+----+-------+-------+-------+ +----+-------+-------+-------+3 rows in set (0.00 sec) 3 rows in set (0.00 sec)--------------------------------------------------------------------------------mysql> update test set level=100 where id=1;Query OK, 1 row affected (0.00 sec)Rows matched: 1 Changed: 1 Warnings: 0--------------------------------------------------------------------------------//臟讀mysql> select *from test where id=1;+----+------+-------+-------+| id | name | money | level |+----+------+-------+-------+| 1 | tom | 100 | 100 |+----+------+-------+-------+1 row in set (0.00 sec)--------------------------------------------------------------------------------rollback;Query OK, 0 rows affected (0.01 sec)mysql> select *from test where id=1;+----+------+-------+-------+| id | name | money | level |+----+------+-------+-------+| 1 | tom | 100 | 1 |+----+------+-------+-------+1 row in set (0.00 sec)

2.2不可重復讀

2.2不可重復讀//臟讀SessionA SessionBmysql> set autocommit=0; mysql> set autocommit=0;Query OK, 0 rows affected (0.02 sec) Query OK, 0 rows affected (0.02 sec)set session transaction isolationset session transaction isolation level read uncommitted;level read uncommitted; Query OK, 0 rows affected (0.00 sec)Query OK, 0 rows affected (0.00 sec) mysql> select * from test; mysql> select * from test;--------------------------------------------------------------------------------+----+-------+-------+-------+ +----+-------+-------+-------+ | id | name | money | level | | id | name | money | level |+----+-------+-------+-------+ +----+-------+-------+-------+| 1 | tom | 100 | 1 | | 1 | tom | 100 | 1 || 2 | jack | 200 | 2 | | 2 | jack | 200 | 2 || 3 | lucas | 300 | 3 | | 3 | lucas | 300 | 3 |+----+-------+-------+-------+ +----+-------+-------+-------+3 rows in set (0.00 sec) 3 rows in set (0.00 sec)--------------------------------------------------------------------------------mysql> update test set level=100 where id=1;Query OK, 1 row affected (0.00 sec)Rows matched: 1 Changed: 1 Warnings: 0--------------------------------------------------------------------------------mysql> select *from test where id=1;+----+------+-------+-------+| id | name | money | level |+----+------+-------+-------+| 1 | tom | 100 | 100 |+----+------+-------+-------+1 row in set (0.00 sec)--------------------------------------------------------------------------------mysql> update test set level=1000 where id=1;Query OK, 1 row affected (0.00 sec)Rows matched: 1 Changed: 1 Warnings: 0--------------------------------------------------------------------------------//不可重復讀//讀三次,第一次是level是1,第二次是100,第三次是1000mysql> select *from test where id=1;+----+------+-------+-------+| id | name | money | level |+----+------+-------+-------+| 1 | tom | 100 | 1000|+----+------+-------+-------+1 row in set (0.00 sec)

2.3幻讀

//2.3幻讀SessionA SessionBmysql> set autocommit=0; mysql> set autocommit=0;Query OK, 0 rows affected (0.02 sec) Query OK, 0 rows affected (0.02 sec)set session transaction isolationset session transaction isolation level read uncommitted;level read uncommitted; Query OK, 0 rows affected (0.00 sec)Query OK, 0 rows affected (0.00 sec) mysql> select * from test; mysql> select * from test;--------------------------------------------------------------------------------+----+-------+-------+-------+ +----+-------+-------+-------+ | id | name | money | level | | id | name | money | level |+----+-------+-------+-------+ +----+-------+-------+-------+| 1 | tom | 100 | 1 | | 1 | tom | 100 | 1 || 2 | jack | 200 | 2 | | 2 | jack | 200 | 2 || 3 | lucas | 300 | 3 | | 3 | lucas | 300 | 3 |+----+-------+-------+-------+ +----+-------+-------+-------+3 rows in set (0.00 sec) 3 rows in set (0.00 sec)--------------------------------------------------------------------------------mysql> update test set level=100 where id=1;Query OK, 1 row affected (0.00 sec)Rows matched: 1 Changed: 1 Warnings: 0--------------------------------------------------------------------------------mysql> select *from test where id=1;+----+------+-------+-------+| id | name | money | level |+----+------+-------+-------+| 1 | tom | 100 | 100 |+----+------+-------+-------+1 row in set (0.00 sec)--------------------------------------------------------------------------------mysql> insert into test (name, money,level) VALUES (’tim’,250,4);Query OK, 1 row affected (0.01 sec)--------------------------------------------------------------------------------//幻讀//讀兩次,第二次多了tim的數據//如果是rr級別,需要使用當前讀select * from test lock in share mode;否則因為MVCC的緣故,是讀不到tim的mysql> select * from test;+----+-------+-------+-------+| id | name | money | level |+----+-------+-------+-------+| 1 | tom | 100 | 1 || 2 | jack | 200 | 2 || 3 | lucas | 300 | 3 || 4 | tim | 250 | 4 |+----+-------+-------+-------+4 row in set (0.00 sec)3 間隙鎖(Net-Key鎖)

MVCC使RR級別下,事務當前讀,來避免了讀情況下的幻讀問題,但如果寫更新時候呢?在范圍更新的同時,往范圍內插入新數據,怎么辦?

于是就有了間隙鎖,在更新某個區間數據時,將會鎖定這個區間的所有記錄。例如update XXX where id between 1 and 100, 就會鎖住id從1到100之間的所有的記錄。值得注意的是,在這個區間中假設某條記錄并不存在,該條記錄也會被鎖住,這時,如果另一個事務往這個區間添加數據,就必須等待上一個事務釋放鎖資源。

使用間隙鎖有兩個目的,一是防止幻讀;二是滿足其恢復和賦值的需求。

3.1范圍間隙鎖,顯式左開右閉區間

//間隙鎖(Net-Key鎖) 范圍間隙鎖,左開右閉區間SessionA SessionBmysql> set autocommit=0; mysql> set autocommit=0;Query OK, 0 rows affected (0.02 sec) Query OK, 0 rows affected (0.02 sec) mysql> select * from test; mysql> select * from test;--------------------------------------------------------------------------------+----+-------+-------+-------+ +----+-------+-------+-------+ | id | name | money | level | | id | name | money | level |+----+-------+-------+-------+ +----+-------+-------+-------+| 1 | tom | 100 | 1 | | 1 | tom | 100 | 1 || 2 | jack | 200 | 2 | | 2 | jack | 200 | 2 || 3 | lucas | 300 | 3 | | 3 | lucas | 300 | 3 |+----+-------+-------+-------+ +----+-------+-------+-------+3 rows in set (0.00 sec) 3 rows in set (0.00 sec)--------------------------------------------------------------------------------mysql> update test set level=0where money between 0 and 200;Query OK, 2 rows affected (0.02 sec)Rows matched: 2 Changed: 2 Warnings: 0理論上應該鎖定[0,300)這個區間--------------------------------------------------------------------------------插入money=0等待mysql> insert into test (name, money,level) VALUES (’tim’,0,0);ERROR 1205 (HY000): Lock wait timeout exceeded;try restarting transaction插入money=90等待mysql> insert into test (name, money,level) VALUES (’tim’,90,0);ERROR 1205 (HY000): Lock wait timeout exceeded;try restarting transaction插入money=100等待mysql> insert into test (name, money,level) VALUES (’tim’,100,0);ERROR 1205 (HY000): Lock wait timeout exceeded;try restarting transaction插入money=299等待mysql> insert into test (name, money,level) VALUES (’tim’,299,0);ERROR 1205 (HY000): Lock wait timeout exceeded;try restarting transaction插入money=300 okmysql> insert into test (name, money,level) VALUES (’tim’,300,0);Query OK, 1 row affected (0.00 sec)

3.2單個間隙鎖 隱式區間

上小節是指定update某個區間,那如果說是只update一個值呢?還會有間隙鎖么?

//間隙鎖(Net-Key鎖) 單個間隙鎖,左開右閉區間SessionA SessionBmysql> set autocommit=0; mysql> set autocommit=0;Query OK, 0 rows affected (0.02 sec) Query OK, 0 rows affected (0.02 sec) mysql> select * from test; mysql> select * from test;--------------------------------------------------------------------------------+----+-------+-------+-------+ +----+-------+-------+-------+ | id | name | money | level | | id | name | money | level |+----+-------+-------+-------+ +----+-------+-------+-------+| 1 | tom | 100 | 1 | | 1 | tom | 100 | 1 || 2 | jack | 200 | 2 | | 2 | jack | 200 | 2 || 3 | lucas | 300 | 3 | | 3 | lucas | 300 | 3 |+----+-------+-------+-------+ +----+-------+-------+-------+3 rows in set (0.00 sec) 3 rows in set (0.00 sec)--------------------------------------------------------------------------------mysql> update test set level=0where money = 200;Query OK, 1 row affected (0.00 sec)Rows matched: 1 Changed: 1 Warnings: 0理論上應該鎖定[0,300)這個區間--------------------------------------------------------------------------------插入money=0 okmysql> insert into test (name, money,level) VALUES (’tim’,0,0);Query OK, 1 row affected (0.00 sec)插入money=90 okmysql> insert into test (name, money,level) VALUES (’tim’,90,0);Query OK, 1 row affected (0.00 sec)插入money=100等待mysql> insert into test (name, money,level) VALUES (’tim’,100,0);ERROR 1205 (HY000): Lock wait timeout exceeded;try restarting transaction插入money=150等待mysql> insert into test (name, money,level) VALUES (’tim’,150,0);ERROR 1205 (HY000): Lock wait timeout exceeded;try restarting transaction插入money=200等待mysql> insert into test (name, money,level) VALUES (’tim’,200,0);ERROR 1205 (HY000): Lock wait timeout exceeded;try restarting transaction插入money=240等待mysql> insert into test (name, money,level) VALUES (’tim’,240,0);ERROR 1205 (HY000): Lock wait timeout exceeded;try restarting transaction插入money=300 okmysql> insert into test (name, money,level) VALUES (’tim’,300,0);Query OK, 1 row affected (0.00 sec)

當不指定區間時,隱式的區間為索引B+數前后兩個節點的值所確定的區間,也是左開右閉,對于上述例子,就是[0,300)這個區間。

總結

到此這篇關于Mysql InnoDB鎖定機制的文章就介紹到這了,更多相關Mysql InnoDB鎖定機制內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: MySQL 數據庫
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
99精品视频精品精品视频| 日韩高清成人| 蜜臀国产一区二区三区在线播放| 久久激情一区| 99久久婷婷这里只有精品| 久久久久蜜桃| 欧美网站在线| 久久国产精品久久久久久电车| 另类专区亚洲| 99精品视频在线观看免费播放| 日韩欧美一区二区三区在线观看| 国产激情在线播放| 快播电影网址老女人久久| 成人免费网站www网站高清| av在线日韩| 91精品电影| 日韩中文字幕区一区有砖一区 | 免费不卡在线观看| 自拍自偷一区二区三区| 日韩精品一区二区三区免费视频| 日韩欧美美女在线观看| 欧美久久一区二区三区| 国产精品黄网站| 9999国产精品| 亚洲精品在线观看91| 蜜臀精品久久久久久蜜臀| 欧美日一区二区在线观看| 激情久久一区二区| 国精品一区二区三区| 麻豆9191精品国产| 欧美黄色精品| 视频福利一区| 日韩欧美精品一区二区综合视频| 国产精品xxx在线观看| 国产精品毛片久久| 欧美精品黄色| 国产欧美日韩在线观看视频| 国产美女高潮在线观看| 中文在线不卡| 国产精品sm| 91精品一区二区三区综合在线爱| 免费精品视频最新在线| 精品一区av| 天堂va蜜桃一区二区三区| 国产欧美欧美| 欧美日韩在线二区| 欧美欧美黄在线二区| 亚洲a在线视频| 欧美一级二级三级视频| 日本国产精品| 亚洲精品一级二级三级| 国产传媒在线| 日本成人在线一区| 久久婷婷av| 国产亚洲字幕| 亚洲午夜黄色| 国产精品va视频| 午夜亚洲福利在线老司机| 麻豆高清免费国产一区| 亚洲一区二区毛片| 激情黄产视频在线免费观看| 亚洲精品观看| 99久久久久| 精品一区视频| 少妇精品久久久一区二区| 老牛影视精品| 日本99精品| 黄色成人精品网站| 97精品一区| 欧美日本三区| 视频在线观看国产精品| av高清不卡| 国产欧美日韩一级| 日韩中文字幕1| 99精品一区| 精品免费av| 欧美片网站免费| 在线亚洲自拍| 人人草在线视频| 国产精品videosex极品| 免费在线观看日韩欧美| 久久视频精品| 亚洲精品成人图区| 国产精品a级| 亚洲精品日韩久久| 狠狠色综合网| 久久国产中文字幕| 亚洲性色av| 精品国产午夜肉伦伦影院| 日韩av中文字幕一区二区| 石原莉奈在线亚洲三区| 免费国产自久久久久三四区久久 | 伊人www22综合色| 亚洲精品123区| 黄色在线一区| 精品欧美视频| 国产精品一二| 好吊一区二区三区| 不卡一区2区| 福利一区和二区| 国产免费av国片精品草莓男男| 尤物在线精品| 极品av在线| 精品深夜福利视频| 奇米色欧美一区二区三区| 国产精品美女久久久| 日本欧美不卡| 国产精品白丝久久av网站| 日韩欧美中文字幕在线视频| 99国产成+人+综合+亚洲欧美| 亚洲不卡av不卡一区二区| 激情国产在线| 亚洲永久av| 超碰在线99| 91视频久久| 国产精品99一区二区三| 精品久久久久久久| 久久在线91| 精品99久久| 91亚洲成人| 成人啊v在线| 久久久久亚洲| 国产 日韩 欧美一区| 成人欧美一区二区三区的电影| 国产aⅴ精品一区二区四区| 精品一区二区三区四区五区| 欧美激情三区| 98精品视频| 日本高清不卡一区二区三区视频| 日韩毛片视频| 欧美 日韩 国产精品免费观看| 亚洲高清久久| 久久www成人_看片免费不卡| 三级欧美在线一区| 日产欧产美韩系列久久99| 欧美日一区二区在线观看| 国产精品久久国产愉拍| 国产精品调教视频| 成人精品久久| 欧美高清一区| 国产精品传媒麻豆hd| 精品中文一区| 欧美日韩中文| 午夜av一区| 亚洲精品影视| 免费在线播放第一区高清av| 91亚洲国产高清| 久久av一区| 91av亚洲| 7m精品国产导航在线| 亚洲中字黄色| 蜜臀av国产精品久久久久| 伊人久久大香线蕉av不卡| 欧美特黄一级| 日本午夜精品久久久| 精品国产三区在线| 欧美+日本+国产+在线a∨观看| 午夜在线精品偷拍| 欧美有码在线| 亚洲综合在线电影| 免费人成在线不卡| 国产精品扒开腿做爽爽爽软件| 中文字幕成在线观看| 在线 亚洲欧美在线综合一区| 日韩亚洲精品在线观看| 精品久久国产一区| 亚洲网站视频| 亚洲毛片视频| 国产一区二区三区四区二区| 在线日韩视频| 久久国产乱子精品免费女| av高清一区| 91嫩草精品| 婷婷成人综合| 国产视频网站一区二区三区| 香蕉视频亚洲一级| 日本国产欧美| 欧美成人基地 | 蘑菇福利视频一区播放| 国产午夜久久av| 久久久天天操| 欧美在线观看天堂一区二区三区| 中文在线中文资源| 亚洲欧洲av| 日韩国产网站| 欧美日本久久| 欧美日本不卡高清| 日韩成人午夜精品| 91精品国产自产精品男人的天堂| 高清av一区| 日韩久久电影| 久久国产小视频| 久久精品中文| 国产精品视区| 欧美一区在线观看视频| 欧美成a人片免费观看久久五月天| 新版的欧美在线视频| 鲁大师成人一区二区三区| 久久亚洲二区| 欧美激情另类|