精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

幻讀:聽(tīng)說(shuō)我是被MVCC干掉的?

原創(chuàng)
運(yùn)維 數(shù)據(jù)庫(kù)運(yùn)維 開(kāi)發(fā)工具
我是幻讀,聽(tīng)說(shuō)有人認(rèn)為我是 MVCC 解決的,為了讓大家更全面地理解我,只能親自來(lái)解釋一下。

【51CTO.com原創(chuàng)稿件】我是幻讀,聽(tīng)說(shuō)有人認(rèn)為我是 MVCC 解決的,為了讓大家更全面地理解我,只能親自來(lái)解釋一下。

[[396015]]

圖片來(lái)自 Pexels

我是誰(shuí)?

先給大家做一個(gè)簡(jiǎn)單的自我介紹,我就是事務(wù)并發(fā)時(shí)會(huì)產(chǎn)生的三大問(wèn)題之一。

我的其他倆兄弟臟讀、不可重復(fù)讀被 MVCC 在上一個(gè)回合無(wú)情的干掉了,至于上個(gè)回合發(fā)生了什么可以去看劇情回顧。

我的由來(lái)就是因?yàn)橹魅嗽诓僮饕唤M數(shù)據(jù)時(shí)還有很多人也在對(duì)這組數(shù)據(jù)進(jìn)行操作。

舉一個(gè)簡(jiǎn)單的案例:根據(jù)條件在對(duì)一組數(shù)據(jù)進(jìn)行過(guò)濾返回的結(jié)果為 100 個(gè),但是在主人操作的同時(shí)其他人又新增了符合條件的數(shù)據(jù),然后主人再次進(jìn)行查詢(xún)時(shí)返回結(jié)果為 101。第二次返回的數(shù)據(jù)跟第一次返回?cái)?shù)據(jù)不一致。

于是我誕生了,大家還給我起了個(gè)很好聽(tīng)的名字幻讀。為什么會(huì)給我起這個(gè)名字呢!那是因?yàn)槲医o人們的現(xiàn)象好像出了幻覺(jué)一樣。

為什么有人會(huì)認(rèn)為我是被 MVCC 干掉的

為了演示方便,就直接使用之前的測(cè)試表來(lái)進(jìn)行操作。

同時(shí)大家可以看到此表還有一些測(cè)試數(shù)據(jù),一切從頭開(kāi)始,清空表。

清空表的命令:

  1. truncate table_name 

執(zhí)行這個(gè)命令會(huì)使表的數(shù)據(jù)清空,并且自增 ID 會(huì)從 1 開(kāi)始。

從執(zhí)行過(guò)程來(lái)看,truncate table 類(lèi)似于 drop table 然后在 create table,這里的環(huán)境都是測(cè)試環(huán)境,千萬(wàn)不要在線(xiàn)上進(jìn)行操作,因?yàn)樗@過(guò)了 DML 方法,是不能回滾的。

進(jìn)行了一點(diǎn)小插曲,進(jìn)入正題。

根據(jù)上圖的執(zhí)行步驟,預(yù)期來(lái)說(shuō)左邊事務(wù)的第一條 select 語(yǔ)句查詢(xún)結(jié)果為空。第二個(gè) select 查詢(xún)結(jié)果為 1 條數(shù)據(jù),包含右邊事務(wù)提交的數(shù)據(jù)。

但在實(shí)際測(cè)試的情況下,第一次執(zhí)行 select 和第二次執(zhí)行 select 返回結(jié)果一致。

從這個(gè)案例中,可以得出結(jié)論確實(shí)在不可重復(fù)隔離級(jí)別下會(huì)解決幻讀問(wèn)題(在快照讀的前提下)。

我真的是被 MVCC 解決的?

通過(guò)上述測(cè)試案例來(lái)看,貌似在 MySQL 中通過(guò) MVCC 就解決我的引來(lái)的問(wèn)題,那既然都解決了我的問(wèn)題,為什么還有串行化的隔離級(jí)別呢!好疑惑啊!

帶著這個(gè)疑問(wèn)繼續(xù)進(jìn)行實(shí)驗(yàn),為了方便就不再使用上邊表結(jié)構(gòu)了,建立一個(gè)簡(jiǎn)單的表結(jié)構(gòu)。

再進(jìn)入一個(gè)小插曲你知道在 MySQL 終端如何清屏嗎?執(zhí)行命令 system clear 即可。

接著開(kāi)始新一輪的測(cè)試:

上圖案例事務(wù) 1 幾次查詢(xún)數(shù)據(jù)都是空。此時(shí)事務(wù) 2 已經(jīng)成功將數(shù)據(jù)插入并且提交。但當(dāng)事務(wù) 1 幾次查詢(xún)數(shù)據(jù)為空之后進(jìn)行數(shù)據(jù)插入時(shí),提示主鍵重復(fù)。

再來(lái)看一個(gè)案例:

如上圖:

  • step1:事務(wù) 1 開(kāi)啟事務(wù)
  • step2:事務(wù) 2 開(kāi)啟事務(wù)
  • step3:事務(wù) 1 查詢(xún)數(shù)據(jù)只有一條數(shù)據(jù)
  • step4:事務(wù) 2 添加一條數(shù)據(jù)
  • step5:事務(wù) 1 查詢(xún)數(shù)據(jù)為一條
  • step6:事務(wù) 2 提交事務(wù)
  • step7:事務(wù) 1 查詢(xún)數(shù)據(jù)為一條
  • step8:事務(wù) 1 修改 name
  • step9:猜想一下此時(shí)表內(nèi)數(shù)據(jù)會(huì)發(fā)生什么改變

此案例中事務(wù) 1 始終讀取數(shù)據(jù)都是一條數(shù)據(jù),但是在修改數(shù)據(jù)時(shí)影響數(shù)據(jù)行數(shù)卻是 2,再次進(jìn)行查看數(shù)據(jù)時(shí)竟然出現(xiàn)了事務(wù) 2 添加的數(shù)據(jù)。這也可以看作是一種幻讀。

小結(jié):通過(guò)以上倆個(gè)案例得知在 MySQL 可重復(fù)讀隔離級(jí)別中并沒(méi)有完全解決幻讀問(wèn)題,而只是解決了快照讀下的幻讀問(wèn)題。

而對(duì)于當(dāng)前讀的操作依然存在幻讀問(wèn)題,也就是說(shuō) MVCC 對(duì)于幻讀的解決是不徹底的。

再聊當(dāng)前讀、快照讀

在上一回合中快照讀、當(dāng)前讀已經(jīng)被消化了,為了防止消化不良這里再簡(jiǎn)單說(shuō)明一下。

①當(dāng)前讀

所有操作都加了鎖,并且鎖之間除了共享鎖都是互斥的,如果想要增、刪、改、查時(shí)都需要等待鎖釋放才可以,所以讀取的數(shù)據(jù)都是最新的記錄。

簡(jiǎn)單來(lái)說(shuō),當(dāng)前讀就是加了鎖的,增、刪、改、查,不管鎖是共享鎖、排它鎖均為當(dāng)前讀。

在 MySQL 的 Innodb 存儲(chǔ)引擎下,增、刪、改操作都會(huì)默認(rèn)加上鎖,所以增、刪、改操作默認(rèn)就為當(dāng)前讀。

②快照讀

快照讀的出現(xiàn)旨在提高事務(wù)并發(fā)性,實(shí)現(xiàn)基于我的敵人 MVCC,簡(jiǎn)單來(lái)說(shuō)快照讀就是不加鎖的非阻塞讀,即簡(jiǎn)單的 select 操作(select * from user)。

在 Innodb 存儲(chǔ)引擎下執(zhí)行簡(jiǎn)單的 select 操作時(shí),會(huì)記錄下當(dāng)前的快照讀數(shù)據(jù),之后的 select 會(huì)沿用第一次快照讀的數(shù)據(jù),即使有其它事務(wù)提交也不會(huì)影響當(dāng)前的 select 結(jié)果,這就解決了不可重復(fù)讀問(wèn)題。

快照讀讀取的數(shù)據(jù)雖然是一致的,但有可能不是最新的數(shù)據(jù)而是歷史數(shù)據(jù)。

告訴你們吧!當(dāng)前讀的情況下,我是被 next-key locks 干掉的

第二小節(jié)中得知在快照讀下由于我引發(fā)的問(wèn)題已經(jīng)被 MVCC 消滅了。但是在小節(jié)三進(jìn)行案例測(cè)試發(fā)現(xiàn)在當(dāng)前讀下我又滿(mǎn)血復(fù)活了。

我要是那么容易被干掉還怎么被稱(chēng)為打不死的小強(qiáng),這不是鬧笑話(huà)呢!說(shuō)歸說(shuō),鬧歸鬧如果 MVCC 把它的小弟 next-key locks 帶上那我就完了,就不再像灰太狼說(shuō)經(jīng)典語(yǔ)錄“我一定會(huì)回來(lái)的”。

此時(shí)就要思考一個(gè)問(wèn)題,在 Innodb 存儲(chǔ)引擎下,是默認(rèn)給快照讀加 next-key locks,還是說(shuō)需要手動(dòng)加鎖。

通過(guò)官方文檔對(duì)于 next-key locks 的解釋?zhuān)?/p>

To prevent phantoms, InnoDB uses an algorithm called next-key locking that combines index-row locking with gap locking. InnoDB performs row-level locking in such a way that when it searches or scans a table index, it sets shared or exclusive locks on the index records it encounters. Thus, the row-level locks are actually index-record locks. In addition, a next-key lock on an index record also affects the “gap” before that index record. That is, a next-key lock is an index-record lock plus a gap lock on the gap preceding the index record. If one session has a shared or exclusive lock on record R in an index, another session cannot insert a new index record in the gap immediately before R in the index order.

大致意思,為了防止幻讀,Innodb 使用 next-key lock 算法,將行鎖(record lock)和間隙鎖(gap lock)結(jié)合在一起。

Innodb 行鎖在搜索或者掃描表索引時(shí),會(huì)在遇到的索引記錄上設(shè)置共享鎖或者排它鎖,因此行鎖實(shí)際是索引記錄鎖。

另外, 在索引記錄上設(shè)置的鎖同樣會(huì)影響索引記錄之前的“間隙(gap)”。即 next-key lock 是索引記錄行加上索引記錄之前的“gap”上的間隙鎖定。

并且還給了一個(gè)案例:

  1. SELECT * FROM child WHERE id > 100 FOR UPDATE

當(dāng) Innodb 掃描索引時(shí),會(huì)將 id 大于 100 地上鎖,阻止任何大于 100 的數(shù)據(jù)添加。

到這里就回答了上邊問(wèn)題,在 Innodb 下解決當(dāng)前讀產(chǎn)生的幻讀問(wèn)題需要手動(dòng)加鎖來(lái)解決。

再來(lái)看一個(gè)案例,下圖為此時(shí)的數(shù)據(jù)情況:

下圖的這個(gè)案例就解決了在第三節(jié)中第一個(gè)案例的幻讀問(wèn)題。

如上圖:

  • step事務(wù)1:開(kāi)啟事務(wù)
  • step事務(wù)2:開(kāi)啟事務(wù)
  • step事務(wù)1:查詢(xún) ID 為 4 的這條數(shù)據(jù)并且加上排它鎖
  • step事務(wù)2:添加 ID 為 4 的數(shù)據(jù),并且等待事務(wù) 1 釋放鎖
  • step事務(wù)1:添加 ID 為 4 的數(shù)據(jù),添加成功
  • step事務(wù)1:查詢(xún)當(dāng)前數(shù)據(jù)
  • step事務(wù)1:提交事務(wù)
  • step事務(wù)2:報(bào)錯(cuò),返回主鍵重復(fù)問(wèn)題

這個(gè)案例查詢(xún)的索引列是主鍵并且是唯一的,此時(shí) Innodb 引擎會(huì)對(duì) next-key lock 做降級(jí)處理,也就是只鎖定當(dāng)前查詢(xún)的索引記錄行,而不是范圍鎖定。

案例二:還是使用上邊的數(shù)據(jù),但是這次我們進(jìn)行一次范圍查找。

此時(shí)的數(shù)據(jù)為 1,3,5,查找的范圍為大于 3。從下圖可以看出當(dāng)事務(wù) 2 執(zhí)行添加 ID 為 2 的是可以添加成功的。

但是當(dāng)添加 ID 6 時(shí)需要等待。此時(shí)若事務(wù) 1 不提交事務(wù),事務(wù) 2 添加 ID 為 6 的這條數(shù)據(jù)就執(zhí)行不成功。

對(duì)于上述的 SQL 語(yǔ)句 select * from user where id > 3 for update;執(zhí)行返回的只有 5 這一行數(shù)據(jù)。

此時(shí)鎖定的范圍為 (3,5],(5,∞),所以說(shuō) id 為 2 的可以插入,ID 為 4 或者大于 5 的都是插入不了的。

以上就是在 Innodb 中解決幻讀問(wèn)題最終方案。

幻讀解決方案

為了方便大家直觀(guān)了解幻讀的解決方案,這里咔咔進(jìn)行簡(jiǎn)單的總結(jié)。

通過(guò) MVCC 解決了快照讀下的幻讀問(wèn)題,為什么能解決?在第一次執(zhí)行簡(jiǎn)單的 select 語(yǔ)句就生成了一個(gè)快照,并且在后邊的 select 查詢(xún)都是沿用第一次快照讀的結(jié)果。所以說(shuō)快照讀查詢(xún)到的數(shù)據(jù)有可能是歷史數(shù)據(jù)。

通過(guò) next-key lock 解決當(dāng)前讀的幻讀問(wèn)題,next-key lock 是 record lock 和 gap lock 的結(jié)合,鎖定的是一個(gè)范圍,如果查詢(xún)數(shù)據(jù)為索引記錄行,則只會(huì)鎖定當(dāng)前行,也就是說(shuō)降級(jí)為 record lock。

若為范圍查找時(shí)就會(huì)鎖定一個(gè)范圍,例如上例中 ID 為 1,3,5 查詢(xún)大于 3 的數(shù)據(jù),則會(huì)把 (3,5],(5,∞) 進(jìn)行范圍鎖定,其它事務(wù)在鎖未釋放之前是無(wú)法插入的。

從官方文檔還可得知如果需要驗(yàn)證數(shù)據(jù)唯一性只需要給查詢(xún)加上共享鎖即可,也就是給 select 語(yǔ)句加上 in lock share mode,如果返回結(jié)果為空,則可以進(jìn)行插入,并且插入的這個(gè)值肯定是唯一的。

同樣也可以添加 next key lock 防止其他人同時(shí)插入相同數(shù)據(jù),小節(jié) 5 的所有案例就是使用的 next-key lock,從這一點(diǎn)可以得知 next-key lock 是可以鎖定表內(nèi)不存在的索引。

根據(jù)上述結(jié)論來(lái)看,如果想要檢測(cè)數(shù)據(jù)唯一性使用共享鎖,那么多個(gè)事務(wù)同時(shí)開(kāi)啟共享鎖,又同時(shí)添加相同的數(shù)據(jù)怎么辦,會(huì)不會(huì)出現(xiàn)問(wèn)題呢?

明確地說(shuō)明是不會(huì)的,如果多個(gè)事務(wù)同時(shí)插入相同數(shù)據(jù)只會(huì)有一個(gè)事務(wù)添加成功,其它事務(wù)會(huì)拋出錯(cuò)誤,這個(gè)就是一個(gè)新的概念“死鎖”。

擴(kuò)展

事務(wù) ID 是在何時(shí)分配的?在本文或者其它資料中都能得到一個(gè)信息就是當(dāng)執(zhí)行一條簡(jiǎn)單的 select 語(yǔ)句同時(shí)也會(huì)生成 read-view。

雖然快照讀、read-view 都是基于事務(wù)啟動(dòng)的前提下,但是 read-veiw 是通過(guò)未提交事務(wù) ID 組成的。

①那么到底是在何時(shí)分配事務(wù) ID 的呢?

事務(wù)的啟動(dòng)方式有兩種,分別為顯示啟動(dòng)、另一種是設(shè)置 autocommit=0 后執(zhí)行 select 就會(huì)啟動(dòng)事務(wù)。

在顯示啟動(dòng)中最簡(jiǎn)單的就是以 begin 語(yǔ)句開(kāi)始,也可以使用 start transaction 開(kāi)啟事務(wù)。

若使用 start trancaction 開(kāi)啟事務(wù)也可以選擇開(kāi)始只讀事務(wù)還是讀寫(xiě)事務(wù)。

看了很多資料都說(shuō)當(dāng)開(kāi)啟一個(gè)事務(wù)時(shí)會(huì)分配一個(gè)事務(wù) ID,那么來(lái)驗(yàn)證一下是這個(gè)樣子的嗎?

通過(guò)上圖可以看到當(dāng)執(zhí)行一個(gè) begin 語(yǔ)句之后查詢(xún)事務(wù) ID 是空的,也就說(shuō)當(dāng)執(zhí)行 begin 后并沒(méi)有分配 trx_id。

那么當(dāng)執(zhí)行 begin 后在支持 DML 語(yǔ)句呢!

根據(jù)文檔得知,執(zhí)行 begin 命令并不是真正開(kāi)啟一個(gè)事務(wù),僅僅是為當(dāng)前線(xiàn)程設(shè)定標(biāo)記,表示為顯式開(kāi)啟的事務(wù)。

所以要明白對(duì)數(shù)據(jù)進(jìn)行了增、刪、改、查等操作后才算真正開(kāi)啟了一個(gè)事務(wù),此時(shí)會(huì)去引擎層開(kāi)啟事務(wù)。

②為什么事務(wù) ID 差異特別大?

上圖中查詢(xún)了當(dāng)前活躍的事務(wù) ID,但是兩個(gè)事務(wù) ID 的差異特別大。相信很多小伙伴都遇到過(guò)這個(gè)問(wèn)題,有問(wèn)題不害怕,害怕的是沒(méi)有問(wèn)題。

事實(shí)上在這兩條數(shù)據(jù)中只有 20841 是真正的事務(wù) ID,那么第二條數(shù)據(jù)中的 ID 是什么呢!

想知道這個(gè)數(shù)字是什么的前提是知道是怎么來(lái)的。

從上圖可以看出,當(dāng)執(zhí)行 select 語(yǔ)句后會(huì)產(chǎn)生一個(gè)非常大的事務(wù) ID,那能不能理解為這種差異非常大的事務(wù) ID 是通過(guò)快照讀的方式才會(huì)生成的。

接著再這個(gè)事務(wù)下面在執(zhí)行一個(gè) insert 語(yǔ)句,然后再查看一下事務(wù) ID 的狀態(tài)。

不可思議的是在事務(wù)中先執(zhí)行 select 語(yǔ)句,然后執(zhí)行 insert 語(yǔ)句,事務(wù) ID 發(fā)生了變化,這是什么原因呢?

經(jīng)過(guò)資料查詢(xún)得知當(dāng)執(zhí)行一個(gè)簡(jiǎn)單的 select 語(yǔ)句時(shí),被稱(chēng)之為只讀事務(wù),為了避免給只讀事務(wù)分配 trx_id 帶來(lái)不必要的開(kāi)銷(xiāo)就沒(méi)有對(duì)其分配事務(wù) ID。

只讀事務(wù)沒(méi)有分配 undo segment 也不會(huì)分配 LOCK 鎖結(jié)構(gòu),本質(zhì)上只讀事務(wù)的 trx_id 的值就是 0。

但是為了執(zhí)行 select * from information_schema.INNODB_TRX 或者 show engine innodb status 時(shí)。

就會(huì)通過(guò) reinterpret_cast(trx) | (max_trx_id + 1) 將指針轉(zhuǎn)換為一個(gè) 64 字節(jié)非負(fù)整數(shù)然后位或 (max_trx_id + 1) 就是這么個(gè)值。

關(guān)于這個(gè)值的生成過(guò)程就不用再去深究了,只需要知道在只讀事務(wù)下是不會(huì)分配事務(wù) ID,而查詢(xún)出來(lái)的這個(gè)值只是為了顯示而存在的沒(méi)有實(shí)際意義。

但是當(dāng)你執(zhí)行 select * from information_schema.INNODB_TRX 查詢(xún)出來(lái)的事務(wù) ID,再通過(guò) show engine innodb status 查詢(xún)是查不到的。

在 Innodb 下如果事務(wù)為只讀事務(wù)則不會(huì)在 Innodb 數(shù)據(jù)結(jié)構(gòu)中顯示,因此你是看不到的。

作者:咔咔

簡(jiǎn)介:堅(jiān)持學(xué)習(xí)、堅(jiān)持寫(xiě)博、堅(jiān)持分享是咔咔從業(yè)以來(lái)一直所秉持的信念。希望在偌大互聯(lián)網(wǎng)中咔咔的文章能帶給你一絲絲幫助。我是咔咔,下期見(jiàn)。

編輯:陶家龍 

征稿:有投稿、尋求報(bào)道意向技術(shù)人請(qǐng)?zhí)砑有【幬⑿?gordonlonglong

【51CTO原創(chuàng)稿件,合作站點(diǎn)轉(zhuǎn)載請(qǐng)注明原文作者和出處為51CTO.com】

 

責(zé)任編輯:武曉燕 來(lái)源: 51CTO技術(shù)棧
相關(guān)推薦

2023-08-09 17:22:30

MVCCMySQL數(shù)據(jù)

2019-05-28 13:50:27

MySQL幻讀數(shù)據(jù)庫(kù)

2022-10-19 11:17:35

2022-09-08 13:56:49

MySQL事務(wù)記錄鎖

2022-06-30 08:00:00

MySQL關(guān)系數(shù)據(jù)庫(kù)開(kāi)發(fā)

2022-02-17 21:13:08

MySQL架構(gòu)體系

2021-04-20 19:21:50

臟讀MySQL幻讀

2024-04-19 08:18:47

MySQLSQL隔離

2021-04-20 08:02:08

業(yè)務(wù)數(shù)據(jù)用戶(hù)

2024-09-02 00:00:00

MySQL幻讀數(shù)據(jù)

2024-03-11 00:00:00

mysqlInnoDB幻讀

2021-02-23 09:06:00

MVCC版本并發(fā)

2024-04-24 08:26:35

事務(wù)數(shù)據(jù)InnoDB

2024-04-25 08:16:06

InnodbReadMVCC

2022-03-29 10:52:08

MySQL數(shù)據(jù)庫(kù)

2022-04-27 07:32:02

臟讀幻讀不可重復(fù)讀

2019-03-21 09:06:00

數(shù)據(jù)庫(kù)復(fù)讀幻讀

2021-12-02 08:19:06

MVCC面試數(shù)據(jù)庫(kù)

2020-04-09 08:29:50

編程語(yǔ)言事件驅(qū)動(dòng)

2016-09-30 01:04:45

數(shù)據(jù)分析數(shù)據(jù)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

国产字幕视频一区二区| a屁视频一区二区三区四区| 国产91丝袜在线播放0| 97国产精品人人爽人人做| 国产肥白大熟妇bbbb视频| 电影亚洲一区| 亚洲国产精品久久人人爱| 欧美欧美一区二区| 国产ts人妖调教重口男| 亚洲欧美日本视频在线观看| 最新日韩中文字幕| 动漫av在线免费观看| 成人影院av| 亚洲男人的天堂av| 欧美久久久久久| www.桃色av嫩草.com| 日韩高清不卡在线| 欧美—级a级欧美特级ar全黄| 四虎影成人精品a片| 日本在线成人| 欧美亚洲综合在线| 欧美成人三级在线视频| 成人直播在线| 成人污视频在线观看| 国产欧美一区二区三区久久| 在线观看免费国产视频| 自拍欧美日韩| 最近2019中文字幕一页二页| 精品人妻在线视频| 欧美精品影院| 欧美日韩久久久| 国产亚洲精品网站| 精品日韩av| 亚洲日本青草视频在线怡红院| 日本黑人久久| 四虎在线免费观看| 国产精品66部| 成人网页在线免费观看| 中文字幕人妻色偷偷久久| 亚洲激情午夜| 欧美激情欧美狂野欧美精品| 夫妻性生活毛片| 日韩精品免费| 在线精品国产成人综合| 中文字幕网站在线观看| 色老板在线视频一区二区| 欧美一区二区三区| 国产精品久久久久久久久久妞妞 | 亚洲一区二区色| aⅴ色国产欧美| 99久久精品费精品国产风间由美| 九一精品在线观看| 欧美日韩国产精品一区二区| 性色av一区二区三区| 亚洲成人动漫一区| 国产视频福利一区| 久久久久久无码午夜精品直播| 亚洲精品1区| 色综合久综合久久综合久鬼88| 久久国产高清视频| 久久久久久久久99精品大| 日韩中文在线中文网在线观看| 亚洲理论片在线观看| 精品国产乱码久久久久久果冻传媒| 亚洲精品国产精品国自产观看浪潮| 无码成人精品区在线观看| 久久大胆人体视频| 日韩精品在线看| 欧美多人猛交狂配| 精品成人影院| 日韩视频永久免费观看| 老湿机69福利| 激情视频一区二区三区| 91po在线观看91精品国产性色 | 亚洲成人黄色片| 大尺度一区二区| 九九九九九精品| 国产在线观看免费| 中文字幕一区二区不卡| 免费cad大片在线观看| av白虎一区| 日韩欧美精品中文字幕| 午夜久久久精品| 免费观看亚洲天堂| 亚洲国产精品久久久久| 高清中文字幕mv的电影| 久久久久久亚洲精品美女| 欧美一区二区三区喷汁尤物| 午夜剧场在线免费观看| 9999精品视频| 亚洲第一区在线| 日本黄色www| 小说区图片区色综合区| 中文字幕亚洲无线码在线一区| 国产一二三区精品| 亚洲视频播放| 成人精品一区二区三区| 日韩在线视频免费| 国产精品久久久久影视| av高清在线免费观看| 精品176极品一区| 亚洲白拍色综合图区| 国产又粗又黄又猛| 伊人久久亚洲热| 国产精品日韩在线观看| 东京干手机福利视频| 国产日韩欧美综合在线| 野外做受又硬又粗又大视频√| 四虎4545www精品视频| 日韩欧美国产高清| 极品蜜桃臀肥臀-x88av| 99在线热播精品免费99热| 国产日韩专区在线| 日本一区高清| 一区二区三区美女| 中文字幕亚洲乱码| 小说区图片区色综合区| 欧美激情视频播放| 一炮成瘾1v1高h| 久久精品夜色噜噜亚洲aⅴ| 无码熟妇人妻av在线电影| 国产69精品久久久久9999人| 日韩精品高清在线| 久草网视频在线观看| 看电视剧不卡顿的网站| 欧美日韩国产不卡在线看| heyzo高清在线| 欧美一区欧美二区| 色www亚洲国产阿娇yao| 久久久久久9| 精品一区久久久| 国产白丝在线观看| 91精品国产综合久久香蕉麻豆| 亚洲最大成人综合网| 国产精品色网| 国产一区二区三区无遮挡| 亚洲七七久久综合桃花剧情介绍| 欧美日韩激情在线| 五月天精品在线| 天堂蜜桃一区二区三区| 欧美连裤袜在线视频| 涩涩网在线视频| 亚洲高清av在线| 国产污视频在线看| aa级大片欧美| 国产原创中文在线观看| 一区二区在线免费播放| 欧美精品性视频| 99热这里只有精品5| 亚洲少妇30p| 午夜精品免费看| 天堂美国久久| 中文字幕欧美日韩精品| 成人精品视频99在线观看免费| 国产精品久久婷婷| 国产精品国产三级国产普通话蜜臀 | 色综合久久一区二区三区| 国产aⅴ夜夜欢一区二区三区| 天天色综合久久| 欧美性xxxxx| xxxx日本免费| 日韩avvvv在线播放| 视频一区二区精品| 日韩电影免费观看高清完整版在线观看| 这里精品视频免费| 91国内精品视频| 一区二区三区在线免费| 天天躁日日躁狠狠躁免费麻豆| 在线 亚洲欧美在线综合一区| 国产日韩精品久久| 免费日韩电影| 色噜噜久久综合伊人一本| 国产探花精品一区二区| 亚洲一区二区三区小说| 成人无码www在线看免费| 日韩高清在线一区| 国产女主播av| 欧美大胆a级| 国产精品吹潮在线观看| 蜜桃视频网站在线| 精品久久五月天| 特级做a爱片免费69| 中文字幕精品一区| 国产一级片中文字幕| 亚洲精品裸体| 一级做a爰片久久| gogo人体一区| 国产精品久久999| 中文字幕中文字幕在线中高清免费版 | 欧美黄色性视频| 日韩精品123| 欧美一级理论片| 亚洲成熟少妇视频在线观看| 日韩美女精品在线| 久久久久国产精品区片区无码| 日本不卡一区二区三区| 久久99久久99精品| 色婷婷综合网| 久久99导航| 精品入口麻豆88视频| 国产不卡一区二区在线播放| 在线观看男女av免费网址| 亚洲欧美中文日韩在线| 国产男男gay体育生网站| 欧美视频中文在线看| 一区二区视频免费看| 久久精品一区蜜桃臀影院| 在线成人精品视频| 另类小说一区二区三区| 北条麻妃在线视频观看| 在线观看免费一区二区| 日韩尤物视频| 日韩在线影视| 国产伦精品一区二区三区视频孕妇| 巨大黑人极品videos精品| 91精品国产自产91精品| 在线免费观看a视频| 在线观看精品国产视频| 亚洲区小说区图片区| 日韩免费在线观看| 国产又粗又猛视频| 欧美亚洲国产一区二区三区va| 国产女同在线观看| 一区二区三区四区不卡在线| 成人黄色短视频| 久久九九久久九九| 精品人妻无码一区二区三区 | 夜夜嗨网站十八久久| 男插女免费视频| 色综合狠狠操| 亚洲乱码国产乱码精品天美传媒| 外国成人在线视频| 黑人巨大精品欧美一区二区小视频| 国产精品久久免费视频| 国产精品视频1区| 亚洲成人一区在线观看| 2018中文字幕一区二区三区| 秋霞在线午夜| 欧美精品在线免费| av在线导航| 久久成年人免费电影| 免费在线看黄色| 日韩亚洲在线观看| 日本免费中文字幕在线| 中文字幕国内精品| 成年在线电影| 色狠狠久久aa北条麻妃| 精品国产99久久久久久| 久久精品人人做人人爽| 免费大片黄在线观看视频网站| 中文字幕日韩在线播放| 日韩美女网站| 久久综合电影一区| 欧美野外wwwxxx| 久久久天堂国产精品女人| segui88久久综合9999| 国内精品视频一区| 偷拍自拍在线看| 国产97在线播放| 亚洲十八**毛片| 中文字幕在线亚洲| www.99re7.com| 欧美午夜网站| 青青在线视频一区二区三区| 亚洲十八**毛片| 亚洲激情在线观看| 久久精品国产综合精品| 少妇高潮惨叫久久久久| 日韩电影免费观看| 91影院在线免费观看| 亚洲色图美腿丝袜| 精品91免费| 亚洲第九十七页| 婷婷开心激情网| 日韩精品诱惑一区?区三区| 亚洲乱码国产乱码精品精可以看| 91爱视频在线| jizz欧美性20| 日韩欧美在线番号| 国产精品国产一区| 综合中文字幕亚洲| 午夜精品一区二区三区av| 国产va亚洲va在线va| 国产午夜免费视频| 午夜激情在线| 日韩综合小视频| 在线播放中文字幕一区| youjizz.com亚洲| 色偷偷综合网| www污在线观看| 久久婷婷激情| 永久看看免费大片| 久久精品一区二区三区四区| 中文字幕在线有码| 色婷婷av一区| 亚洲黄色小说网址| 在线精品国产欧美| 国产污视频在线播放| 国产伊人精品在线| 亚洲精品合集| 国内精品国产三级国产99| 首页国产欧美久久| 超碰caoprom| 中文字幕亚洲欧美在线不卡| 自拍偷拍欧美亚洲| 制服丝袜亚洲色图| 黄色av网站在线看| 国内精品视频在线| 蜜桃在线一区| 亚洲伊人婷婷| 先锋影音久久久| 久久久久国产免费| 亚洲欧洲精品一区二区精品久久久| 三级黄色在线视频| 欧美大肚乱孕交hd孕妇| 欧美私人网站| 日韩免费在线播放| 欧美人妖在线观看| 欧美做暖暖视频| 精品一区二区三区在线观看| 在线 丝袜 欧美 日韩 制服| 一区二区三区蜜桃| 99热这里只有精品9| 色综合伊人色综合网| 国产高清不卡| 美女主播视频一区| 亚洲免费精品| 亚洲妇女无套内射精| 中文字幕在线视频一区| 丰满人妻一区二区三区四区| 亚洲国产日韩精品在线| 深夜国产在线播放| 91精品在线国产| 99久久99视频只有精品| 午夜激情av在线| 国产午夜久久久久| 亚洲大尺度在线观看| 亚洲美女精品成人在线视频| segui88久久综合9999| 成人9ⅰ免费影视网站| 欧美在线高清| 中文字幕在线视频一区二区| 亚洲品质自拍视频| av免费观看网址| 欧美大胆在线视频| 日韩一级淫片| 91精品国产毛片武则天| 国产精品69久久久久水密桃| 妺妺窝人体色www婷婷| 日韩欧美亚洲另类制服综合在线| 182tv在线播放| 国产精品.com| 99精品国产在热久久| 中文字幕在线免费看线人| 欧美日韩黄色大片| 欧洲毛片在线| 国产精品久久久久久中文字| 成人同人动漫免费观看| 午夜国产一区二区三区| 亚洲人成人一区二区在线观看| 国产特黄一级片| 国产+成+人+亚洲欧洲| 首页亚洲中字| 天美星空大象mv在线观看视频| 国产精品久久福利| 亚洲成人一二三区| 88国产精品欧美一区二区三区| 欧美人妖在线| 91丨九色丨蝌蚪| 亚洲一区二区三区自拍| 免费在线黄色网址| 91精品久久久久久久久久另类| 国产精品久久久久久久| www男人天堂| 91福利在线播放| 搞黄网站在线观看| 国产综合精品一区二区三区| 日韩福利视频网| 青青操国产视频| 亚洲欧美中文日韩v在线观看| 久久天堂影院| 欧美日韩成人免费视频| 中文字幕免费不卡| 高潮毛片7777777毛片| 日韩免费在线免费观看| 欧美成人自拍| 国产精品麻豆入口| 欧美日韩成人综合在线一区二区 | 只有精品亚洲| 超碰成人免费在线| 国产精品色一区二区三区| 亚洲国产视频一区二区三区| 欧美在线中文字幕| 欧美 日韩 国产 一区| 极品白嫩丰满美女无套| 欧美裸体一区二区三区| 成人免费看黄| 国产制服91一区二区三区制服| 国产亚洲欧洲997久久综合| 精品国产亚洲一区二区麻豆|