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

通俗易懂的MySQL事務及MVCC原理

數據庫 MySQL
事務指的是一組命令操作,在執行的過程中,要么全部成功,要么全部失敗。由引擎層支持事務,MyISAM就不支持事務,而InnoDB是支持事務的。

[[433197]]

一、事務簡介與四大特性

事務指的是一組命令操作,在執行的過程中,要么全部成功,要么全部失敗。

由引擎層支持事務,MyISAM就不支持事務,而InnoDB是支持事務的。

事務具有以下四大特性(ACID):

  • 原子性(Atomicity):指事務不可分割,要么全部成功,要么全部失敗,不可能存在部分成功或部分失敗的情況。如果執行某一條語句失敗后,將會觸發之前所有執行過的語句的回滾,因此靠的是undo log。
  • 一致性(Consistency):在事務執行前后,數據的完整性沒有遭到破壞。一致性是mysql追求的最終目標,需要數據庫層面與應用層面同時來維護。需要先滿足原子性、隔離性與持久性,同時也需要應用層面做保障,即在應用層面對數據進行檢驗。
  • 隔離性(Isolation):事務之前是隔離的,并發執行的事務之間不存在互相影響,mysql通過鎖以及MVCC來保證隔離性。
  • 持久性(Durability):事務一旦提交,那么對數據的操作就是永久性的,即使接下來數據庫宕機也不會有影響。mysql是通過redo log來實現宕機恢復的,而binlog主要是用來誤刪恢復與主從復制的。

簡單羅列了一下4種特性以及對應的實現方式,有關ACID詳細的實現原理,會另開篇幅!

二、臟讀、不可重復讀與幻讀

當事務存在并發時,就會產生以下問題。

臟讀

即讀取到別的事務未提交的數據。

A事務讀取B事務尚未提交的數據,此時如果B事務發生錯誤并執行回滾操作,那么A事務讀取到的數據就是臟數據。

就好像原本的數據比較干凈、純粹,此時由于B事務更改了它,這個數據變得不再純粹。

這個時候A事務立即讀取了這個臟數據,但事務B良心發現,又用回滾把數據恢復成原來干凈、純粹的樣子,而事務A卻什么都不知道,最終結果就是事務A讀取了此次的臟數據,稱為臟讀。

這種情況常發生于轉賬與取款操作中

不可重復讀

即某個事務前后多次讀取,數據內容不一致。

事務A在執行讀取操作,由整個事務A比較大,前后讀取同一條數據需要經歷很長的時間 。

而在事務A第一次讀取數據,比如此時讀取了小明的年齡為20歲,事務B執行更改操作,將小明的年齡更改為30歲,此時事務A第二次讀取到小明的年齡時,發現其年齡是30歲,和之前的數據不一樣了,也就是數據不重復了,系統不可以讀取到重復的數據,成為不可重復讀。

幻讀

即某個事務前后多次讀取,讀到的數據總量不一致。

事務A在執行讀取操作,需要兩次統計數據的總量,前一次查詢數據總量后,此時事務B執行了新增數據的操作并提交后,這個時候事務A讀取的數據總量和之前統計的不一樣,就像產生了幻覺一樣,平白無故的多了幾條數據,稱為幻讀。

三、事務隔離級別

事務隔離級別,就是在不同程度上解決以上的問題。

有四種隔離級別,分別是

  • 讀未提交(Read Uncommitted)
  • 讀已提交(Read Committed)
  • 可重復讀(Repeatable Read)
  • 串行化(Serializable)

讀未提交

在這種隔離級別下,所有事務能夠讀取其他事務未提交的數據。

讀取其他事務未提交的數據,會造成臟讀。因此在該種隔離級別下,不能解決臟讀、不可重復讀和幻讀。

讀未提交可能會產生臟讀的現象,那么怎么解決臟讀呢?那就是使用讀已提交。

讀已提交

在這種隔離級別下,所有事務只能讀取其他事務已經提交的內容。

能夠徹底解決臟讀的現象。但在這種隔離級別下,會出現一個事務的前后多次的查詢中卻返回了不同內容的數據的現象,也就是出現了不可重復讀。

這是大多數數據庫系統默認的隔離級別,例如Oracle和SQL Server,但mysql不是。

已提交可能會產生不可重復讀的現象,我們可以使用可重復讀。

可重復讀

在這種隔離級別下,所有事務前后多次的讀取到的數據內容是不變的。

也就是某個事務在執行的過程中,不允許其他事務進行update操作,但允許其他事務進行add操作,造成某個事務前后多次讀取到的數據總量不一致的現象,從而產生幻讀。

這才是mysql的默認事務隔離級別

可重復讀依然會產生幻讀的現象,此時我們可以使用串行化來解決。

串行化

在這種隔離級別下,所有的事務順序執行,所以他們之間不存在沖突,從而能有效地解決臟讀、不可重復讀和幻讀的現象。

但是安全和效率不能兼得,串行化會大大降低數據庫的性能,一般不使用這種級別。

下面用一張表格來表示他們能夠解決的問題,x代表未解決,√代表能夠解決。

 

當然,以上所說的隔離級別及當前級別存在的問題只是一種規范,不同的數據庫廠商可以有不同的實現。

例如在mysql的可重復讀的級別上,使用臨鍵鎖的方式就已經解決了幻讀的問題。

四、MVCC

mysql為了實現以上隔離級別,提出了LBCC(Lock-Based Concurrent Control,基于鎖的并發控制)與MVCC(Multi-Version Concurrent Control,基于多版本的并發控制)。

在LBCC中,讀寫沖突,會使用諸如記錄鎖、間隙鎖與臨鍵鎖等鎖來實現數據的并發安全,因此讀寫性能不高。關于鎖的分類,可以參考我的另外一篇文章談談鎖的類型

在MVCC中,讀寫不沖突,記錄每一行的多個版本,來避免在多個事務之間的競爭。以空間換時間的思路,極大地提高了讀寫性能。

[[433198]]

MVCC主要靠undo log版本鏈與ReadView來實現。

先對undo log有一個基本的認識

Undo log

undo log主要用于事務回滾時恢復原來的數據

mysql在執行sql語句時,會將一條邏輯相反的日志保存到undo log中。因此,undo log中記錄的也是邏輯日志。

當sql語句為insert時,會在undo log中記錄本次插入的主鍵id。等事務回滾時,delete此id即可。

當sql語句為update時,會在undo log中記錄修改前的數據。等事務回滾時,再執行一次update,得到原來的數據。

當sql語句為delete時,會在undo log中記錄刪除前的數據。等事務回滾時,insert原來的數據即可。

數據庫事務四大特性中的原子性,即事務具有不可分割性,要么全部成功,要么全部失敗,其底層就靠undo log實現。在某一步執行失敗時,會對之前事務的語句進行回滾。

對數據庫中的日志完全不熟悉的話,可以看我的另外一篇文章數據庫日志——binlog、redo log、undo log掃盲

行的隱藏列

在數據庫中的每一行上,除了存放真實的數據以外,還存在著3個隱藏列——row_id、trx_id與roll_pointer。

row_id,行號

如果當前表有整數類型的主鍵,則row_id就是主鍵的值。

如果沒有整數類型的主鍵,則mysql會按照字段順序選擇一個非空的整數類型的唯一索引作為row_id。

如果mysql沒有找到,則會自動生成一個自動增長的整數作為row_id。

那row_id和今天的MVCC有什么關系呢?

不能說一點沒有吧,只能說毫無關系。

trx_id,事務號

當一個事務開始執前,mysql會為這個事務分配一個全局自增的事務id。

之后該事務對當前行進行的增、刪、改操作時,都會將自己的事務id記錄到trx_id中。

roll_pointer,回滾指針

事務對當前行進行改動時,會將舊數據寫入進undo log中,再將新數據寫入當前行,且當前行的roll_pointer指向剛才那個undo log,因此可以通過roll_pointer找到該行的前一個版本。

當一直有事務對該行改動時,就會一直生成undo log,最終將會形成undo log版本鏈。

Undo log版本鏈

一開始,我們使用以下語句創建一個stduent表

  1. CREATE TABLE `student` ( 
  2.     `id` INT ( 11 ) NOT NULL AUTO_INCREMENT, 
  3.     `nameVARCHAR ( 255 ) NOT NULL
  4.     `age` INT ( 11 ) NOT NULL
  5.   PRIMARY KEY ( `id` ) USING BTREE  
  6. ) ENGINE = INNODB; 

現在開啟第1個事務,事務id為1,執行以下插入語句。

  1. INSERT INTO student VALUES ( 1, "a", 24 ); 

那么當前行的一個示意圖如下:

因為該數據是新插入的,因此它的roll_pointer指向的undo log為空。

接著開啟第2個事務,分配的事務id是2,執行以下修改命令。

  1. UPDATE student SET NAME = 'b' WHERE id = 1; 

現在的示意圖變為:

當開啟第3個事務,分配到事務id是3,執行以下修改命令。

  1. UPDATE student SET age = 25 WHERE id = 1; 

示意圖變為:

每一個事務對該行改動時,都會生成一個undo log,用于保存之前的版本,之后再將新版本的roll_pointer指向剛才生成的undo log。

因此roll_pointer可以將這些不同版本的undo log串聯起來,形成undo log版本鏈。

ReadView

首先需要理解一下快照讀與當前讀

快照讀:簡單的select查詢,即不包括 select ... lock in share mode, select ... for update,可能會讀到數據的歷史版本。

當前讀:以下語句都是當前讀,總是讀取最新版本,會對讀取的最新版本加鎖。

  • select ... lock in share mode
  • select ... for update
  • insert
  • update
  • delete

在事務執行每一個快照讀或事務初次執行快照讀時,會生成一致性視圖,即ReadView。

ReadView的作用是,判斷undo log版本鏈中的哪些數據對當前事務可見。

ReadView包含以下幾個重要的參數:

m_ids

在創建ReadView的那一刻,mysql中所有未提交的事務id集合。

min_trx_id

m_ids中的最小值

max_trx_id

mysql即將為下一個事務分配的事務id,并不是m_ids中的最大值。

creator_trx_id

即創建此ReadView的事務id

簡要的示意圖如下:

那么事務在執行快照讀時,可以通過以下的規則來確定undo log版本鏈上的哪個版本數據可見。

如果當前undo log的版本的trx_id

如果當前undo log的版本的trx_id≥max_trx_id,說明該版本對應的事務在生成ReadView之后才開始的,因此是不可見的。

如果當前undo log的版本的trx_id∈[min_trx_id,max_trx_id),如果在這個范圍里,還要判斷trx_id是否在m_ids中:

在m_ids中,說明版本對應的事務未提交,因此是不可見的。

不在m_ids中,說明版本對應的事務已經提交,因此是可見的。

如果當前undo log的版本的trx_id=creator_trxt_id,說明事務正在訪問自己修改的數據,因此是可見的。

當undo log版本鏈表的頭結點數據被判定為不可見時,則利用roll_pointer找到上一個版本,再進行判斷。如果整個鏈表中都沒有找到可見的數據,則代表當前的查詢找不到數據。

[[433201]]

MVCC在四種隔離級別下的區別

在Read Uncommitted級別下,事務總是讀取到最新的數據,因此根本用不到歷史版本,所以MVCC不在該級別下工作。

在Serializable級別下,事務總是順序執行。寫會加寫鎖,讀會加讀鎖,完全用不到MVCC,所以MVCC也不在該級別下工作。

真正和MVCC兼容的隔離級別是Read Committed(RC)與Repeatable Read(RR)

MVCC在RC與RR級別下的區別,在于生成ReadView的頻率不同。

在RC級別下,當前事務總是希望讀取到別的事務已經提交的數據,因此當前事務事務會在執行每一次快照讀的情況下都會去生成ReadView,實時更新m_ids,及時發現那些已經提交的事務。

在RR級別下,當前事務當然也能夠讀取到別的事務已經提交的數據,但為了避免不可重復讀,因此只會在執行第一次快照讀的情況下去生成ReadView,之后的快照讀會一直沿用該ReadView。

舉個栗子:

在RC級別下

一開始,事務id為1的事務往表里插入了一條數據,版本鏈如下:

這個時候,開啟事務id為2的事務,關閉自動提交模式。先執行一次select *查詢,生成的ReadView如下

  1. m_ids={2},min_trx_id=2,max_trx_id=3,creator_trx_id=2 

由于該條數據的trx_id

因此,事務2能直接查到該數據。

現在開啟事務3,事務id為3,將該條數據的name改為b,并自動提交,版本鏈如下:

這個時候,事務2再次select *查詢,由于處于RC級別下,會再次生成ReadView,此時的ReadView如下:

  1. m_ids={2},min_trx_id=2,max_trx_id=4,creator_trx_id=2 

由于最新版本的trx_id∈[2,4)且trx_id不在m_ids中,說明該版本的數據已經提交,因此是可見的,所以事務2能查到最新的數據。

而處于RR級別下:

事務2再次select *查詢時,不會生成ReadView,而是沿用第一次生成的ReadView:

  1. m_ids={2},min_trx_id=2,max_trx_id=3,creator_trx_id=2 

由于最新版本的trx_id≥max_trx_id,說明該版本對應的事務在生成ReadView之后才開始的,因此是不可見的。

所以沿著roll_pointer找到上一個版本,上一個版本的trx_id

所以,事務2只能查詢到舊版本的數據,兩次的查詢一致,避免了不可重復讀。

 

責任編輯:姜華 來源: 今日頭條
相關推薦

2011-10-26 19:57:33

2019-06-19 08:30:47

網絡協議IPTCP

2009-12-31 10:59:22

ADSL技術原理

2021-05-26 16:12:20

區塊鏈加密貨幣比特幣

2022-06-28 07:31:11

哨兵模式redis

2020-06-08 10:50:58

前端TypeScript代碼

2023-01-06 09:40:20

項目性能

2022-09-23 08:32:53

微服務架構服務

2022-07-06 08:17:50

C 語言函數選型

2018-01-17 22:36:46

區塊鏈數字貨幣比特幣

2019-05-20 07:37:00

TCPIP網絡協議

2021-05-13 13:20:00

Git命令Linux

2018-03-05 08:35:12

物聯網互聯網網絡技術

2021-05-30 19:02:59

變量對象上下文

2018-03-11 15:11:38

物聯網數據物聯網數據

2021-05-25 09:50:01

GitLinux命令

2018-03-29 06:40:26

物聯網

2018-03-11 14:57:07

物聯網組網無線通信

2018-12-03 09:19:28

移動網絡NAT

2019-08-27 09:20:35

微服務架構組件
點贊
收藏

51CTO技術棧公眾號

91免费版黄色| 国产精品久久久久久久久免费相片 | 日韩精品一区二区三区中文| 亚洲欧美成aⅴ人在线观看| 96精品久久久久中文字幕| 69av视频在线| 亚洲成人a级片| 亚洲免费观看高清完整版在线 | 性网爆门事件集合av| 欧美性久久久| 亚洲精品国产福利| 丁香婷婷激情网| 国产黄a三级三级三级av在线看| 国产综合久久久久久久久久久久| 欧美激情精品久久久久久久变态| 7788色淫网站小说| 99热播精品免费| 亚洲精品免费一二三区| 久久久久久久免费| 97超视频在线观看| 日韩视频一区| 色婷婷久久av| 久久人人爽人人爽人人片 | 国内精品久久久久久久影视麻豆| 日韩精品视频观看| 色天使在线观看| 绿色成人影院| 成人欧美一区二区三区| 国产精品久久久久久久久久久久冷| 依依成人综合网| 亚洲综合中文| 亚洲人成欧美中文字幕| 久久艹这里只有精品| 日本在线观看大片免费视频| 久久夜色精品一区| 国产成人免费观看| 国产一区二区三区视频免费观看| 亚洲黄色免费| 美日韩精品视频免费看| 一本色道综合久久欧美日韩精品 | 国产在线拍偷自揄拍精品| 国产精品18p| 久久久久免费av| 亚洲人成五月天| 亚洲の无码国产の无码步美| 四虎视频在线精品免费网址| 午夜日韩在线观看| 妞干网这里只有精品| 国产二区在线播放| 2024国产精品| 国产在线一区二区三区四区 | 国产福利电影在线播放| 亚洲色图欧美激情| 亚洲精品久久久久久一区二区| 免费观看黄色av| 国产乱码精品一区二区三区忘忧草 | 97netav| 97人妻精品一区二区三区软件| 久久久久国产精品一区二区 | 精品国产电影| 高清毛片aaaaaaaaa片| 国产精品1024久久| 亚洲在线免费视频| av网站在线免费看| 狠狠色丁香婷综合久久| 欧美一区二三区| www..com国产| 一本久道久久综合狠狠爱| 久久人91精品久久久久久不卡| 日韩成人短视频| 精品国产一区探花在线观看 | 黄色亚洲大片免费在线观看| 欧美猛交ⅹxxx乱大交视频| 欧美一区二区三区粗大| 成人国产精品一级毛片视频| 国产香蕉97碰碰久久人人| 国产精品无码一区二区三区| 婷婷成人影院| 亚洲精品自拍第一页| 黄色录像a级片| 日韩黄色网络| 亚洲一级黄色片| 亚洲精品国产精品国自产网站| 国产99久久| 亚洲一区二区久久久| 蜜桃av免费观看| 四季av一区二区三区免费观看| 精品国产视频在线| 国模无码国产精品视频| 亚洲国产影院| 日本一本a高清免费不卡| 成人毛片在线播放| 人人精品人人爱| 91精品视频专区| 亚洲精品成av人片天堂无码| 99精品欧美一区二区三区综合在线| 国产在线一区二区三区播放| 国产尤物视频在线| 亚洲欧洲在线观看av| 中文字幕の友人北条麻妃| 少妇视频在线| 欧美性猛交xxxx乱大交蜜桃 | 九九精品视频在线看| 96国产粉嫩美女| 天堂在线资源8| 欧美国产综合一区二区| 中文字幕中文字幕在线中心一区| 日本韩国在线视频爽| 一区二区三区中文在线| 黄在线观看网站| 四虎在线精品| 亚洲精品美女网站| 美国精品一区二区| 亚洲国产三级| 成人免费视频网| 日本黄色大片视频| 中文字幕中文字幕中文字幕亚洲无线| av动漫在线免费观看| 久草在线资源站资源站| 在线观看国产一区二区| 免费看91视频| 欧美色女视频| 久久国产精品久久国产精品| 欧美videossex极品| 国产精品一区二区在线观看网站| 久久99久久精品国产| 麻豆网站在线观看| 欧美日韩在线视频一区二区| 亚洲天堂网站在线| 神马电影久久| 欧美第一黄色网| 在线观看免费中文字幕| 久久综合久久综合九色| 日韩一级特黄毛片| 国产原创一区| 精品在线小视频| 国产一级生活片| 日本中文一区二区三区| 国内一区二区三区在线视频| 成a人片在线观看| 欧美专区日韩专区| 亚洲午夜久久久久久久久红桃| 91成人观看| 国产精品一区二区久久久久| 亚洲国产成人精品一区二区三区| 国产精品久久久久久亚洲毛片| 精品中文字幕av| 国产伦理久久久久久妇女 | 欧美日韩激情在线| 人人爽人人爽人人片| 免费在线观看成人av| 国产麻豆日韩| 丁香花视频在线观看| 欧美一区二区成人6969| www深夜成人a√在线| 美日韩一区二区三区| 日本欧美精品久久久| 交100部在线观看| 亚洲国产精品成人av| 精品少妇久久久久久888优播| 国产一区二区三区在线观看免费| 亚洲欧洲一二三| 成人国产一区二区三区精品麻豆| 亚洲美女av电影| 久草手机在线视频| 久久日韩粉嫩一区二区三区| 精品国产av无码一区二区三区| 日韩国产在线不卡视频| 欧美巨猛xxxx猛交黑人97人| 91丨九色丨丰满| 中文字幕字幕中文在线中不卡视频| 国产一伦一伦一伦| 久久要要av| 91精品视频在线看| 成人高潮aa毛片免费| 精品日韩在线一区| 国产精品免费av一区二区| 国产成人一级电影| 日本熟妇人妻xxxx| 亚洲成a人片77777在线播放| 欧美一级淫片videoshd| 粉嫩一区二区三区国产精品| 欧美色视频一区| 国产成人在线网址| 国内外成人在线视频| 69精品丰满人妻无码视频a片| 一区二区三区四区精品视频 | 欧美日韩偷拍视频| 成人app下载| 免费毛片小视频| 国产精品一区高清| 国产一区二中文字幕在线看| 在线观看h网| 亚洲精品乱码久久久久久金桔影视| 国产精品人人人人| 国产精品乱码人人做人人爱| 杨幂一区二区国产精品| 亚洲国产二区| 日韩不卡av| 高清在线一区二区| 97精品视频在线| yw视频在线观看| 欧美精三区欧美精三区| 国产无遮挡又黄又爽| k8久久久一区二区三区| www.超碰com| 午夜久久美女| 久久国产精品一区二区三区| 精品123区| 欧美精品久久久久久久久久| 国产午夜精品一区理论片| 欧美一区二区久久| 中文字幕激情小说| 亚洲黄色录像片| 色吧亚洲视频| 丝袜诱惑一区二区| 中文字幕无线精品亚洲乱码一区| 国产伦理吴梦梦伦理| 亚洲成人tv网| 少妇太紧太爽又黄又硬又爽小说 | 不卡在线视频中文字幕| 簧片在线免费看| 在线精品一区二区| 亚洲欧洲久久| 欧美绝顶高潮抽搐喷水合集| 国产欧美韩国高清| 国产无遮挡又黄又爽在线观看| 国产成人精品一区二区在线小狼| 亚洲免费精品| 大桥未久一区二区三区| 精品久久不卡| 久久久影院一区二区三区| aaa国产精品| 91免费看国产| 国产麻豆一区| 日本精品免费观看| 日韩av一卡| 久久免费视频在线观看| 蜜桃传媒在线观看免费进入 | 久久国产电影| 日本成人三级电影网站| 亚洲丝袜美腿一区| 欧美成人一区二区在线| 蜜乳av综合| 欧美国产综合视频| 亚洲传媒在线| 欧美一区二区三区精美影视 | 成人在线观看免费播放| 国产精品国产自产拍高清av水多| 日韩电影免费观| 国产97在线亚洲| 国产 日韩 欧美一区| 国产精品igao视频| 成人天堂yy6080亚洲高清 | 日韩免费成人| wwwxx欧美| 欧美天堂影院| 欧洲高清一区二区| re久久精品视频| 中文字幕日韩一区二区三区| 中文字幕一区二区三区欧美日韩 | 免费毛片在线看片免费丝瓜视频| 欧美激情综合色综合啪啪五月| 国精一区二区三区| 69久久夜色精品国产69乱青草| 性欧美xxx69hd高清| 日本91av在线播放| 男女啪啪999亚洲精品| 3d精品h动漫啪啪一区二区| 9l亚洲国产成人精品一区二三 | 国产成一区二区| 91在线成人| 91久久精品视频| 成人动漫视频| 日本一区二区不卡高清更新| 日韩欧美视频| 国产一区二区三区小说| 亚洲影院在线| 亚洲免费黄色网| 成人爽a毛片一区二区免费| 国产毛片毛片毛片毛片毛片毛片| 国产午夜精品一区二区| 强制高潮抽搐sm调教高h| 亚洲高清三级视频| 成人午夜精品视频| 欧美一区二区三区四区在线观看 | 国产嫩草影院久久久久| 无码人妻精品中文字幕 | 无码人妻精品一区二区50| 精品视频在线视频| 欧美一级淫片免费视频魅影视频| 亚洲欧美国产精品| 最新国产露脸在线观看| 91精品国产沙发| 亚洲日日夜夜| 免费看成人av| 欧美国产专区| 99视频在线视频| 成人激情小说乱人伦| 国产馆在线观看| 婷婷丁香久久五月婷婷| 亚洲一区二区激情| 亚洲精品国产精品久久清纯直播| 欧美一级二级三级区| 97视频在线免费观看| 亚洲我射av| 欧美性天天影院| 亚洲调教视频在线观看| 性生活免费在线观看| 91丨九色丨黑人外教| 欧美日韩在线观看成人| 欧美专区日韩专区| 日本天堂在线| 久久久亚洲天堂| 国产一区二区三区免费观看在线| 欧美一区二区视频在线| 伊人久久亚洲美女图片| 在线看免费毛片| 久久精品人人做人人综合 | 久操视频在线免费播放| 欧美在线观看网站| 97精品久久| 男女激烈动态图| 日本不卡的三区四区五区| 国产精品边吃奶边做爽| 一区二区三区日本| 国产精品久久久久久久免费 | 日本成人免费在线观看| 色综合久久综合网欧美综合网| 成人免费视频国产免费麻豆| 久久精品在线播放| 国产精品亚洲成在人线| 欧美重口乱码一区二区| 久久久一二三| 久久亚洲AV成人无码国产野外| 亚洲福利视频一区二区| www.狠狠干| 欧美人与物videos| 91精品国产乱码久久久竹菊| 2021国产视频| 国产福利精品一区二区| 国产大学生自拍| 91精品国产乱| 神马午夜伦理不卡| 国产精品大全| 雨宫琴音一区二区在线| 国产大学生视频| 亚洲.国产.中文慕字在线| 日日夜夜精品免费| 国内精品久久久久影院优| 久久久久影视| 日韩人妻精品无码一区二区三区| jizz一区二区| 亚洲AV无码成人精品区东京热| 亚洲精品久久久久久久久久久久久 | heyzo久久| 色呦色呦色精品| 亚洲精品乱码久久久久| 亚洲av无码国产精品久久不卡| 欧美日韩国产成人在线| 久久91在线| 97成人在线观看视频| 中文字幕乱码久久午夜不卡| 亚洲天堂网在线观看视频| 久久国产一区二区三区| 亚洲一二三区视频| 青青草成人免费在线视频| 久久影院视频免费| 中文字幕av网站| 久久伊人精品一区二区三区| 97久久综合区小说区图片区| 欧美一级免费播放| 久久美女艺术照精彩视频福利播放 | 9.1成人看片免费版| 在线精品视频免费观看| 欧美被日视频| 国产精品久久久久久久小唯西川 | 无码国产精品一区二区高潮| 亚洲五码中文字幕| 飘雪影院手机免费高清版在线观看| 国产精品扒开腿做爽爽爽男男 | 九九热在线精品视频| 日韩a级大片| www.se五月| 天天色图综合网| 日韩毛片久久久| 国内视频一区二区| 国产原创一区二区三区| 性无码专区无码| 欧美男插女视频| 激情五月综合| 99久久久无码国产精品性波多| 91精品1区2区| 黄色成人在线网| 亚洲精品欧美精品| 成人av片在线观看| 国产精品无码一区二区桃花视频| 2024亚洲男人天堂| 这里只有精品在线| 久久久久久久久久久久|