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

來聊聊 MySQL 事務隔離與 MVCC 的關系

數(shù)據(jù)庫 MySQL
在這篇文章中,我們將一同踏上這場解析 MySQL MVCC 和事務隔離級別的精彩之旅,逐步揭開它們神秘的面紗,探尋其背后蘊含的深刻原理和實際應用價值。

在當今的數(shù)據(jù)庫世界中,MySQL 以其強大的功能和廣泛的應用備受矚目。而其中的 MVCC(多版本并發(fā)控制)和事務隔離級別更是關鍵且核心的概念,它們猶如數(shù)據(jù)庫運行的精密齒輪,協(xié)同作用確保著數(shù)據(jù)的完整性、一致性和高效的并發(fā)處理。

當我們深入探究 MySQL 的內(nèi)部機制時,MVCC 展現(xiàn)出其獨特的魅力,它巧妙地解決了并發(fā)操作中可能產(chǎn)生的諸多問題。與此同時,事務隔離級別則為不同場景下的數(shù)據(jù)處理提供了靈活而精準的規(guī)則框架。理解這兩者,不僅是對 MySQL 技術精髓的把握,更是開啟高效數(shù)據(jù)庫應用和系統(tǒng)開發(fā)的關鍵鑰匙。在接下來的篇章中,我們將一同踏上這場解析 MySQL MVCC 和事務隔離級別的精彩之旅,逐步揭開它們神秘的面紗,探尋其背后蘊含的深刻原理和實際應用價值。

一、詳解事務的基本概念

1.. 什么是事務

現(xiàn)在我們開發(fā)的一個功能需要進行操作多張表,假如我們遇到以下幾種情況:

  • 某個邏輯報錯
  • 數(shù)據(jù)庫連接中斷
  • 某臺服務器突然宕機
  • .......

這時候我們數(shù)據(jù)庫執(zhí)行的操作可能才到一半,所以為了避免這種一半一半的情況,我們就需要事務來保證數(shù)據(jù)一致性。 所以事務就是當作一個原子的邏輯組操作,要么全都成功執(zhí)行,要么全部都失敗。事務有分分布式事務和數(shù)據(jù)庫事務,如果沒有特指,我們平時所說的事務都是數(shù)據(jù)庫事務,也就是本文探討的話題。

2. 事務的四大特性

(1) 原子性(Atomicity)

原子可以看作事務的最小單位,而原子性(Atomicity)的概念即要求一組復合操作要構成一個原子,不可在進行分割了,要么都執(zhí)行成功,要么都不執(zhí)行直接回滾。

(2) 隔離性(Isolation)

隔離性(Isolation)要求在并發(fā)場景下,每個事務之間的操作互不干擾,即我們事務的操作,不會影響到其它是事務的操作結果。

(3) 持久性(Durability)

持久性(Durability):存儲到數(shù)據(jù)庫中的數(shù)據(jù)永不丟失,及時數(shù)據(jù)庫發(fā)生故障,當然機器被破壞了那就另說了。

(4) 一致性(Consistency)

一致性是一個比較特殊的概念,和AID不同的是,它并非數(shù)據(jù)庫的特性,按照權威的說法:

ensuring the consistency is the responsibility of user, not DBMS.", "DBMS assumes that consistency holds for each transaction

即一致性要求,從一個正確的狀態(tài)轉換為另一個正確的狀態(tài),它并不是DBMS負責的范疇,而是通過DB的AID特定來做到這個C。

我們以轉賬業(yè)務為例說明一下轉賬操作在系統(tǒng)中的過程:

  • 轉賬方余額扣除轉賬的金額。
  • 收款方加上轉賬的金額。

假設我們手里又90元,希望通過系統(tǒng)轉賬100到另一個賬戶上,如果這個操作成功,那么我們的賬戶就會變?yōu)?10元,而另一個賬戶多了100元。

很明顯這種操作并不符合上述所說的從一個正確的狀態(tài)轉為另一個正確的狀態(tài),我們必須做到在業(yè)務發(fā)現(xiàn)轉賬方余額小于轉賬額度時,將所有事務中的操作回滾,避免出現(xiàn)上述那種賬戶余額負數(shù)的非正確狀態(tài)的情況。

這也就是我們上文所說的,通過MySQL的AID來保證C,C是目的,AID是手段,由此保證應用層面業(yè)務能夠從正確的狀態(tài)轉為另一個正確的狀態(tài),以保證業(yè)務的約束,從而做到一致性。

3. 并發(fā)事務帶來那些問題

這里筆者先說一個概念,具體會在后文示例中詳盡介紹

臟讀:我們舉個例子:

  • 我們開啟一個事務A,準備讀取user表的數(shù)據(jù)。
  • 此時,事務B將事務A要讀取的數(shù)據(jù)修改了,但事務還沒提交.
  • A卻能看到這個未提交的結果即sex為1(而且這個結果后續(xù)還不一定提交)。

這種其他事務還沒提交的結果能被另一個事務看到的情況就屬于臟讀。

幻讀:我們再舉個例子:

  • 事務A查詢user表,此時表中有10條數(shù)據(jù)。
  • 在此期間,事務B插入5條數(shù)據(jù)。
  • 事務A再次查發(fā)現(xiàn)有15條事務。

這種同一次事務兩次查詢結果不一致的情況是幻讀:

不可重復讀,仍然舉一個例子:

  • 事務A讀取id為1的數(shù)據(jù),name為xiaoming。
  • 事務B在此期間更新id為1的數(shù)據(jù)并提交這個事務
  • 結果事務A再次讀取時發(fā)現(xiàn)name變了。 這就是不可重復讀。

你可能會問了,這和幻讀聽起來是一個概念啊,他倆有什么區(qū)別? 幻讀說是針對插入或者刪除操作后導致數(shù)據(jù)前后不一致的情況,而不可重復讀是針對兩次相同查詢操作出現(xiàn)數(shù)據(jù)不一致。也就是說幻讀更多是強調(diào)前后數(shù)據(jù)集的不一致和不可重復讀更多是強調(diào)數(shù)據(jù)行上的前后不一致。

數(shù)據(jù)丟失:這個就很好理解了,高并發(fā)場景下,事務A修改id為1的money+100,事務B修改id為1的money+200,他們統(tǒng)一時間讀取,先后寫入,這就導致如果事務A后寫入,那么money最后只加了100,如果事務B后寫入,那么money就少了100。

二、詳解事務的隔離級別

1. 讀未提交(READ UNCOMMITTED)

在這個級別下,任何事務的修改操作即使沒有提交,其他事務也能看到,造成我們上述所說的臟讀,對此我們不妨用下面這段SQL來驗證一下:

首先我們先建個測試表:

create table test2 (id int,name varchar(10),money int); 
insert into test2 values(1,'xiaoming',100);
insert into test2 values(2,'xiaowang',100);

事務A開啟事務,進行test2  的更新操作,不提交:

start transaction;
-- 小明+100元
update test2   set money = money +100 where name ='xiaoming';
-- 小王減100元
update test2   set money =money -100 where name ='xiaowang';

事務B設置為讀未提交的隔離級別:

SET SESSION TRANSACTION ISOLATION LEVEL READ committed;
select * from test2 t ;

查詢結果是事務B看到了事務A的更新操作,造成臟讀。

對應結果如下:

id|name    |money|
--+--------+-----+
 1|xiaoming|  200|
 2|xiaowang|    0|

同理這個讀未提交,也會造成:

  • 幻讀(同一個事務同一次查詢記錄數(shù)不一樣)
  • 不可重復讀(同一個事務下查詢記錄的值不一樣)

2. 讀已提交(READ COMMITTED)

這個概念也很好理解,每個事務只能看到其他事務提交后的數(shù)據(jù)。避免了臟讀,但是無法避免幻讀和不可重復讀。 我們就以幻讀為例,如下圖,事務B首先查詢到數(shù)據(jù)表中沒有id為1的用戶,在這個查詢結束后,事務A進行一次插入操作但是事務還未提交。

然后事務A將數(shù)據(jù)提交,事務B再次查詢就發(fā)現(xiàn)了數(shù)據(jù),出現(xiàn)幻讀:

了解流程之后,我們拿SQL印證一下,首先創(chuàng)建數(shù)據(jù)表:

drop table if exists account1;


CREATE TABLE `account1` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(50) DEFAULT NULL,
  `balance` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `account1_un` (`name`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=UTF8MB4;

事務B查詢,沒數(shù)據(jù):

SET SESSION TRANSACTION ISOLATION LEVEL READ committed;
START TRANSACTION;

-- 查詢表,此時沒有數(shù)據(jù)
SELECT * from account1;

事務A在此期間插入,事務不提交:

SET SESSION TRANSACTION ISOLATION LEVEL READ committed;
START TRANSACTION;
-- 在上一個事務查詢后,插入一條事務但是不提交
insert into account1(id,name,balance) values(1,'zhangsan',1000);

此時事務B還是沒看到數(shù)據(jù),然后我們將上述的事務A數(shù)據(jù)commit,事務B看到這條數(shù)據(jù)出現(xiàn)幻讀:

3. 可重復讀(REPEATABLE READ)

這個隔離級別,也很好理解,同一個事務內(nèi),多次查詢的數(shù)據(jù)都是一樣的。我們不妨基于上面的例子實驗一下。

首先事務B查詢,沒有任何數(shù)據(jù):

SET SESSION TRANSACTION ISOLATION LEVEL  REPEATABLE READ;
START TRANSACTION;
select * from account1 a  where id=3;

此時xiaoming的數(shù)據(jù)為300:

id|name    |balance|
--+--------+-------+
 3|xiaoming|    100|

事務A執(zhí)行更新并提交:

SET SESSION TRANSACTION ISOLATION LEVEL  REPEATABLE READ;
START TRANSACTION;
update account1 set balance=0 where id=3;
commit;

事務B再查數(shù)據(jù)還是不變,還是300:

id|name    |balance|
--+--------+-------+
 3|xiaoming|    100|

總的來說可重復讀避免了臟讀和不可重復讀,但是幻讀還是無法避免:

4. 串行化(SERIALIZABLE)

事務隔離最高級別,通過鎖的方式控制并發(fā)流程,解決上述一切問題。

三、詳解MVCC(多版本并發(fā)控制)

1. 當前讀和快照讀

快照讀:即讀取數(shù)據(jù)是從快照中獲取的,事務在進行事務讀取時不上鎖,這就是mysql并發(fā)讀寫性能高的原因之一。

而當前讀反之,讀取數(shù)據(jù)時會上鎖,這也就意味著即使你的隔離級別是可重復讀,你用當前讀也能讀取到其他事務的最新結果,造成不可重復讀。

我們舉個例子,首先事務A讀取數(shù)據(jù),假設數(shù)據(jù)值是100:

begin;
-- 讀取到a的money為100
select * from account1 a ;

事務B更新事務并提交:

update account1 set mnotallow=1000 where id=1;

事務A使用快照讀,數(shù)據(jù)還是100:

select * from account1 a ; --快照讀 舊數(shù)據(jù)

一旦使用當前讀,就是其他事務提交的新數(shù)據(jù)了:

--兩個都是當前讀,得到最新結果
select * from account1 a for update; 
select * from account1 a lock in share mode;

2. undo.log概念掃盲

首先說說undo log,在innoDB的聚簇索引中,每一條記錄除了我們表中的數(shù)據(jù)以外,還會額外記錄名為事務id(transaction id)的隱藏列。每當用戶對當前數(shù)據(jù)進行修改操作后,新值的數(shù)據(jù)的事務id就會遞增。 同時每行數(shù)據(jù)還有一個回滾指針(roll_pointer),如下圖所示,每當用戶對索引進行更新之后,舊的數(shù)據(jù)就會被存放到undo log中,新的數(shù)據(jù)的回滾指針指向這條最新的舊數(shù)據(jù)(就是剛剛存到undo log中的數(shù)據(jù),通俗的說是最新的垃圾),用于后續(xù)可能需要的回滾操作:

3. readView概念掃盲

接下來就說說readView,readView就是真正用到undo log的東西,如下圖所示,它由三個部分組成,分別是:

  • 已提交事務:已提交事務中記錄的則是已經(jīng)被提交的事務id集合。
  • 活躍事務:這個則記錄那些還能活動且還沒被提交的事務,其中min_trx_id指向活躍事務的最小值。
  • 未開始事務:這里面則是存放待使用的事務id值,其中max_trx_id就是記錄這一塊的最小值。

4. 基于可重復讀版本理解SQL的MVCC工作機制

了解了undo.log和readView,我們就可以了解mvcc的工作機制了。就先以可重復讀RR為例,我們來了解一下如何結合undo.log和readView實現(xiàn)可重復讀的。

可重復讀這個級別的readView只會在事務剛剛開始時創(chuàng)建,這也就意味著后續(xù)數(shù)據(jù)無論怎么變化,readView都以第一次創(chuàng)建的為主:

假設我們現(xiàn)在account表數(shù)據(jù)存在一條id為1的數(shù)據(jù)xiaoming,然后事務trx_id為100的事務基于RR級別將name先更新為xiaoming_50然后再更新為xiaoming_100,但是事務還沒提交,此時對應的版本鏈如下所示:

需要注意的是,只有進行SQL修改操作即insert、update、delete才會分配一個事務id,所以我們本在進行查詢之前執(zhí)行一些無關緊要的update操作,生成一個事務200開始查詢執(zhí)行下面這條sql查詢,即查詢id為1的數(shù)據(jù):

-- 執(zhí)行一些無關緊要的update
select * from account1 a where id=1;

然后事務啟動創(chuàng)建readView,結合版本鏈記錄來看,活躍但是未提交事務值為100,即min_trx_id為100,而我們的事務為200,這也就意味著max_trx_id為201,由此可得活躍未提交的讀寫事務m_ids列表有100、200之間。

所以事務200生成readView如下,然后順著版本鏈開始獲取數(shù)據(jù)首先看到xiaoming_100事務id為100處于活躍事務列表不符合要求繼續(xù)順著指針往下走,看到xiaoming_50也不符合要求,繼續(xù)順著指針往下走,看到xiaoming事務id值為80小于min_trx_id即已提交的事務中的值,所以我們事務id為200查詢結果就是xiaoming:

此時事務100將更新結果提交,因為可重復讀生成readView永遠是以第一次創(chuàng)建時候為主,這也就意味著查詢的思路還是和上述步驟一樣,查詢結果仍然是trx_id為80的xiaoming,這里就不多做贅述了。

5. 基于讀已提交版本readView理解SQL的MVCC工作機制

讀已提交版本會在每次執(zhí)行查詢時生成一個readView,我們還是以上面的例子進行演示,還是事務100觸發(fā)修改但是還沒提交,對應生成的版本鏈如下:

還是同理,執(zhí)行一些無關緊要的修改操作生成本次的事務id為200然后開始查詢,因為事務100沒有提交,所以活躍的事務列表數(shù)據(jù)為100、200生成readView如下:

所以順著版本鏈查詢到結果也是小于min_trx_id最大值為80,最終查詢結果為xiaoming。

然后事務100將結果提交,此時我們的事務200再次進行查詢,由讀已提交生成readView為每次查詢時可得,事務100已提交所以該事務處于已提交事務范圍,然后我們的事務200還未提交,所以處于活躍事務列表中,所以活躍事務列表只有我們的事務200:

由此順著版本鏈定位到小于min_trx_id的最大值為100,順著版本鏈定位到的第一個trx_id為100的結果是xiaoming_100,所以事務200查詢結果就是xiaoming_100。

四、關于MySQL事務一些常見問題

1. MySQL 的隔離級別是基于鎖實現(xiàn)的嗎

是基于鎖和mvcc共同實現(xiàn)的,SERIALIZABLE 這個隔離級別就是基于鎖實現(xiàn)的,其他隔離級別都是基于mvcc,需要補充的是REPEATABLE-READ 如果使用當前讀也是基于鎖實現(xiàn)。

2. MySQL 的默認隔離級別是什么

以筆者使用的MySQL8來說使用如下命令可以看到默認級別為可重復讀:

select @@transaction_isolation;

對應輸出結果如下:

@@transaction_isolation|
-----------------------+
REPEATABLE-READ        |

五、小結

MySQL 的 MVCC(多版本并發(fā)控制)是其實現(xiàn)高效并發(fā)處理的關鍵機制。

通過 MVCC,在并發(fā)讀寫操作時,讀操作不會阻塞寫操作,寫操作也不會阻塞讀操作,極大地提高了數(shù)據(jù)庫的并發(fā)性和性能。

它允許事務讀取到特定版本的數(shù)據(jù),實現(xiàn)了事務隔離級別的靈活控制。使得不同的事務可以看到符合其隔離級別要求的數(shù)據(jù)視圖。

在 MVCC 中,每行數(shù)據(jù)都有多個版本,記錄了不同事務對其的修改歷史。這種方式有效地避免了鎖競爭帶來的性能開銷和潛在的死鎖問題。

對于理解和優(yōu)化數(shù)據(jù)庫的并發(fā)操作,MVCC 是一個至關重要的概念。深入研究和掌握它,有助于更好地設計和管理數(shù)據(jù)庫系統(tǒng),確保數(shù)據(jù)的一致性和高效性。

責任編輯:趙寧寧 來源: 寫代碼的SharkChili
相關推薦

2025-01-13 13:12:54

2020-10-13 10:32:24

MySQL事務MVCC

2025-06-17 08:35:00

2023-10-11 08:09:53

事務隔離級別

2023-09-22 08:27:39

2018-12-19 16:46:38

MySQL事務隔離數(shù)據(jù)庫

2024-11-01 05:10:00

2021-11-04 08:16:50

MySQL SQL 語句數(shù)據(jù)庫

2021-07-26 10:28:13

MySQL事務隔離

2024-04-26 09:17:20

MySQL事務隔離

2021-08-04 13:19:42

MySQL 事務隔離

2021-09-07 10:33:42

MySQL事務隔離性

2023-12-06 08:23:16

MVCCmysql

2025-07-18 07:19:00

2024-12-02 08:37:04

2025-03-03 08:20:00

MySQL事務隔離數(shù)據(jù)庫

2018-12-06 14:56:46

微服務隔離熔斷

2024-03-11 00:00:00

mysqlInnoDB幻讀

2024-02-04 09:00:00

向量查詢數(shù)據(jù)檢索MyScale

2021-10-19 10:10:51

MySQL事務隔離級別數(shù)據(jù)庫
點贊
收藏

51CTO技術棧公眾號

久久一级免费视频| 色一情一区二区| 久久经典视频| 久久99精品视频| 欧美激情一级二级| 自拍偷拍中文字幕| 亚洲国产天堂| 黑人巨大精品欧美一区免费视频 | 午夜精品福利视频| 中文字幕精品亚洲| 精品亚洲免a| 欧美猛男超大videosgay| 成人免费性视频| av电影在线观看网址| 处破女av一区二区| 国产日韩欧美视频| 久久不卡免费视频| 欧美另类亚洲| 社区色欧美激情 | 少妇一级淫片免费放播放| 日本成人一区二区| 色综合天天综合网国产成人综合天| 中文字幕久久综合| 黄色av免费在线看| 成人免费毛片嘿嘿连载视频| 国产精品视频一区二区三区四| 日韩欧美一区二区一幕| 我不卡影院28| 在线视频亚洲欧美| www.免费av| 在线日韩成人| 欧美一级久久久久久久大片| 三级在线视频观看| 午夜影视一区二区三区| 亚洲一区视频在线| 国产盗摄视频在线观看| 成人亚洲性情网站www在线观看| 成人av片在线观看| wwwxx欧美| 国产成人精品白浆久久69| 青娱乐精品视频| 日韩免费中文字幕| 欧美在线观看不卡| 国产欧美在线| 韩国19禁主播vip福利视频| 九九热最新地址| 久久精品青草| 大胆欧美人体视频| 懂色av懂色av粉嫩av| 亚洲国产成人精品女人| 精品国产视频在线| 一级片一级片一级片| 91亚洲成人| 久久视频免费观看| 国产探花视频在线播放| 加勒比久久综合| 最近2019中文字幕第三页视频| 美女爆乳18禁www久久久久久| 爽爽窝窝午夜精品一区二区| 国产视频精品免费播放| 在线 丝袜 欧美 日韩 制服| 香蕉久久精品| 亚洲欧洲国产精品| 男女男精品视频网站| 日韩欧美一区二区三区免费看| 中文字幕日本欧美| 疯狂撞击丝袜人妻| 欧美成人久久| 久久久午夜视频| 中国一级免费毛片| 日韩精品一二三| 国产精自产拍久久久久久| 亚洲一区在线观| 国产精品伊人色| 成人在线视频网址| 青青草免费在线| 国产欧美日韩综合| 不卡中文字幕在线| av超碰免费在线| 亚洲午夜羞羞片| av天堂永久资源网| 免费一级欧美在线观看视频| 欧美一区二区二区| 免费成人蒂法网站| 欧美三级情趣内衣| 中文字幕在线看视频国产欧美在线看完整 | 久久中文视频| 欧美大片va欧美在线播放| 亚洲国产精一区二区三区性色| 在线亚洲国产精品网站| 国产精品人人做人人爽| 国产男男gay网站| 99视频国产精品| 亚洲国产日韩美| 伦理av在线| 欧美中文字幕亚洲一区二区va在线 | 国产高清精品软男同| sm捆绑调教国产免费网站在线观看| 欧美日韩激情视频| 天天综合网久久| 老司机精品在线| www.亚洲免费视频| 成年免费在线观看| 精久久久久久久久久久| 久久精品99久久| 国产精品剧情一区二区在线观看| 精品久久久久久中文字幕一区奶水 | 亚洲片av在线| 九九九久久久久| 蜜桃久久精品一区二区| 国内精品视频在线播放| 日韩精品黄色| 色婷婷久久久久swag精品| 日本中文字幕精品| 日韩精品欧美激情一区二区| 91精品国产高清久久久久久| 国产又粗又长又大视频| 久久日一线二线三线suv| av久久久久久| 久久久久黄色| 亚洲性xxxx| 国产尤物在线视频| 国产精品1024| 手机在线观看国产精品| 中文在线а√在线8| 欧美不卡一区二区三区| 中文字幕观看av| 久久综合网络一区二区| 精品久久sese| 超碰在线最新网址| 日韩写真欧美这视频| 91禁男男在线观看| 久久久久99| 久久综合给合久久狠狠色| 国产色婷婷在线| 欧美肥妇毛茸茸| 亚洲精品天堂网| 蜜臀久久99精品久久久久宅男 | 国产高清av片| 欧美xxav| 国产日产亚洲精品| av电影在线观看网址| 欧美在线观看视频一区二区 | 91精品一区二区三区综合在线爱| 国产精品草莓在线免费观看| 人成在线免费视频| 黄色成人av网| 亚洲图片综合网| 国产精品久久国产愉拍| 国内精品国语自产拍在线观看| 草草影院在线| 亚洲国产成人精品电影| 日产欧产va高清| av日韩在线网站| 成人在线免费在线观看| 偷拍精品福利视频导航| 人妖精品videosex性欧美| 亚洲人妻一区二区| 欧美日韩精品一区二区三区视频播放| 国产精品自拍av| 又大又硬又爽免费视频| 欧美美女啪啪| 国产成人精品亚洲精品| av在线1区2区| 欧美高清视频www夜色资源网| 欧美h片在线观看| 国产黑丝在线一区二区三区| 女人被男人躁得好爽免费视频| 69精品国产久热在线观看| 国内精品久久久久| 青青久在线视频| 欧美性色欧美a在线播放| 国产亚洲精品久久久久久豆腐| 激情欧美一区二区| 久久精品xxx| 日韩影视在线观看| 国产精品亚洲一区二区三区| 成人在线app| 亚洲激情免费观看| 波多野结衣家庭主妇| 成人免费一区二区三区在线观看| 能看毛片的网站| 国产亚洲精品v| 一区二区三区视频| 国产精品流白浆在线观看| 青青草99啪国产免费| 欧美成人三区| 日韩激情av在线免费观看| 黄色av一区二区| 亚洲免费毛片网站| 草草地址线路①屁屁影院成人| 日本午夜精品一区二区三区电影 | 国内毛片毛片毛片毛片毛片| 国产成人av资源| 成人在线看视频| 欧美1区免费| 日本电影一区二区三区| 久久的色偷偷| 国产福利精品视频| 污片视频在线免费观看| 亚洲男人的天堂在线| 国产成人精品a视频| 日本高清不卡视频| 国产午夜福利片| 亚洲欧洲精品一区二区三区| av无码一区二区三区| 国产精品综合av一区二区国产馆| 日本三级免费网站| 国内自拍一区| 一区二区不卡在线视频 午夜欧美不卡'| 高清一区二区三区| 91日本视频在线| 欧美艳星kaydenkross| 欧美激情在线观看视频| 日本精品在线| 亚洲午夜激情免费视频| 日本免费不卡视频| 欧美一区二区性放荡片| 天天天天天天天干| 韩曰欧美视频免费观看| 国产亚洲精品女人久久久久久| 国产精品区一区二区三区| 91黄色免费视频| 成人午夜在线视频| 古装做爰无遮挡三级聊斋艳谭| 青青草国产成人99久久| 91精品91久久久中77777老牛| 欧美亚韩一区| 成人在线免费高清视频| 99精品视频在线观看播放| 欧美一区二区三区在线播放| 欧美理论电影在线精品| 精品高清视频| 91久久精品无嫩草影院| 97超碰资源| 麻豆国产一区| 91精品综合视频| 亚洲伦理网站| 91免费综合在线| 日韩成人综合网| 国产欧美日韩综合精品| 国产精品成人国产| 国产精品久久久久福利| 香蕉成人影院| 国产精品一久久香蕉国产线看观看| 黑人巨大精品欧美一区二区桃花岛| 91成人在线播放| 国产剧情av在线播放| 91国产精品电影| 国产免费拔擦拔擦8x高清在线人| 国模极品一区二区三区| 51精品在线| 日本欧美爱爱爱| av一区在线| 国产精品欧美日韩| 亚洲人成777| 亚洲一区二区三区视频| 97超碰成人| 九色一区二区| 精品久久影视| 熟妇熟女乱妇乱女网站| 欧美a级片一区| 麻豆tv在线播放| 久久久久久9| 在线观看日本一区二区| 国产麻豆视频精品| 欧美日韩人妻精品一区在线| 99久久伊人网影院| 国产一二三四五区| ...xxx性欧美| 四虎永久在线精品| 色综合久久久久| 96日本xxxxxⅹxxx17| 日韩精品综合一本久道在线视频| 五月婷婷久久久| 亚洲最大在线视频| 国产调教视频在线观看| 久久久久久久爱| 日韩免费福利视频| 成人免费淫片aa视频免费| 超碰97久久国产精品牛牛| 免费在线成人av电影| 91亚洲一区| 18禁网站免费无遮挡无码中文| 久久精选视频| 国产毛片久久久久久| 99热99精品| 亚洲伦理一区二区三区| 午夜私人影院久久久久| 激情网站在线观看| 日韩欧美国产综合一区| 免费av在线电影| 理论片在线不卡免费观看| 永久免费毛片在线播放| 成人午夜高潮视频| 蜜桃一区二区三区| 黄色一级片av| 丝袜美腿高跟呻吟高潮一区| 欧美人与性动交α欧美精品| 久久久精品天堂| 麻豆chinese极品少妇| 91久久精品一区二区二区| 精品国产va久久久久久久| 亚洲性猛交xxxxwww| av人人综合网| 亚洲mm色国产网站| 国产尤物久久久| 每日在线观看av| 国产毛片一区二区| 懂色av蜜桃av| 欧美午夜无遮挡| 丰满人妻熟女aⅴ一区| 日韩中文在线观看| 免费观看亚洲| 国产亚洲欧美另类一区二区三区| 午夜片欧美伦| 亚洲这里只有精品| 久久夜色精品国产噜噜av| 久久网免费视频| 欧美一区在线视频| 91在线视频| 国产精品激情av在线播放| 伊人成综合网伊人222| 国产精品久久久久9999爆乳| 久久国产日韩欧美精品| 五月婷婷欧美激情| 色综合色综合色综合| 天天操天天干天天| 欧美国产日韩免费| 蜜桃在线一区| 特级黄色录像片| 久久精品国产免费| 免费成人深夜天涯网站| 色综合色综合色综合| 欧美色视频免费| 欧美亚洲国产日本| 日日狠狠久久偷偷综合色| 很污的网站在线观看| 国产91高潮流白浆在线麻豆| 麻豆chinese极品少妇| 日韩女优视频免费观看| 成人看av片| www.久久艹| 亚洲视频综合| 无码成人精品区在线观看| 一区二区三区在线免费| www精品国产| 欧美韩国理论所午夜片917电影| 136福利精品导航| 国产中文字幕二区| 99国产精品久久久| 日本视频免费在线| 日韩精品中文字幕在线播放| 色综合亚洲图丝熟| 欧美极品一区二区| 丝袜亚洲精品中文字幕一区| 青娱乐国产视频| 欧美日韩高清影院| 国产黄色小视频在线| 成人羞羞视频免费| 亚洲精品资源| 久久久久久九九九九九| 欧美性xxxxx极品少妇| 欧美18一19xxx性| 波多野结衣久草一区| 一本色道久久综合一区| 亚洲理论片在线观看| 精品视频1区2区| 在线观看电影av| 久久这里精品国产99丫e6| 日本美女一区二区| 欧美爱爱小视频| 亚洲国产精品人人爽夜夜爽| 亚洲不卡系列| 美女黄色片网站| 99久久精品情趣| 国产精品成人无码| 欧美精品在线免费观看| 奇米影视777在线欧美电影观看| 麻豆传传媒久久久爱| 日韩美女视频一区| 日本高清视频网站| 国产精品久久二区| 综合国产精品| 亚洲熟妇无码av| 欧美一区二区三区影视| 涩涩网在线视频| 香蕉精品视频在线| av午夜一区麻豆| 中文字幕在线视频第一页| 久久久久久久久久av| 欧美三级伦理在线| 国产伦精品一区二区三区88av| 欧美在线|欧美| gogo高清在线播放免费| 亚洲图片在线观看| av在线不卡免费看| 国产又粗又黄又爽的视频| 91成人在线播放| 欧美日韩综合|