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

淺談MySQL的事務和ACID

數據庫 MySQL
所謂事務(Transaction),就是通過確保成批的操作要么完全執行,要么完全不執行,來維護數據庫的完整性。

所謂事務(Transaction),就是通過確保成批的操作要么完全執行,要么完全不執行,來維護數據庫的完整性。舉一個爛大街的例子:A 向 B 轉賬 1000 元,對應的 SQL 語句為:(沒有顯式定義事務)

  1. UPDATE deposit_table set depositdeposit = deposit - 1000 WHERE name = 'A'
  2. UPDATE deposit_table set depositdeposit = deposit + 1000 WHERE name = 'B'

運行后的結果如下:

  1. mysql> SELECT * FROM deposit_table; 
  2. +------+---------+ 
  3. | name | deposit | 
  4. +------+---------+ 
  5. | A    |    3000 | 
  6. | B    |    5000 | 
  7. +------+---------+ 

這樣做可能遇到問題,比如執行完第一條語句之后,數據庫崩潰了,最后的結果就可能會是這樣(有待商榷,取決于下一條 SQL 有沒有被寫入日志):

  1. +------+---------+ 
  2. | name | deposit | 
  3. +------+---------+ 
  4. | A    |    2000 | 
  5. | B    |    5000 | 
  6. +------+---------+ 

A 的 1000 塊錢平白無故消失了,這肯定不合適。事務就是為了解決類似的問題而出現的,如果使用事務來處理轉賬,對應的 SQL 就是:

  1. START TRANSACTION; 
  2. UPDATE deposit_table set depositdeposit = deposit - 1000 WHERE name = 'A'
  3. UPDATE deposit_table set depositdeposit = deposit + 1000 WHERE name = 'B'
  4. COMMIT; 

僅僅是在這原先的兩條 SQL 語句前后加上了 START TRANSACTION 和 COMMIT ,就可以保證即使轉賬操作失敗,A 的余額也不會減少。

仔細想一想發現這個例子不是特別合適,因為數據庫的故障恢復技術(以后會談到)會影響最終的結果,也不容易模擬這種故障,最后結果只能靠猜 : ) 但我也想不出其它更加合適的例子。

接下來就詳細討論事務的一些特性和(某些)實現細節。

ACID

  • A:Atomicity(原子性)
  • C:Consistency(一致性)
  • I:Isolation(隔離性)
  • D:Durability(持久性)

1. Atomicity(原子性)

先談兩個重要的概念:提交(commit)和回滾(rollback),當我們執行提交操作后,將對數據庫進行永久性的修改,執行回滾操作,意味著數據庫將撤銷正在進行的所有沒有提交的修改。注意這里的永久性并不意味著事務一完成就把數據刷到磁盤上,即使沒有刷入磁盤,MySQL 也有日志機制來保證修改不會丟失。

事務是支持提交和回滾的工作單元,原子性,就是說事務對數據庫進行多次更改時,要么在提交事務的時候所有更改都成功,要么在回滾事務的時候撤銷所有更改。這是官方文檔的表述,但有的人似乎錯誤理解了 commit 語句,實際上,哪怕事務里某一語句出現了錯誤,一旦你執行 commit,前面正常的修改仍然會被提交,MySQL 不會自動判斷事務中的 SQL 執行成功與否。

我們接下來用例子來看看 commit 和 rollback:

  1. mysql> SELECT * FROM deposit_table; 
  2. +------+---------+ 
  3. | name | deposit | 
  4. +------+---------+ 
  5. | A    |    2000 | 
  6. | B    |    6000 | 
  7. +------+---------+ 
  8. 2 rows in set (0.04 sec) 
  1. mysql> 
  2. START TRANSACTION; 
  3. INSERT INTO deposit_table VALUES('C', 7000); 
  4. INSERT INTO deposit_table VALUES('D', 8000); 
  5. #再次插入 D,由于主鍵的唯一性,該語句會執行失敗 
  6. INSERT INTO deposit_table VALUES('D', 9000); 
  7. COMMIT; #提交事務 
  8.  
  9. Query OK, 0 rows affected (0.00 sec) 
  10.  
  11. Query OK, 1 row affected (0.00 sec) 
  12.  
  13. Query OK, 1 row affected (0.00 sec) 
  14.  
  15. 1062 - Duplicate entry 'D' for key 'PRIMARY' 
  16. Query OK, 0 rows affected (0.07 sec) 
  1. mysql> SELECT * FROM deposit_table; 
  2. +------+---------+ 
  3. | name | deposit | 
  4. +------+---------+ 
  5. | A    |    2000 | 
  6. | B    |    6000 | 
  7. | C    |    7000 | 
  8. | D    |    8000 | 
  9. +------+---------+ 
  10. 4 rows in set (0.04 sec) 

我們可以看到,在執行 INSERT INTO deposit_table VALUES('D', 9000) 的時候,由于前一條語句已經插入了 D,所以這一句 SQL 語句執行失敗,報出 1062 - Duplicate entry 'D' for key 'PRIMARY' 錯誤,但執行 COMMIT后,前面的修改仍然得到了提交,這顯然是不符合我們的預期的。

注意:如果你是使用 Navicat 的查詢界面,將執行不到 COMMIT 語句,只能執行到報錯的地方,建議使用命令行來執行。

所以在實際情況中,我們需要根據 MySQL 的錯誤返回值來確定,是使用 ROLLBACK 還是 COMMIT 。就像這樣:

  1. # 創建一個存儲過程 
  2. CREATE DEFINER=`root`@`localhost` PROCEDURE `insert_test`() 
  3. BEGIN 
  4.     # 創建一個標志符,出現錯誤就將其置為 1 
  5.     DECLARE err_flg INTEGER; 
  6.     DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET err_flg = 1
  7.  
  8.     START TRANSACTION; 
  9.         INSERT INTO deposit_table VALUES('C', 7000); 
  10.                 INSERT INTO deposit_table VALUES('D', 8000); 
  11.                 INSERT INTO deposit_table VALUES('D', 9000); 
  12.          
  13.         # 發生錯誤,回滾事務 
  14.         IF err_flg = 1 THEN 
  15.             SELECT 'SQL Err Invoked'; # 錯誤提示信息 
  16.             ROLLBACK; 
  17.             SELECT * FROM deposit_table; 
  18.         # 沒有發生錯誤,直接提交 
  19.         ELSE 
  20.             SELECT 'TRANSACTION Success'; 
  21.             COMMIT; 
  22.             SELECT * FROM deposit_table; 
  23.         END IF; 
  24.      
  25. END 

接下來我們調用該存儲過程:

  1. mysql> call insert_test(); 
  2. +-----------------+ 
  3. | SQL Err Invoked | 
  4. +-----------------+ 
  5. | SQL Err Invoked | 
  6. +-----------------+ 
  7. 1 row in set (0.04 sec) 
  8.  
  9. +------+---------+ 
  10. | name | deposit | 
  11. +------+---------+ 
  12. | A    |    2000 | 
  13. | B    |    6000 | 
  14. +------+---------+ 
  15. 2 rows in set (0.09 sec) 
  16.  
  17. Query OK, 0 rows affected (0.00 sec) 

結果里打印出了錯誤信息 SQL Err Invoked 表的內容也沒有更改,表明我們的 ROLLBACK 成功回滾了事務,達到我們的預期。如果你是使用其他語言調用 MySQL 的接口,也只需要獲取錯誤標志,相應的執行 ROLLBACK 或者 COMMIT 。

2. Consistency(一致性)

官網給出的解釋如下:

The database remains in a consistent state at all times — after each commit or rollback, and while transactions are in progress. If related data is being updated across multiple tables, queries see either all old values or all new values, not a mix of old and new values.

翻譯過來就是:在每次提交或回滾之后以及正在進行的事務處理期間,數據庫始終保持一致狀態,如果跨多個表更新了相關數據,則查詢將看到所有舊值或所有新值,而不是新舊值的混合。

舉個例子:

  1. # 表 a,b 的定義略過 
  2. START TRANSACTION; 
  3. UPDATE a SET name = 'a_new' WHERE name = 'a_old'
  4. UPDATE b SET name = 'b_new' WHERE name = 'b_old'
  5. COMMIT; 

這個例子里的一致性,就是說,如果此時有查詢 SELECT a.name, b.name FROM a, b; 得到的結果要么是 a_old b_old (表明事務已回滾或者正在執行),要么是 a_new b_new (表明事務已經成功提交),而不會出現 a_old b_new以及 a_new b_old 這兩種情況。

有的博客將一致性解釋為“數據符合現實世界中的約束,比如唯一性約束等等。” 我個人還是傾向于官方文檔的解釋,這點見仁見智吧,糾結這些概念意義不大。

3. Isolation(隔離性)

事務的隔離性是說,事務之間不能互相干擾,也不能看到彼此的未提交數據。這種隔離是通過鎖機制實現的。我們在操作系統里也了解過,使用鎖,往往就意味著并發性能的下降,因為可能會發生阻塞,甚至死鎖現象。

當然,用戶在確定事務確實不會相互干擾時,可以調整隔離級別,犧牲部分隔離性以提高性能和并發性,至于使用哪種隔離級別(isolation level)這就需要你自己做 trade off。

因為隔離性涉及的的內容很多,我把它放到下一篇文章詳細解釋。

4. Durability(持久性)

事務的持久性是說,一旦提交操作成功,該事務所做的更改就不會因為一些意外而丟失,比如電源斷電,系統崩潰等潛在威脅。MySQL 提供了很多機制,比如日志技術,doublewrite buffer等等。

MySQL 的日志恢復技術我將單獨寫一篇文章,這里說說 doublewrite buffer 技術。

雖然這個技術名字叫做 buffer,但實際上該緩沖區并不位于內存,而是位于磁盤。這可能聽起來很詭異——既然是把數據放入磁盤,為啥不直接寫入到 data file,反而多此一舉?

這是因為 InnoDB 的 Page Size 一般是 16kb,其數據校驗也是針對頁來計算的,在將數據刷入磁盤的過程中,如果發生斷電等故障,該頁可能只寫入了一部分(partial page write)。這種情況是 redo 日志無法解決的,因為 redo 日志中記錄的是對頁的物理操作,如果頁本身發生了損壞,再對其進行 redo 是沒有意義的。所以我們需要一個副本,在發生這種情況時還原該頁。

而且緩沖區是順序寫的,開銷相對隨機讀寫要小很多,所以 doublewrite 后,性能也不是降為原來的 50%。

二、事務中的常用語句

  • START TRANSACTION / BEGIN 顯式開啟一個事務
  • COMMIT 提交事務,永久性修改數據庫
  • SAVEPOINT 在事務里創建保存點
  • RELEASE SAVAPOINT 移除某保存點
  • ROLLBACK 回滾事務,撤回所有未提交的更改,事務會終止
  • ROLLBACK TO [SAVEPOINT] 回滾到給定保存點,但事務不終止,另外,該保存點后的行鎖不會被釋放,詳見SAVEPOINT, ROLLBACK TO SAVEPOINT, and RELEASE SAVEPOINT Statements
    InnoDB does not release the row locks that were stored in memory after the savepoint. (For a new inserted row, the lock information is carried by the transaction ID stored in the row; the lock is not separately stored in memory. In this case, the row lock is released in the undo.)
  • SET TRANSACTION 設置事務隔離級別
  • SET autocommit 0/1 是否自動提交(默認自動提交)

強調一下 autocommit 參數,默認情況下,如果不顯式使用 START TRANSACTION / BEGIN ,MySQL 會把每一句 SQL 當做獨立的事務,舉個例子:

原來的表結構:

  1. mysql> SELECT * FROM deposit_table; 
  2. +------+---------+ 
  3. | name | deposit | 
  4. +------+---------+ 
  5. | A    |    2000 | 
  6. | B    |    6000 | 
  7. +------+---------+ 
  8. 2 rows in set (0.04 sec) 

新的存儲過程(僅僅刪除了 START TRANSACTION ):

  1. CREATE DEFINER=`root`@`localhost` PROCEDURE `insert_test`() 
  2. BEGIN 
  3.     #Routine body goes here... 
  4.     DECLARE err_flg INTEGER; 
  5.     DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET err_flg = 1
  6.  
  7.     # START TRANSACTION; 
  8.     INSERT INTO deposit_table VALUES('C', 7000); 
  9.     INSERT INTO deposit_table VALUES('D', 8000); 
  10.     INSERT INTO deposit_table VALUES('D', 9000); 
  11.          
  12.         IF err_flg = 1 THEN 
  13.             SELECT 'SQL Err Invoked'; 
  14.             ROLLBACK; 
  15.             SELECT * FROM deposit_table; 
  16.         ELSE 
  17.             SELECT 'TRANSACTION Success'; 
  18.             COMMIT; 
  19.             SELECT * FROM deposit_table; 
  20.         END IF; 
  21.      
  22. END 

調用的結果:

  1. mysql> call insert_test(); 
  2. +-----------------+ 
  3. | SQL Err Invoked | 
  4. +-----------------+ 
  5. | SQL Err Invoked | 
  6. +-----------------+ 
  7. 1 row in set (0.24 sec) 
  8.  
  9. +------+---------+ 
  10. | name | deposit | 
  11. +------+---------+ 
  12. | A    |    2000 | 
  13. | B    |    6000 | 
  14. | C    |    7000 | 
  15. | D    |    8000 | 
  16. +------+---------+ 
  17. 4 rows in set (0.28 sec) 
  18.  
  19. Query OK, 0 rows affected (0.21 sec) 

在這里,我們看到盡管確實執行了 ROLLBACK,但 C 和 D 仍然插入到了 deposit_table 。這是因為沒有顯式標明事務,MySQL 會進行隱式事務,自動提交每次的修改,所以就無法進行回滾了。

 

責任編輯:趙寧寧 來源: tobe的囈語
相關推薦

2024-03-15 11:59:25

SQL數據庫ACID

2024-12-02 08:37:04

2019-04-03 09:27:01

MySQLInnoDB務ACID

2010-09-08 15:55:20

SQL事務特性

2019-01-29 09:36:10

MySQLACID特性

2024-12-30 13:58:14

2023-01-05 12:30:32

Redis

2021-09-17 12:50:10

MySQL數據庫ACID

2021-10-18 08:41:20

Redis ACID事務

2021-07-08 07:08:21

MySQL ACID 數據庫

2010-11-22 16:40:00

MySQL事務表

2021-10-03 21:41:13

RocketMQKafkaPulsar

2017-07-26 15:08:05

大數據分布式事務

2009-06-29 17:54:47

Spring事務隔離

2022-03-30 07:28:24

MySQL數據庫ACID

2021-11-29 07:24:08

ACID事務大數據

2025-11-20 10:18:11

2024-12-30 07:20:00

Redis數據庫MySQL

2018-09-06 14:53:39

數據庫事務隔離隔離級別

2021-09-27 07:11:18

MySQLACID特性
點贊
收藏

51CTO技術棧公眾號

丝袜美腿美女被狂躁在线观看 | 亚洲欧洲无码一区二区三区| 国产又爽又黄的激情精品视频 | 欧美小视频在线| 色综合影院在线观看| av中文字幕免费在线观看| 亚洲大胆视频| 日韩视频免费中文字幕| 男人网站在线观看| 日本免费一区二区三区等视频| 亚洲精品v日韩精品| 蜜桃导航-精品导航| 国产原创中文av| 亚洲综合日韩| 欧美另类在线观看| 精品无码在线观看| 黄色欧美网站| 91精品国产综合久久精品图片 | 日韩激情在线视频| 91免费视频污| 亚洲精品一区三区三区在线观看| 亚洲一区二区三区激情| 一本一本久久a久久精品综合妖精| 日韩一区二区三区在线观看视频| 九九视频精品免费| 欧美在线中文字幕| 动漫精品一区一码二码三码四码| 色天天综合网| 一本一本久久a久久精品综合小说| 久久av一区二区三| 日本久久一区| 欧美三级电影精品| 国产a级一级片| 欧美人体视频xxxxx| 中文字幕一区在线观看视频| 日本午夜精品一区二区| 天天综合网天天综合| 国产精品一卡二卡| 亚洲va欧美va国产综合剧情| 欧美日韩 一区二区三区| 亚洲一区网站| 26uuu久久噜噜噜噜| 精品99久久久久成人网站免费| 色婷婷一区二区三区| 亚洲视频网站在线观看| 无码人妻精品一区二区三应用大全| 大香伊人久久精品一区二区| 日韩欧美在线网站| 国产视频1区2区3区| 99热播精品免费| 欧美日韩在线综合| 日韩av手机版| 欧美爱爱视频| 欧美精品精品一区| 一级淫片在线观看| 国色天香久久精品国产一区| 欧美一区二区在线看| 精品人妻一区二区三区免费| 亚洲日本va| 欧美精品一区二区三区四区 | 国产免费一区二区三区最新不卡 | 91精品国产高清一区二区三区蜜臀 | 在线播放91灌醉迷j高跟美女| 三上悠亚av一区二区三区| 91九色综合| 欧美精品第一页| 一卡二卡三卡四卡五卡| jizz18欧美18| 精品在线欧美视频| 欧美黄色高清视频| 国产精品久久久久蜜臀| 欧美成人激情视频免费观看| 久久精品女人毛片国产| 国产日本精品| 国产精品露脸自拍| 国产精品久久777777换脸| 国产精品一品视频| 精品视频导航| av影片在线看| 一区二区三区成人| 能在线观看的av| 日本中文字幕一区二区| 欧美一级日韩免费不卡| 亚洲精品乱码久久| 成人嘿咻视频免费看| 欧美精品在线免费| 国产婷婷色一区二区在线观看| 美女网站视频久久| 成人欧美一区二区三区在线观看| 四虎影视2018在线播放alocalhost| 日本一区二区三区国色天香 | 日本一区二区视频在线播放| 亚洲国产一成人久久精品| 97色在线视频| 国产精品视频在线观看免费| 99久久精品免费看国产免费软件| 婷婷五月色综合| 免费影视亚洲| 精品视频在线免费看| 老熟女高潮一区二区三区| 精品国产乱码久久久| 不卡毛片在线看| 亚洲成熟少妇视频在线观看| 国产精品一区二区91| 日韩精品福利视频| 日本在线观看高清完整版| 欧美综合一区二区| 野战少妇38p| 久久资源中文字幕| 777精品视频| 亚洲成人一级片| 国产精品网友自拍| av7777777| 一区二区三区四区高清视频| 中文国产成人精品| 国产精品777777| 国产91精品一区二区| 亚洲人成人77777线观看| 高端美女服务在线视频播放| 日韩三级视频在线看| 国产欧美小视频| 视频一区视频二区在线观看| 精品乱色一区二区中文字幕| 丁香花在线观看完整版电影| 欧美日韩不卡在线| 日本高清www| 亚洲日本成人| 成人激情直播| 麻豆av在线免费观看| 91精品国产麻豆国产自产在线| 网爆门在线观看| 日韩精品一区第一页| 快播日韩欧美| 少妇在线看www| 亚洲精品久久7777777| 成年人av电影| 国产大陆a不卡| 日韩视频一二三| 国产中文欧美日韩在线| 日韩最新在线视频| 亚洲系列在线观看| 欧美国产欧美亚州国产日韩mv天天看完整 | 国产九九精品| 激情视频在线观看一区二区三区| jizz一区二区三区| 亚洲成人av在线| 亚洲视频免费播放| 99久久er热在这里只有精品66| 日本中文字幕亚洲| 国产精品极品国产中出| 韩国v欧美v日本v亚洲| 亚洲精选一区二区三区| 亚洲国产美国国产综合一区二区| 性活交片大全免费看| 影音先锋日韩资源| 久久精品ww人人做人人爽| 久久青草伊人| 亚洲美女在线看| 欧美成人一区二区视频| 国产精品丝袜一区| 九九九九九九九九| 欧美精品啪啪| 狠狠色伊人亚洲综合网站色| 亚洲美女久久精品| 在线视频欧美日韩| jlzzjlzzjlzz亚洲人| 亚洲一区在线观看免费| 日韩成人av一区二区| 裸体一区二区| 亚洲最新免费视频| 日本免费精品| 欧美性受xxx| 福利视频在线看| 欧美一区二区国产| 日本少妇做爰全过程毛片| 久久久久久久久岛国免费| 亚洲免费999| 极品日韩av| 日本视频一区二区在线观看| 国产一精品一av一免费爽爽| 7m第一福利500精品视频| 97视频在线观看网站| 日韩免费福利电影在线观看| 狠狠躁夜夜躁人人爽天天高潮| 国产欧美一区二区精品性色| 国产男女无遮挡猛进猛出| 在线亚洲成人| 中文字幕一区二区三区四区五区六区| 亚洲性视频在线| 日韩美女av在线免费观看| 成人黄视频在线观看| 日韩精品小视频| 国产模特av私拍大尺度| 粉嫩av一区二区三区免费野| 国产激情无码一区二区三区| 99国产精品一区| 亚洲精品在线网址| 亚洲综合国产| 国产小视频免费| 奇米影视亚洲| 精品无人区一区二区三区| 国产精品白丝久久av网站| 日本国产精品视频| 4438x成人网全国最大| 精品在线观看国产| www.色播.com| 欧美日韩一二三区| 国产视频91在线| 亚洲你懂的在线视频| 人人人妻人人澡人人爽欧美一区| 国产成人av福利| 久久国产激情视频| 免费欧美日韩| 91精品国产91久久久久麻豆 主演| 日韩av二区| 日本在线观看一区二区| 国产精品极品| www 成人av com| 91视频亚洲| 成人国产精品av| 国产精品蜜月aⅴ在线| 日本三级久久久| 蜜桃视频动漫在线播放| 欧美激情成人在线视频| 国产1区在线| 久久综合免费视频| 欧洲不卡视频| 久久精品国产亚洲| 香港伦理在线| 色噜噜国产精品视频一区二区| 精品99又大又爽又硬少妇毛片| 亚洲激情在线观看视频免费| 男人天堂综合网| 日韩精品一区二区三区蜜臀| 97精品人妻一区二区三区| 精品视频一区二区不卡| 国产成人麻豆免费观看| 在线观看成人免费视频| 欧美一区免费看| 色综合久久中文字幕| 亚洲黄网在线观看| 91国偷自产一区二区三区成为亚洲经典| 人人干人人干人人干| 狠狠躁夜夜躁久久躁别揉| 国产成人无码精品亚洲| 精品欧美国产一区二区三区| 日韩av一区二区在线播放| 一区二区国产视频| 久久综合成人网| 天天av天天翘天天综合网色鬼国产| 日韩精品一区二区在线播放| 欧美日韩一区二区三区| 欧美日韩综合一区二区三区| 色婷婷av一区二区三区gif| 欧美精品一二三四区| 欧美在线观看一区| 亚洲天堂avav| 欧美一区午夜视频在线观看| 亚洲美女福利视频| 亚洲风情亚aⅴ在线发布| 青青草视频在线观看| 亚洲午夜国产成人av电影男同| 不卡在线视频| 久久亚洲成人精品| 欧美78videosex性欧美| 91精品国产91久久久久久不卡| 另类图片综合电影| 国产精品一区二区三区久久| 亚洲福利影视| 国产在线一区二| 久久成人高清| aaa免费在线观看| 影音先锋亚洲一区| av免费在线播放网站| 麻豆精品在线看| 又色又爽又黄18网站| 久久夜色精品国产噜噜av| 战狼4完整免费观看在线播放版| 亚洲人精品午夜| 草久视频在线观看| 欧美精选一区二区| 黑人乱码一区二区三区av| 亚洲视频在线观看视频| av在线看片| 国产91久久婷婷一区二区| 亚洲91在线| 欧美国产一区二区在线| 国产精品黑丝在线播放| 免费看毛片的网址| 美女视频免费一区| 麻豆短视频在线观看| 国产日产精品1区| 久久视频免费看| 欧美日韩一区高清| 日本韩国免费观看| 深夜精品寂寞黄网站在线观看| 1区2区3区在线| 国产主播欧美精品| 日韩精选在线| 91视频 - 88av| 毛片不卡一区二区| 国产免费一区二区三区最新6| 中文字幕 久热精品 视频在线| 香蕉免费毛片视频| 这里只有精品电影| 国内精品一区视频| 久久久免费精品| 成人av在线播放| 欧洲久久久久久| 国产精品视频| 日批视频免费看| 亚洲视频在线一区二区| 久久久精品毛片| 亚洲国产天堂久久综合网| av毛片在线免费看| 国产精品久久久91| 亚洲人成伊人成综合图片| www.国产在线播放| 国产做a爰片久久毛片| gv天堂gv无码男同在线观看| 精品日韩视频在线观看| 亚洲精品无遮挡| 欧美精品性视频| 激情不卡一区二区三区视频在线| 亚洲欧美丝袜| 日本成人在线电影网| 无码国产69精品久久久久同性| 精品成人在线视频| 欧美 日韩 国产 在线| 欧美成人全部免费| 996久久国产精品线观看| 亚洲第一在线综合在线| 久久久精品性| av在线网站观看| 欧美日韩亚洲一区二| 色噜噜在线播放| 久久久久久噜噜噜久久久精品| 日韩一区二区三区色| 亚洲成人动漫在线| 国内外成人在线| 亚洲最大的黄色网址| 欧美精品在欧美一区二区少妇| 女女色综合影院| 91麻豆国产语对白在线观看| 亚洲经典一区| 免费观看污网站| 午夜精品在线看| 天天干天天爱天天操| 57pao国产成人免费| 日韩欧美天堂| av片中文字幕| 中文欧美字幕免费| 一级黄色片免费| 久久国产精品久久久久| 视频在线观看免费影院欧美meiju| 肉大捧一出免费观看网站在线播放| 国产精品一二三四| 成年人免费看毛片| 亚洲深夜福利视频| 男女啪啪999亚洲精品| 欧洲金发美女大战黑人| 成人精品视频一区二区三区| 在线观看亚洲天堂| 国产亚洲精品久久久| 日韩成人综合网| 免费网站永久免费观看| 91女人视频在线观看| 亚洲性猛交富婆| 美日韩丰满少妇在线观看| 成人在线tv视频| 日本黄色三级大片| 国产精品乱码一区二区三区软件 | 激情五月婷婷网| 中文字幕日韩av综合精品| 婷婷久久免费视频| 久久成人福利视频| 久久精品综合网| 国产尤物在线观看| 欧美激情乱人伦一区| 亚洲欧美日本伦理| 中文字幕成人免费视频| 亚洲影视在线播放| 国产经典自拍视频在线观看| 91久久久久久久久久久| 日韩视频二区| 91香蕉一区二区三区在线观看| 精品国精品国产尤物美女| 婷婷激情一区| www.69av| 日本一区二区综合亚洲| 亚洲国产欧美另类| 国产精品678| 亚洲第一黄网| 久久精品一区二区三区四区五区| 亚洲精品97久久| 亚洲精品无播放器在线播放| 精品少妇人妻av免费久久洗澡| 国产精品国产三级国产| 午夜福利一区二区三区| 国产主播喷水一区二区|