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

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

Mysql InnoDB的鎖定機制實例詳解

瀏覽:77日期: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久久,三上悠亚国产精品一区二区三区
欧美特黄视频| 国产日本精品| 青草综合视频| 日本大胆欧美人术艺术动态| 欧美亚洲福利| 欧美韩日一区| 欧美日韩精品一本二本三本| 日本中文字幕一区二区| 国产精品草草| 天堂久久av| 蜜桃视频一区二区三区| 亚洲在线成人| 精品久久97| 狠狠爱成人网| 久久在线免费| 欧美日韩国产高清电影| 国产精品tv| 999精品一区| 色偷偷偷在线视频播放| 毛片在线网站| 日韩av不卡在线观看| 亚洲专区视频| 欧美精品高清| 日本电影久久久| 日韩**一区毛片| 亚洲va中文在线播放免费| 国产精品成人a在线观看| 日韩在线卡一卡二| 国产亚洲高清视频| 成人精品国产亚洲| 一区二区高清| 美日韩精品视频| 亚洲精品美女| 麻豆成人综合网| 天堂日韩电影| 欧美在线资源| 亚洲一区导航| 99tv成人| 国产精品伦一区二区| 国产精品一站二站| 水蜜桃久久夜色精品一区| 日本午夜精品| 最新国产拍偷乱拍精品| 欧美极品中文字幕| 精品国产麻豆| 国产精品7m凸凹视频分类| 伊人www22综合色| 久久丁香四色| 国产日韩欧美中文在线| 精品国产亚洲一区二区三区大结局| 蜜桃传媒麻豆第一区在线观看| 国产成人免费av一区二区午夜| 亚洲久草在线| 国产精品密蕾丝视频下载| 亚洲综合电影| 手机精品视频在线观看| 欧美日韩日本国产亚洲在线 | 麻豆高清免费国产一区| 日韩毛片视频| 亚洲免费一区三区| 男人天堂欧美日韩| 日韩精品午夜视频| 蜜桃视频第一区免费观看| 国产一级成人av| 欧美精品影院| 天堂av一区| 视频一区二区国产| 久久久国产精品网站| 国产精品黄网站| 人人精品亚洲| 精品亚洲美女网站| 红杏一区二区三区| 亚洲性色视频| 欧美亚洲国产一区| 亚洲tv在线| 肉色欧美久久久久久久免费看| 免播放器亚洲一区| 日韩在线短视频| 国产一精品一av一免费爽爽| 在线观看免费一区二区| 欧美成人久久| 欧美精品一区二区三区精品| 日韩av字幕| 免费成人网www| 视频精品一区二区| 精品日韩在线| 日本精品另类| 美女精品视频在线| 欧美日韩视频| 麻豆mv在线观看| 日韩动漫一区| 蜜桃一区二区三区| 国产传媒av在线| 亚洲二区在线| 久久超碰99| 日韩激情av在线| av成人国产| 日韩av影院| 免费视频亚洲| 日韩有吗在线观看| 成人久久一区| 神马午夜在线视频| 美女免费视频一区| 欧美中文一区二区| 美女精品视频在线| 91嫩草精品| 国产一区2区| 日韩av不卡在线观看| 国产精品麻豆久久| 亚洲性视频h| 天堂av在线一区| bbw在线视频| 精品黄色一级片| 国产精品中文字幕亚洲欧美| 日韩高清不卡在线| 日韩动漫一区| 青青在线精品| 日韩精品一区第一页| 99国产精品自拍| 久久中文字幕av| 久久亚洲专区| 国产精品久久久久蜜臀| 国产一区二区三区久久| 国产视频久久| 久久人人精品| 秋霞国产精品| 成人日韩在线| 日韩精品成人在线观看| 夜夜嗨网站十八久久| 九九久久国产| 国产精品1区在线| 欧美精品一区二区久久| 日韩精品dvd| 日韩在线二区| 日韩av网站在线观看| 综合日韩在线| 久久蜜桃精品| 欧美成a人国产精品高清乱码在线观看片在线观看久 | a日韩av网址| av在线最新| 久久要要av| 国产精品一区二区美女视频免费看 | 日韩一区自拍| 欧美一级一区| 97久久亚洲| 国产精品久久久久av蜜臀| 国产福利亚洲| а√天堂8资源在线| 日韩激情啪啪| 欧美午夜网站| 免费日韩精品中文字幕视频在线| 尤物在线精品| 日韩在线网址| 久久不卡国产精品一区二区| 国产粉嫩在线观看| 国产欧美一区| 免费一区二区三区在线视频| 日本一区二区三区视频在线看| 欧美一区影院| 久久成人国产| 999久久久精品国产| 麻豆精品蜜桃视频网站| 成人精品久久| 久久亚洲精品中文字幕| 色婷婷综合网| 欧美精品成人| 午夜亚洲福利| 国产精品亚洲综合色区韩国| 久久精品伊人| 亚洲一级二级| 日本免费在线视频不卡一不卡二| 美女久久久久| 国产传媒av在线| 久久一区欧美| 99久久激情| 亚洲精品自拍| 岛国av在线播放| 精品国产一区二区三区2021| 私拍精品福利视频在线一区| 免费的成人av| 国产精品第十页| 欧美肉体xxxx裸体137大胆| 成年男女免费视频网站不卡| 色婷婷精品视频| 日本一区中文字幕| 福利精品在线| 国产精品嫩草99av在线| 国产精品一区三区在线观看| 久久久精品日韩| 日本精品不卡| 麻豆久久精品| 日韩高清中文字幕一区二区| 91亚洲人成网污www| 国产成人精品一区二区三区免费| 日韩理论视频| 在线精品一区| 欧美久久天堂| 国产精久久久| 日韩亚洲在线| 伊人成人在线视频|