久久精品国产精品国产精品污,男人扒开添女人下部免费视频,一级国产69式性姿势免费视频,夜鲁夜鲁很鲁在线视频 视频,欧美丰满少妇一区二区三区,国产偷国产偷亚洲高清人乐享,中文 在线 日韩 亚洲 欧美,熟妇人妻无乱码中文字幕真矢织江,一区二区三区人妻制服国产

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

【内容详细、源码详尽】MySQL极简学习笔记

發(fā)布時間:2024/3/13 数据库 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【内容详细、源码详尽】MySQL极简学习笔记 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

碎話

  • 本人整理資料時,發(fā)現(xiàn)了之前學(xué)習(xí)MySQL時做的筆記。筆記內(nèi)容做的蠻好的,值得分享給大家。所以根據(jù)自己的學(xué)習(xí)能力、精力、空余時間情況,把筆記整理成了四天的學(xué)習(xí)章節(jié)。
  • 每一個DQL、DML、DDL語句的學(xué)習(xí),我都給出了具體的MySQL程序和運行結(jié)果。大家可以跟著敲一敲,或者當(dāng)做復(fù)習(xí)資料。總的來說,實操用于是檢驗學(xué)習(xí)的不二法門。
  • 相信大家全部看完會大有所獲,有時間的話,我會將此篇文章單獨整理成一個專欄(現(xiàn)在沒時間)。
  • 文中所用的數(shù)據(jù)庫,有需要的同學(xué)可以在評論區(qū)留言郵箱號,我看到了就會發(fā)給大家。

  • 文章目錄

          • 碎話
      • @[toc]
        • 一、Day 01
          • 1-3、略
          • 4、看一下計算機上的服務(wù)
          • 5、在windows操作系統(tǒng)當(dāng)中,怎么使用命令來啟動和關(guān)閉MySQL服務(wù)?
          • 6、 mysql安裝成功了,服務(wù)啟動成功了,怎么使用客戶端登錄mysql數(shù)據(jù)庫?
          • 7、mysql的常用命令【不見分號不執(zhí)行】【不區(qū)分大小寫】
          • 8、數(shù)據(jù)庫中最基本的單元是表:table
          • 9、關(guān)于SQL語句的分類【要特別熟悉】?
          • 10、導(dǎo)入提前準備好的數(shù)據(jù)
          • 11、關(guān)于導(dǎo)入的這幾張表?
          • 13、簡單查詢
            • 13.1 查詢1個字段?
            • 13.2 查詢2個字段,或多個字段?
            • 13.3 查詢所有字段?
            • 13.4 給查詢的列起別名?
            • 13.5 計算員工年薪?sal*12
          • 14、條件查詢
            • 14.1 什么是條件查詢
          • 15、排序
            • 15.1 排序查詢所有員工薪資?
            • 15.2 可以兩個字段排序嗎?或者說按照多個字段排序?
            • 15.3 了解:根據(jù)字段的位置也可以排序
          • 16、綜合一點的案例
            • 16.1 找出工資在1250到3000之間的員工信息,要求按照薪資降序排列
          • 17、數(shù)據(jù)處理函數(shù)/單行處理函數(shù)
            • 17.1 數(shù)據(jù)處理函數(shù)又被稱為單行處理函數(shù)
            • 17.2 常見單行處理函數(shù)
          • 18、分組函數(shù)(多行處理函數(shù))
          • 19、分組查詢(*****非常重要:五顆星*****)
            • 19.1 什么是分組查詢
            • 19.2 將之前關(guān)鍵字全部組合在一起,看他們的執(zhí)行順序
            • 19.3 找出每個工作崗位的工資和?
            • 19.4 找出部門的最高薪資
            • 19.5 找出每個部門,不同工作崗位的最高薪資
            • 19.6 找出每個部門最高薪資,要求顯示最高薪資大于3000的?
            • 19.7 where沒辦法處理的情況?
          • 20、【回顧】
        • 二、Day 02[最重要]
          • 1、去除重復(fù)記錄
          • 2、連接查詢
            • 2.1 什么是連接查詢
            • 2.2 連接查詢的分類?
            • 2.3 當(dāng)兩張表進行連接查詢時,沒有任何條件的限制會發(fā)生什么現(xiàn)象?
            • 2.4 避免笛卡爾積現(xiàn)象
            • 2.5 內(nèi)連接:等值連接
            • 2.6 內(nèi)連接:非等值連接
            • 2.7 內(nèi)連接之自連接
            • 2.8 外連接:右外連接、左外連接
            • 2.9 三張表、四張表怎么連接
          • 3、子查詢
            • 3.1 什么是子查詢?
            • 3.2 子查詢都可以出現(xiàn)在哪里?
            • 3.3 where子句中的子查詢
            • 3.4 from子句中的子查詢
            • 3.5 select后面出現(xiàn)的子查詢(了解)
          • 4、union合并查詢結(jié)果集
          • 5、limit(非常重要)
            • 5.1 limit作用
            • 5.2 limit怎么用
            • 5.3 分頁
          • 6、DQL語句的大總結(jié)
          • 7、表的創(chuàng)建(建表)
            • 7.1 建表的語法格式:(DDL語句,包括:create, drop, alter)
            • 7.2 關(guān)于mysql中的數(shù)據(jù)類型
            • 7.3 創(chuàng)建一個學(xué)生表?
            • 7.4 插入數(shù)據(jù)insert ( DML )
            • 7.5 insert插入日期
            • 7.6 date和datetime兩個類型的區(qū)別
            • 7.7 update ( DML )
            • 7.8 delete(DML)
        • 三、Day 03
          • 1、查詢每個員工的所在部門名稱?要求顯示員工名和部門名?
          • 2、insert語句可以一次插入多條記錄【掌握】
          • 3、快速建表
          • 4、將查詢結(jié)果插入到一張表中?insert相關(guān)
          • 5、快速刪除表中的數(shù)據(jù)?【truncate比較重要,必須掌握,DDL操作】
          • 6、對表結(jié)構(gòu)的增刪改?【DDL,create drop alter,針對字段】
          • 7、約束(極其重要\****\*)
            • 7.1 什么是約束?
            • 7.2 約束包括哪些?
            • 7.3 非空約束:not null
            • 7.4 唯一性約束:unique
            • 7.5 主鍵約束(Primary key, PK,非常重要\****\*)
            • 7.6 外鍵約束(foreign key, PK, 非常重要)
            • 7.7 級聯(lián)更新與級聯(lián)刪除
            • 7.8 刪除約束
            • 7.9 添加約束
            • 7.10 修改約束
          • 8、存儲引擎
            • 8.1 存儲引擎的作用
            • 8.2 給表添加/指定“存儲引擎”
            • 8.3 查看mysql支持的存儲引擎
            • 8.4 mysql常用存儲引擎
          • 9、事務(wù)(非常重要\****\*)
            • 9.1 什么是事務(wù)
            • 9.2 什么sql語句支持事務(wù)
            • 9.3 事務(wù)存在的意義
            • 9.4 事務(wù)的原理
            • 9.5 如何提交事務(wù),如何回滾事務(wù)
            • 9.6 事務(wù)的ACID性質(zhì)
            • 9.7 事務(wù)的5種狀態(tài)
            • 9.7 **事務(wù)隔離級別**
            • 9.8 驗證各種隔離級別
            • 9.9 設(shè)置服務(wù)器的缺省隔離級別
        • 三、Day 04
          • 1、索引
            • 1.1 什么是索引
            • 1.2 索引的實現(xiàn)原理
            • 1.3、mysql自動添加索引
            • 1.4 索引的優(yōu)化
            • 1.5 索引的創(chuàng)建、刪除
            • 1.6 查看SQL語句是否使用了索引進行檢索
            • 1.7 索引失效(優(yōu)化策略)
            • 1.8 數(shù)據(jù)庫優(yōu)化重要手段:索引
          • 2、視圖(View)
            • 2.1 什么是視圖
            • 2.2 創(chuàng)建/刪除視圖對象
            • 2.3 視圖的作用:類似JAVA引用
            • 2.4 視圖對象在實際開發(fā)中的作用
          • 3、DBA常用命令
            • 3.1 重點掌握
            • 3.2 數(shù)據(jù)導(dǎo)出
            • 3.3 數(shù)據(jù)導(dǎo)入
          • 4、數(shù)據(jù)庫設(shè)計的三范式(重要)
            • 4.1 什么是數(shù)據(jù)庫設(shè)計范式
            • 4.2 數(shù)據(jù)庫設(shè)計三大范式
            • 4.3 第一范式
            • 4.4 第二范式
            • 4.5 第三范式
            • 4.6 總結(jié)表的設(shè)計(牢記)
            • 4.7 總結(jié)

    一、Day 01

    1-3、略

    4、看一下計算機上的服務(wù)

    5、在windows操作系統(tǒng)當(dāng)中,怎么使用命令來啟動和關(guān)閉MySQL服務(wù)?

    語法:

    net stop 服務(wù)名稱; net start 服務(wù)名稱;

    其他服務(wù)的啟、停都可以用上述命令

    6、 mysql安裝成功了,服務(wù)啟動成功了,怎么使用客戶端登錄mysql數(shù)據(jù)庫?

    使用bin目錄下面的mysql.exe命令來連接mysql數(shù)據(jù)庫服務(wù)器

    本地登錄(密碼可見):

    mysql -uroot -p123456

    本地登錄(密碼不可見):

    mysql -uroot -p

    7、mysql的常用命令【不見分號不執(zhí)行】【不區(qū)分大小寫】

    退出mysql:

    exit

    查看數(shù)據(jù)庫管理系統(tǒng)中有哪些數(shù)據(jù)庫:

    show databases;

    **【注意】**以英文分號‘ ; ’結(jié)尾;

    查看數(shù)據(jù)庫下有那些表?

    show tables;

    mysql默認自帶4個數(shù)據(jù)庫;

    怎么選擇使用某個數(shù)據(jù)庫?

    mysql> use test;

    怎么創(chuàng)建數(shù)據(jù)庫?

    mysql>create database bjpowernode;

    怎么查看表中的數(shù)據(jù)?

    select * from 表名;

    不看表中的數(shù)據(jù),只看表的結(jié)構(gòu)?

    desc 表名;

    查看mysql數(shù)據(jù)庫的版本號

    select version();

    查看當(dāng)前所使用的是哪個數(shù)據(jù)庫?

    select database;

    【注意:不見 ; 不執(zhí)行,; 是終止符】

    \c用來終止命令 與ctrl+c作用一樣

    8、數(shù)據(jù)庫中最基本的單元是表:table

    什么是表table?為什么用表來存儲數(shù)據(jù)呢?

    ? 數(shù)據(jù)庫當(dāng)中以表格形式表示數(shù)據(jù),因為表比較直觀。

    ? 任何一張表都有行和列:

    ? 行(row):被稱為數(shù)據(jù)/記錄。

    ? 列(column):被稱為字段。

    ? 姓名字段、性別字段、年齡字段。

    【注意】:每一個字段都有:字段名、數(shù)據(jù)類型、約束等屬性

    字段名:見名知意即可;

    數(shù)據(jù)類型:字符串、數(shù)字、日期等

    約束:約束有較多

    ? 唯一性約束:這種約束添加后,該字段中的數(shù)據(jù)不能重復(fù)

    9、關(guān)于SQL語句的分類【要特別熟悉】?

    ? SQL語句有很多,最好進行分門別類,這樣更容易記憶。

    ? DQL:數(shù)據(jù)參訓(xùn)語言(凡是帶select關(guān)鍵字的都是查詢語言)

    ? select…

    ? DML:數(shù)據(jù)操作語言(凡是對表當(dāng)中的數(shù)據(jù)進行增刪改的都是DML)

    ? insert delete update

    ? DDL:數(shù)據(jù)定義語言

    ? 凡是帶有creat、drop、alter的都是DDL

    ? DDL主要操作的是表的結(jié)構(gòu),不是表中的數(shù)據(jù)

    ? create:新建,等同于增

    ? drop:刪除

    ? alter:修改

    ? 這個增刪改與DML不同,DDL主 要是對表結(jié)構(gòu)進行操作

    ? TCL:事務(wù)控制語言

    ? 事務(wù)提交:commit;

    ? 事務(wù)回滾:rollback;

    ? DCL:數(shù)據(jù)控制語言

    ? 例如:授權(quán)grant、撤銷權(quán)限r(nóng)evoke…

    10、導(dǎo)入提前準備好的數(shù)據(jù)

    ? bjpowernode.sql 導(dǎo)入sql腳本文件,里面有表的創(chuàng)建

    ? source table.sql直接執(zhí)行table.sql腳本文件

    ? source D:\course\03-MySQL\document\bjpowernode.sql

    ? 【要先use 數(shù)據(jù)庫;】

    ? 【注意:路徑不要有中文!!!】

    ? 【導(dǎo)入時出現(xiàn)問題

    ? **Unknown command ‘\J’. **

    ? **ERROR: Unknown command ‘\M’. **

    ? ERROR: Unknown command ‘\M’.

    ? 這還是因為windows下路徑的問題只需要改為把"“改為”/"】

    11、關(guān)于導(dǎo)入的這幾張表?

    ? mysql> show tables;

    ? dept:部門表

    mysql> select * from dept; +--------+------------+----------+ | DEPTNO | DNAME | LOC | +--------+------------+----------+ | 10 | ACCOUNTING | NEW YORK | | 20 | RESEARCH | DALLAS | | 30 | SALES | CHICAGO | | 40 | OPERATIONS | BOSTON | +--------+------------+----------+

    ? emp:員工表

    mysql> select * from emp; +-------+--------+-----------+------+------------+---------+---------+--------+ | EMPNO | ENAME | JOB | MGR | HIREDATE | SAL | COMM | DEPTNO | +-------+--------+-----------+------+------------+---------+---------+--------+ | 7369 | SMITH | CLERK | 7902 | 1980-12-17 | 800.00 | NULL | 20 | | 7499 | ALLEN | SALESMAN | 7698 | 1981-02-20 | 1600.00 | 300.00 | 30 | | 7521 | WARD | SALESMAN | 7698 | 1981-02-22 | 1250.00 | 500.00 | 30 | | 7566 | JONES | MANAGER | 7839 | 1981-04-02 | 2975.00 | NULL | 20 | | 7654 | MARTIN | SALESMAN | 7698 | 1981-09-28 | 1250.00 | 1400.00 | 30 | | 7698 | BLAKE | MANAGER | 7839 | 1981-05-01 | 2850.00 | NULL | 30 | | 7782 | CLARK | MANAGER | 7839 | 1981-06-09 | 2450.00 | NULL | 10 | | 7788 | SCOTT | ANALYST | 7566 | 1987-04-19 | 3000.00 | NULL | 20 | | 7839 | KING | PRESIDENT | NULL | 1981-11-17 | 5000.00 | NULL | 10 | | 7844 | TURNER | SALESMAN | 7698 | 1981-09-08 | 1500.00 | 0.00 | 30 | | 7876 | ADAMS | CLERK | 7788 | 1987-05-23 | 1100.00 | NULL | 20 | | 7900 | JAMES | CLERK | 7698 | 1981-12-03 | 950.00 | NULL | 30 | | 7902 | FORD | ANALYST | 7566 | 1981-12-03 | 3000.00 | NULL | 20 | | 7934 | MILLER | CLERK | 7782 | 1982-01-23 | 1300.00 | NULL | 10 | +-------+--------+-----------+------+------------+---------+---------+--------+

    ? salgrade:工資等級表

    mysql> select * from salgrade; +-------+-------+-------+ | GRADE | LOSAL | HISAL | +-------+-------+-------+ | 1 | 700 | 1200 | | 2 | 1201 | 1400 | | 3 | 1401 | 2000 | | 4 | 2001 | 3000 | | 5 | 3001 | 9999 | +-------+-------+-------+

    ? 查看表中數(shù)據(jù)?

    select * from 表名;

    ? 不看表中的數(shù)據(jù),只看表結(jié)構(gòu)?

    desc 表名;//【describe縮寫為desc】 mysql> desc emp; +----------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +----------+-------------+------+-----+---------+-------+ | EMPNO | int | NO | PRI | NULL | | | ENAME | varchar(10) | YES | | NULL | | | JOB | varchar(9) | YES | | NULL | | | MGR | int | YES | | NULL | | | HIREDATE | date | YES | | NULL | | | SAL | double(7,2) | YES | | NULL | | | COMM | double(7,2) | YES | | NULL | | | DEPTNO | int | YES | | NULL | | +----------+-------------+------+-----+---------+-------+

    13、簡單查詢

    13.1 查詢1個字段?
    select 字段名 from 表名; 【注意】:select和from是關(guān)鍵字,字段名和表名是標識符 【強調(diào)】:對所有SQL語句都是通用的,所有的SQL語句以“;”結(jié)尾SQL語句,不區(qū)分大小寫 查詢部門名字? select dname from dept;
    13.2 查詢2個字段,或多個字段?
    使用逗號隔開“,”查詢部門編號和部門名?select deptno, dname from dept;
    13.3 查詢所有字段?
    第一種方式:可以把所有字段都寫上第二種方式:可以使用*(先轉(zhuǎn)換為字段,再查詢)缺點:1-效率低;2- 可讀性差。在實際開發(fā)中不建議,在DOS命令中快速看一看全表數(shù)據(jù)可以采用這種方式
    13.4 給查詢的列起別名?
    select deptno, dname as deptname from dept;

    使用as關(guān)鍵字起別名

    【注意】:只是將顯示的查詢結(jié)果列名顯示為deptname,原列名還是叫dname

    【記住】:select語句永遠都不會進行修改操作(因為只負責(zé)查詢)

    as關(guān)鍵字可以省略嗎?可以的

    select deptno, dname deptname from dept;

    假設(shè)起別名的時候,別名里面有空格,怎么辦?【編譯器會報錯】

    select deptno, dname dept name from dept;

    怎么解決?【單引號】

    select deptno, dname ’dept name‘ from dept;//單引號select deptno, dname ”dept name“ from dept;//雙引號

    【注意】:在所有數(shù)據(jù)庫中,字符串統(tǒng)一使用單引號’ ‘括起來,單引號是標準。雙引號在oracle數(shù)據(jù)庫中用不了。但是在mysql中可以使用。

    【再次強調(diào)】:數(shù)據(jù)庫中的字符串都是采用單引號括起來的。單引號 是標準,雙引號不標準。

    13.5 計算員工年薪?sal*12
    mysql> select ename, sal*12 from emp;//字段可以使用數(shù)學(xué)表達式 mysql> select ename, sal*12 as '年薪' from emp; +--------+----------+ | ename | 年薪 | +--------+----------+ | SMITH | 9600.00 | | ALLEN | 19200.00 | | WARD | 15000.00 | | JONES | 35700.00 | | MARTIN | 15000.00 | | BLAKE | 34200.00 | | CLARK | 29400.00 | | SCOTT | 36000.00 | | KING | 60000.00 | | TURNER | 18000.00 | | ADAMS | 13200.00 | | JAMES | 11400.00 | | FORD | 36000.00 | | MILLER | 15600.00 | +--------+----------+

    14、條件查詢

    14.1 什么是條件查詢

    ? 不是將表中所有數(shù)據(jù)都查出來,而是查詢符合條件的數(shù)據(jù)。

    ? 語法格式:

    ? select

    ? 字段1,字段2,字段3,…

    ? from

    ? 表名

    ? where

    ? 條件;

    ? = 等于 薪資等于3000的員工的empno和ename

    mysql> select empno, ename from emp where sal = 3000; +-------+-------+ | empno | ename | +-------+-------+ | 7788 | SCOTT | | 7902 | FORD | +-------+-------+

    ? <>或!=不等于

    mysql> select empno, ename from emp where sal != 3000; +-------+--------+ | empno | ename | +-------+--------+ | 7369 | SMITH | | 7499 | ALLEN | | 7521 | WARD | | 7566 | JONES | | 7654 | MARTIN | | 7698 | BLAKE | | 7782 | CLARK | | 7839 | KING | | 7844 | TURNER | | 7876 | ADAMS | | 7900 | JAMES | | 7934 | MILLER |

    ? < <= > >=

    ? between … and … 兩個值之間【增區(qū)間】,等同于 >= and <=

    查詢薪資在3000和5000之間的員工信息?包括3000和5000 mysql> select empno, ename from emp where sal between 3000 and 5000; +-------+-------+ | empno | ename | +-------+-------+ | 7788 | SCOTT | | 7839 | KING | | 7902 | FORD | +-------+-------+mysql> select empno as '工號', ename as '姓名' from emp where sal >= 3000 and sal <= 5000; +------+-------+ | 工號 | 姓名 | +------+-------+ | 7788 | SCOTT | | 7839 | KING | | 7902 | FORD | +------+-------+

    ? is null 為 null (is not null,不為空)

    查詢哪些員工的津貼為null?mysql> select empno as '工號', ename as '姓名' from emp where comm is null; +------+--------+ | 工號 | 姓名 | +------+--------+ | 7369 | SMITH | | 7566 | JONES | | 7698 | BLAKE | | 7782 | CLARK | | 7788 | SCOTT | | 7839 | KING | | 7876 | ADAMS | | 7900 | JAMES | | 7902 | FORD | | 7934 | MILLER | +------+--------+

    ? and

    ? or

    查詢工作崗位是MANAGER并且工資大于2500的員工信息? mysql> select empno,ename,job,sal from emp where job = 'MANAGER'or 'SALESMAN' and sal > 2500; +-------+-------+---------+---------+ | empno | ename | job | sal | +-------+-------+---------+---------+ | 7566 | JONES | MANAGER | 2975.00 | | 7698 | BLAKE | MANAGER | 2850.00 | | 7782 | CLARK | MANAGER | 2450.00 |

    and和or同時出現(xiàn)的話,有優(yōu)先級問題嗎?【and優(yōu)先級高于or,故加( )】

    【在開發(fā)中不確定優(yōu)先級,就加( )】

    mysql> select * from emp where sal > 2500 and deptno = 10 or deptno = 20; +-------+-------+-----------+------+------------+---------+------+--------+ | EMPNO | ENAME | JOB | MGR | HIREDATE | SAL | COMM | DEPTNO | +-------+-------+-----------+------+------------+---------+------+--------+ | 7369 | SMITH | CLERK | 7902 | 1980-12-17 | 800.00 | NULL | 20 | | 7566 | JONES | MANAGER | 7839 | 1981-04-02 | 2975.00 | NULL | 20 | | 7788 | SCOTT | ANALYST | 7566 | 1987-04-19 | 3000.00 | NULL | 20 | | 7839 | KING | PRESIDENT | NULL | 1981-11-17 | 5000.00 | NULL | 10 | | 7876 | ADAMS | CLERK | 7788 | 1987-05-23 | 1100.00 | NULL | 20 | | 7902 | FORD | ANALYST | 7566 | 1981-12-03 | 3000.00 | NULL | 20 | +-------+-------+-----------+------+------------+---------+------+--------+mysql> select * from emp where sal > 2500 and (deptno = 10 or deptno = 20); +-------+-------+-----------+------+------------+---------+------+--------+ | EMPNO | ENAME | JOB | MGR | HIREDATE | SAL | COMM | DEPTNO | +-------+-------+-----------+------+------------+---------+------+--------+ | 7566 | JONES | MANAGER | 7839 | 1981-04-02 | 2975.00 | NULL | 20 | | 7788 | SCOTT | ANALYST | 7566 | 1987-04-19 | 3000.00 | NULL | 20 | | 7839 | KING | PRESIDENT | NULL | 1981-11-17 | 5000.00 | NULL | 10 | | 7902 | FORD | ANALYST | 7566 | 1981-12-03 | 3000.00 | NULL | 20 | +-------+-------+-----------+------+------------+---------+------+--------+

    ? in 包含,相當(dāng)于多個or(not in 不在這個范圍內(nèi))

    【in不是一個區(qū)間,in后面跟的是具體的元素】

    查詢工作崗位是MANAGER和SALSMAN的員工 mysql> select empno,ename,job,sal from emp where job = 'manager' or 'salesman';mysql> select empno,ename,job,sal from emp where job in( 'manager' , 'salesman'); +-------+--------+----------+---------+ | empno | ename | job | sal | +-------+--------+----------+---------+ | 7499 | ALLEN | SALESMAN | 1600.00 | | 7521 | WARD | SALESMAN | 1250.00 | | 7566 | JONES | MANAGER | 2975.00 | | 7654 | MARTIN | SALESMAN | 1250.00 | | 7698 | BLAKE | MANAGER | 2850.00 | | 7782 | CLARK | MANAGER | 2450.00 | | 7844 | TURNER | SALESMAN | 1500.00 | +-------+--------+----------+---------+

    ? not 可以去非,主要用在is 或 in中

    ? is null

    ? is not null

    ? in

    ? not in

    ? like like模糊查詢,支持%或下劃線匹配

    ? %匹配任意多個字符

    ? _下劃線:匹配任意一個字符

    ? (%是一個特殊字符,_也是一個特殊字符)

    找到名字中含有o的員工? select ename, empno from emp where ename like '%o%'; mysql> select ename, empno from emp where ename like '%o%'; +-------+-------+ | ename | empno | +-------+-------+ | JONES | 7566 | | SCOTT | 7788 | | FORD | 7902 | +-------+-------+ 找出名字以T結(jié)尾的員工? mysql> select ename, empno from emp where ename like '%T'; +-------+-------+ | ename | empno | +-------+-------+ | SCOTT | 7788 | +-------+-------+ 找出名字以姓A的員工? mysql> select ename, empno from emp where ename like 'A%'; +-------+-------+ | ename | empno | +-------+-------+ | ALLEN | 7499 | | ADAMS | 7876 | +-------+-------+ 找出名字以第三個字符是R的員工? mysql> select ename, empno from emp where ename like '__R%'; 找出名字中有下劃線'_'的員工?【 \ 轉(zhuǎn)移字符】 mysql> select name, no from t_student where name like '%\_%'; +----------+----+ | name | no | +----------+----+ | jack_son | 9 | +----------+----+

    15、排序

    15.1 排序查詢所有員工薪資?
    mysql> select ename, sal from emp order by sal;//【默認升序】 +--------+---------+ | ename | sal | +--------+---------+ | SMITH | 800.00 | | JAMES | 950.00 | | ADAMS | 1100.00 | | WARD | 1250.00 | | MARTIN | 1250.00 | | MILLER | 1300.00 | | TURNER | 1500.00 | | ALLEN | 1600.00 | | CLARK | 2450.00 | | BLAKE | 2850.00 | | JONES | 2975.00 | | SCOTT | 3000.00 | | FORD | 3000.00 | | KING | 5000.00 | +--------+---------+、 【指定降序】 mysql> select ename, sal from emp order by sal desc;//【descend】 mysql> select ename, sal from emp order by sal*-1;//【descend】 【指定升序】 mysql> select ename, sal from emp order by sal asc;【默認升序】
    15.2 可以兩個字段排序嗎?或者說按照多個字段排序?
    查詢員工名字和薪資,要求按照【薪資升序】,【如果薪資一樣】,則按照【名字降序】 mysql> select ename,sal from emp order by sal asc, ename desc; +--------+---------+ | ename | sal | +--------+---------+ | SMITH | 800.00 | | JAMES | 950.00 | | ADAMS | 1100.00 | | WARD | 1250.00 | | MARTIN | 1250.00 | | MILLER | 1300.00 | | TURNER | 1500.00 | | ALLEN | 1600.00 | | CLARK | 2450.00 | | BLAKE | 2850.00 | | JONES | 2975.00 | | SCOTT | 3000.00 | | FORD | 3000.00 | | KING | 5000.00 | +--------+---------+
    15.3 了解:根據(jù)字段的位置也可以排序

    【不健壯】:開發(fā)中不建議這樣寫,因為列的順序容易改變

    按照查詢ename和sal,【根據(jù)第2列進行排序】 mysql> select ename, sal from emp order by 2; +--------+---------+ | ename | sal | +--------+---------+ | SMITH | 800.00 | | JAMES | 950.00 | | ADAMS | 1100.00 | | WARD | 1250.00 | | MARTIN | 1250.00 | | MILLER | 1300.00 | | TURNER | 1500.00 | | ALLEN | 1600.00 | | CLARK | 2450.00 | | BLAKE | 2850.00 | | JONES | 2975.00 | | SCOTT | 3000.00 | | FORD | 3000.00 | | KING | 5000.00 | +--------+---------+

    16、綜合一點的案例

    16.1 找出工資在1250到3000之間的員工信息,要求按照薪資降序排列
    mysql> select empno, ename, job, sal from emp where sal between 1250 and 3000 order by sal desc; +-------+--------+----------+---------+ | empno | ename | job | sal | +-------+--------+----------+---------+ | 7788 | SCOTT | ANALYST | 3000.00 | | 7902 | FORD | ANALYST | 3000.00 | | 7566 | JONES | MANAGER | 2975.00 | | 7698 | BLAKE | MANAGER | 2850.00 | | 7782 | CLARK | MANAGER | 2450.00 | | 7499 | ALLEN | SALESMAN | 1600.00 | | 7844 | TURNER | SALESMAN | 1500.00 | | 7934 | MILLER | CLERK | 1300.00 | | 7521 | WARD | SALESMAN | 1250.00 | | 7654 | MARTIN | SALESMAN | 1250.00 | +-------+--------+----------+---------+ 關(guān)鍵字順序不能變:select...from...where...order by...以上語句的執(zhí)行順序必須掌握:第一步:from第二步:where第三步:select第四步:order by(排序總是在最后執(zhí)行!)

    17、數(shù)據(jù)處理函數(shù)/單行處理函數(shù)

    17.1 數(shù)據(jù)處理函數(shù)又被稱為單行處理函數(shù)

    單行處理函數(shù)特點:一個輸入對應(yīng)一個輸出(SISO)

    和單行處理函數(shù)相對的是:多行處理函數(shù),多個輸入對應(yīng)一個輸出(MISO)。

    17.2 常見單行處理函數(shù)

    lower轉(zhuǎn)換大小寫函數(shù)(SISO)

    mysql> select lower(ename) from emp; 【14個輸入,最后還是14個輸出】 +--------------+ | lower(ename) | +--------------+ | smith | | allen | | ward | | jones | | martin | | blake | | clark | | scott | | king | | turner | | adams | | james | | ford | | miller | +--------------+

    upper轉(zhuǎn)換大小寫(SISO)

    mysql> select upper(ename) from emp; +--------------+ | upper(ename) | +--------------+ | SMITH | | ALLEN | | WARD | | JONES | | MARTIN | | BLAKE | | CLARK | | SCOTT | | KING | | TURNER | | ADAMS | | JAMES | | FORD | | MILLER | +--------------+

    substr取子串(substr(被截取的字符串, 起始下標, 截取長度))

    【不寫長度,默認截取到最后】

    【注意】:下標從1開始,沒有0

    找出員工名字第一個字符是A的員工信息?

    第一種方式:模糊查詢 mysql> select empno, ename, job, sal from emp where substr(ename, 1, 1) = 'A'; 第二種方式:where中substr函數(shù) mysql> select empno, ename, job, sal from emp where ename like 'A%'; +-------+-------+----------+---------+ | empno | ename | job | sal | +-------+-------+----------+---------+ | 7499 | ALLEN | SALESMAN | 1600.00 | | 7876 | ADAMS | CLERK | 1100.00 | +-------+-------+----------+---------+

    首字母大寫?【concat、upper、lower】

    mysql> select concat(upper(substr(ename, 1, 1)),lower(substr(ename,2))) as result from emp;mysql> select concat(upper(substr(ename, 1, 1)),lower(substr(ename,2,length(ename)-1))) as result from emp;+--------+ | result | +--------+ | Smith | | Allen | | Ward | | Jones | | Martin | | Blake | | Clark | | Scott | | King | | Turner | | Adams | | James | | Ford | | Miller | +--------+

    concat函數(shù)進行字符串拼接

    select concat(empno, ename) from emp;

    length取長度

    mysql> select length(ename) enameLength from emp; +-------------+ | enameLength | +-------------+ | 5 | | 5 | | 4 | | 5 | | 6 | | 5 | | 5 | | 5 | | 4 | | 6 | | 5 | | 5 | | 4 | | 6 | +-------------+

    trim去空格

    mysql> select * from emp where ename = trim(' King'); +-------+-------+-----------+------+------------+---------+------+--------+ | EMPNO | ENAME | JOB | MGR | HIREDATE | SAL | COMM | DEPTNO | +-------+-------+-----------+------+------------+---------+------+--------+ | 7839 | KING | PRESIDENT | NULL | 1981-11-17 | 5000.00 | NULL | 10 | +-------+-------+-----------+------+------------+---------+------+--------+ 1 row in set (0.00 sec)

    str_to_date將字符串轉(zhuǎn)換成日期

    date_format格式化日期

    format設(shè)置千分位

    round(數(shù)據(jù),小數(shù)點后位數(shù)) 【四舍五入】【小于0,則向小數(shù)點前置0】

    【select 后跟某個表的字段名,也可以跟字面量和字面值】 select 字段 from 表名; select ename from emp; select abc from emp;//報錯 select 'abc' from emp;//有幾行記錄,生成幾行 select 1000 from emp;//有幾行記錄,生成幾行 mysql> select 'abc' from dept; +-----+ | abc | +-----+ | abc | | abc | | abc | | abc | +-----+mysql> select round(1234.567, 1) result from dept; +--------+ | result | +--------+ | 1234.6 | | 1234.6 | | 1234.6 | | 1234.6 | +--------+

    rand()生成隨機數(shù)

    mysql> select rand()*100 result from emp; +--------------------+ | result | +--------------------+ | 66.96882645317244 | | 55.673224251413004 | | 77.45964497091215 | | 20.278555173686293 | | 69.01384402905948 | | 84.23355769760306 | | 14.126259474201369 | | 17.930627351562144 | | 47.27436140857112 | | 82.57992806153365 | | 71.0765591553194 | | 7.6430146653605755 | | 24.98539893420916 | | 1.997953748328568 | +--------------------+ mysql> select empno, ename from emp where rand() > 0.5; +-------+--------+ | empno | ename | +-------+--------+ | 7499 | ALLEN | | 7566 | JONES | | 7654 | MARTIN | | 7782 | CLARK | | 7788 | SCOTT | | 7902 | FORD | | 7934 | MILLER | +-------+--------+

    ifnull(數(shù)據(jù),為Null時當(dāng)作哪個值) 可以將null轉(zhuǎn)換為一個具體值

    ifnull是空處理函數(shù),專門處理空的

    【注意】:因為在所有數(shù)據(jù)庫中,只要null參與的數(shù)學(xué)運算,最終結(jié)果就一定是null。為了避免這個現(xiàn)象,需要使用ifnull函數(shù)。

    計算每個月供的年薪? 年薪 = (月薪 + 月補助) * 12; mysql> select empno, ename, (sal + comm) * 12 as yearsal from emp; +-------+--------+----------+ | empno | ename | yearsal | +-------+--------+----------+ | 7369 | SMITH | NULL | | 7499 | ALLEN | 22800.00 | | 7521 | WARD | 21000.00 | | 7566 | JONES | NULL | | 7654 | MARTIN | 31800.00 | | 7698 | BLAKE | NULL | | 7782 | CLARK | NULL | | 7788 | SCOTT | NULL | | 7839 | KING | NULL | | 7844 | TURNER | 18000.00 | | 7876 | ADAMS | NULL | | 7900 | JAMES | NULL | | 7902 | FORD | NULL | | 7934 | MILLER | NULL | +-------+--------+----------+ mysql> select empno, ename, (sal + ifnull(comm,0)) * 12 as yearsal from emp; +-------+--------+----------+ | empno | ename | yearsal | +-------+--------+----------+ | 7369 | SMITH | 9600.00 | | 7499 | ALLEN | 22800.00 | | 7521 | WARD | 21000.00 | | 7566 | JONES | 35700.00 | | 7654 | MARTIN | 31800.00 | | 7698 | BLAKE | 34200.00 | | 7782 | CLARK | 29400.00 | | 7788 | SCOTT | 36000.00 | | 7839 | KING | 60000.00 | | 7844 | TURNER | 18000.00 | | 7876 | ADAMS | 13200.00 | | 7900 | JAMES | 11400.00 | | 7902 | FORD | 36000.00 | | 7934 | MILLER | 15600.00 | +-------+--------+----------+

    case…when…then…when…then…else…end【相當(dāng)于switch case default】

    當(dāng)員工崗位是MANAGER時,工資上調(diào)10%,為SALESMAN時上調(diào)50% mysql> select empno, ename, job, sal, case job when 'manager' then sal*1.1 when 'salesman' then sal*1.5 else sal end newsal from emp; +-------+--------+-----------+---------+---------+ | empno | ename | job | sal | newsal | +-------+--------+-----------+---------+---------+ | 7369 | SMITH | CLERK | 800.00 | 800.00 | | 7499 | ALLEN | SALESMAN | 1600.00 | 2400.00 | | 7521 | WARD | SALESMAN | 1250.00 | 1875.00 | | 7566 | JONES | MANAGER | 2975.00 | 3272.50 | | 7654 | MARTIN | SALESMAN | 1250.00 | 1875.00 | | 7698 | BLAKE | MANAGER | 2850.00 | 3135.00 | | 7782 | CLARK | MANAGER | 2450.00 | 2695.00 | | 7788 | SCOTT | ANALYST | 3000.00 | 3000.00 | | 7839 | KING | PRESIDENT | 5000.00 | 5000.00 | | 7844 | TURNER | SALESMAN | 1500.00 | 2250.00 | | 7876 | ADAMS | CLERK | 1100.00 | 1100.00 | | 7900 | JAMES | CLERK | 950.00 | 950.00 | | 7902 | FORD | ANALYST | 3000.00 | 3000.00 | | 7934 | MILLER | CLERK | 1300.00 | 1300.00 | +-------+--------+-----------+---------+---------+

    18、分組函數(shù)(多行處理函數(shù))

    特點:

  • 輸出多行,輸出一行

  • 分組函數(shù)自動忽略null(認為沒有)

  • 分組函數(shù)中count(*):【統(tǒng)計總表行不為null的元素總數(shù)】和count(字段):【統(tǒng)計該字段下所有不為null的元素的總數(shù)】

  • 數(shù)據(jù)庫中不可能存在某行記錄列元素均為null

  • 分組函數(shù)不能直接使用在where子句中

    mysql> select empno from emp where sal > sum(sal);//報錯
  • 所有的分組函數(shù)可以組合使用,不能嵌套

    mysql> select sum(sal), count(sal) from emp; +----------+------------+ | sum(sal) | count(sal) | +----------+------------+ | 29025.00 | 14 | +----------+-----------+
  • 【5個:

    ? count計數(shù)

    ? sum求和

    ? avg平均值

    ? max最大值

    ? min最大值】

    【注意】:分組函數(shù)在使用前必須先進行分組,再使用。否則,整張表作為一組。

    找出最高工資?

    mysql> select empno, ename, max(sal) from emp; +-------+-------+----------+ | empno | ename | max(sal) | +-------+-------+----------+ | 7369 | SMITH | 5000.00 | +-------+-------+----------+

    找出最低工資?

    mysql> select empno, ename, min(sal) from emp; +-------+-------+----------+ | empno | ename | min(sal) | +-------+-------+----------+ | 7369 | SMITH | 800.00 | +-------+-------+----------+

    計算工資和?

    mysql> select sum(comm) from emp; +-----------+ | sum(comm) | +-----------+ | 2200.00 | +-----------+

    計算平均工資?

    mysql> select empno, ename, avg(sal) from emp; +-------+-------+-------------+ | empno | ename | avg(sal) | +-------+-------+-------------+ | 7369 | SMITH | 2073.214286 | +-------+-------+-------------+ mysql> select avg(ifnull(comm,0)) from emp; +---------------------+ | avg(ifnull(comm,0)) | +---------------------+ | 157.142857 | +---------------------+

    統(tǒng)計員工數(shù)量?

    mysql> select empno, ename, count(sal) umpNumber from emp; +-------+-------+-----------+ | empno | ename | umpNumber | +-------+-------+-----------+ | 7369 | SMITH | 14 | +-------+-------+-----------+ mysql> select count(comm) from emp; +-------------+ | count(comm) | +-------------+ | 4 | +-------------+

    19、分組查詢(非常重要:五顆星

    19.1 什么是分組查詢

    在實際應(yīng)用中,可能有這樣需求,需要先分組【比如按照工作崗位分組】,再對每一組數(shù)據(jù)進行操作,這時需要分組查詢。不分組默認整個表為1組

    select... from.... group by....

    ? 計算每個部門的工資和?

    ? 計算每個工作崗位的平均薪資?

    ? 找出每個工作崗位的最高薪資?

    ? …

    19.2 將之前關(guān)鍵字全部組合在一起,看他們的執(zhí)行順序
    select... from... where... group by... order by...

    執(zhí)行順序不能顛倒,需要記憶:【具有優(yōu)先級,不能顛倒】

    1. from 2. where 3. group by 4. order by 5. select

    為什么分組函數(shù)不能直接使用在where后面?

    mysql> select empno from emp where sal > sum(sal);//報錯

    因為分組函數(shù)在使用的時候必須先分組才能使用,【where執(zhí)行的時候還沒有分組】,所以where后面不能出現(xiàn)分組函數(shù),【出現(xiàn)了語法錯誤】

    select sum(sal) from emp;

    這個沒分組,為什么sum()可以使用?

    因為select在group by之后執(zhí)行

    19.3 找出每個工作崗位的工資和?

    【思路】:按照工作崗位分組,然后對工資求和

    mysql> select job,sum(sal) from emp group by job; +-----------+----------+ | job | sum(sal) | +-----------+----------+ | CLERK | 4150.00 | | SALESMAN | 5600.00 | | MANAGER | 8275.00 | | ANALYST | 6000.00 | | PRESIDENT | 5000.00 | +-----------+----------+

    執(zhí)行順序?

    1. 先從emp標中查詢數(shù)據(jù) 2. 過呢據(jù)job字段進行分組 3. 然后對每一組的數(shù)據(jù)進行sum(sal)

    下列語句在mysql中可以執(zhí)行,但是毫無意義。在oracle中會報錯(mysqll語法相對松散)

    mysql> select ename, job, sum(sal) from emp group by job; +-------+-----------+----------+ | ename | job | sum(sal) | +-------+-----------+----------+ | SMITH | CLERK | 4150.00 | | ALLEN | SALESMAN | 5600.00 | | JONES | MANAGER | 8275.00 | | SCOTT | ANALYST | 6000.00 | | KING | PRESIDENT | 5000.00 | +-------+-----------+----------+

    【重點結(jié)論】:

  • 在一條select語句中,如果有g(shù)roup by語句,那么select后面只能跟:
  • 參加分組的字段
  • 分組函數(shù)
  • 其它的一律不能跟
  • 19.4 找出部門的最高薪資

    【思路】:先按照部門編號分組,求每一組的最大值

    【表連接】:這樣能找到最大值薪資是誰。通過臨時表進行連接

    mysql> select deptno, avg(sal),sum(sal), max(sal) from emp group by deptno order by deptno [desc]; +--------+-------------+----------+----------+ | deptno | avg(sal) | sum(sal) | max(sal) | +--------+-------------+----------+----------+ | 10 | 2916.666667 | 8750.00 | 5000.00 | | 20 | 2175.000000 | 10875.00 | 3000.00 | | 30 | 1566.666667 | 9400.00 | 2850.00 | +--------+-------------+----------+----------+
    19.5 找出每個部門,不同工作崗位的最高薪資

    【思路】:同時分組。先對部門分組,再對崗位分組

    【技巧】:多個字段聯(lián)合成1個字段

    select deptno, job, max(sal) fromemp group bydeptno, job; mysql> select deptno, job, max(sal) from emp group by deptno,job order by deptno; +--------+-----------+----------+ | deptno | job | max(sal) | +--------+-----------+----------+ | 10 | CLERK | 1300.00 | | 10 | MANAGER | 2450.00 | | 10 | PRESIDENT | 5000.00 | | 20 | ANALYST | 3000.00 | | 20 | CLERK | 1100.00 | | 20 | MANAGER | 2975.00 | | 30 | CLERK | 950.00 | | 30 | MANAGER | 2850.00 | | 30 | SALESMAN | 1600.00 | +--------+-----------+----------+
    19.6 找出每個部門最高薪資,要求顯示最高薪資大于3000的?

    【思路1】:先分組再篩選

  • 按照部門編號分組group by,求每一組最大值max
  • mysql> select deptno, max(sal) > 3000 from emp group by deptno; +--------+-----------------+ | deptno | max(sal) > 3000 | +--------+-----------------+ | 20 | 0 | | 30 | 0 | | 10 | 1 | +--------+-----------------+ mysql> select deptno, max(sal) from emp group by deptno; +--------+----------+ | deptno | max(sal) | +--------+----------+ | 20 | 3000.00 | | 30 | 2850.00 | | 10 | 5000.00 | +--------+----------+
  • 要求顯示最高薪資大于3000
  • selectdeptno, max(sal) fromemp group bydeptno havingmax(sal) > 3000;mysql> select deptno, max(sal) from emp group by deptno having max(sal) > 3000; +--------+----------+ | deptno | max(sal) | +--------+----------+ | 10 | 5000.00 | +--------+----------+

    【思路2】:先篩選再分組

    實際上思路1效率比較低,可以先將>3000的找出來,再分組

    selectdeptno, max(sal) fromemp wheresal > 3000 group bydeptno;mysql> select empno, max(sal) from emp where max(sal) > 3000 group by deptno; ERROR 1111 (HY000): Invalid use of group function 【屬于先where再max分組,報錯】mysql> select empno, max(sal) from emp where sal > 3000 group by deptno; +-------+----------+ | empno | max(sal) | +-------+----------+ | 7839 | 5000.00 | +-------+----------+ 1 row in set (0.00 sec)

    【where效率高于having】

    19.7 where沒辦法處理的情況?

    找出每個部門的平均薪資高于2500的工作

    【where后面只能用表里已知的字段】

    【思路】:不能不使用having

  • 找出每個部門的平均【分組了】薪資
  • mysql> select deptno, avg(sal) from emp group by deptno; +--------+-------------+ | deptno | avg(sal) | +--------+-------------+ | 20 | 2175.000000 | | 30 | 1566.666667 | | 10 | 2916.666667 | +--------+-------------+
  • 要求顯示平均薪資【分組了】高于2500的
  • mysql> select deptno, avg(sal) from emp group by deptno having avg(sal) > 2500; +--------+-------------+ | deptno | avg(sal) | +--------+-------------+ | 10 | 2916.666667 | +--------+-------------+

    20、大總結(jié)(單表的查詢學(xué)完了)

    select... where... group by... having... order by... 語法只能嚴格按照上述順序,不能顛倒執(zhí)行順序: 1. from 2. where 3. group by 4. having 5. select 6. order by執(zhí)行的邏輯順序: 1. from 某張表中查詢數(shù)據(jù); 2. 先經(jīng)過 where 條件【表中已存在的字段】篩選出有價值的數(shù)據(jù); 3. 對這些有價值的數(shù)據(jù)進行分組 group by, 4. 分組后可以繼續(xù)用 having 繼續(xù)篩選; 5. 接著使用 select 查詢出來; 6. 最后用 order by排序。

    【綜合題】:找出部門的每個崗位的平均薪資,要求顯示平均薪資大于1500的,除了manager崗位之外,要求按照平均薪資降序排列。

    mysql> select deptno, job, avg(sal) from emp where job <> 'manager' group by job having avg(sal) > 1500 order by avg(sal) desc; +--------+-----------+-------------+ | deptno | job | avg(sal) | +--------+-----------+-------------+ | 10 | PRESIDENT | 5000.000000 | | 20 | ANALYST | 3000.000000 | +--------+-----------+-------------+ mysql> select deptno, job, avg(sal) avgSal from emp where job not in ( 'manager') group by job having avg(sal) > 1500 order by avgSal desc; +--------+-----------+-------------+ | deptno | job | avgSal | +--------+-----------+-------------+ | 10 | PRESIDENT | 5000.000000 | | 20 | ANALYST | 3000.000000 | +--------+-----------+-------------+

    20、【回顧】

    DBMS ---> SQL ---> DBMySQL(開源免費)、oracle(世界上速度最快、安全級別最高、后期服務(wù)昂貴)、db2、sybase...是DBMSmysql安裝:port 3306用戶名:root密碼:123456設(shè)置字符集:utf8SQL 分類DQL(Data Query Language 數(shù)據(jù)查詢語言): select,只查詢不會修改表DML(Data Manipulation Language 數(shù)據(jù)操縱語言->表數(shù)據(jù)): insert, delete, updateDDL(Data Definition Language 數(shù)據(jù)定義語言->表結(jié)構(gòu)): create, drop, alterTCL(Transactional Control Language 事務(wù)控制語言): commit, rollbackDCL(Data Control Language 數(shù)據(jù)控制語言->權(quán)限): grant, revoke導(dǎo)入演示數(shù)據(jù)1. 連接MySQL2. 創(chuàng)建'bjpowernode'數(shù)據(jù)庫create database bjpowernode;3. 選擇數(shù)據(jù)庫use bjpowernode;4. source導(dǎo)入數(shù)據(jù)庫source D:\course\03-MySQL\document\bjpowernode.sql5. 查看表結(jié)構(gòu)desc dept;常用MySQL命令【 select 語句總結(jié)】select ...from...where...group by...having...order by...以上關(guān)鍵字只能按照這個順序來,不能顛倒。執(zhí)行順序?1. from2. where3. group by4. having5. select6. order by

    二、Day 02[最重要]

    1、去除重復(fù)記錄

    【注意】:元彪數(shù)據(jù)不會被修改,只是修改了查詢結(jié)果

    【關(guān)鍵字】:distinct,只能出現(xiàn)在所有字段的最前方,表示后面的字段聯(lián)合起來去重

    mysql> select distinct ename, job, deptno from emp; +--------+-----------+--------+ | ename | job | deptno | +--------+-----------+--------+ | SMITH | CLERK | 20 | | ALLEN | SALESMAN | 30 | | WARD | SALESMAN | 30 | | JONES | MANAGER | 20 | | MARTIN | SALESMAN | 30 | | BLAKE | MANAGER | 30 | | CLARK | MANAGER | 10 | | SCOTT | ANALYST | 20 | | KING | PRESIDENT | 10 | | TURNER | SALESMAN | 30 | | ADAMS | CLERK | 20 | | JAMES | CLERK | 30 | | FORD | ANALYST | 20 | | MILLER | CLERK | 10 | +--------+-----------+--------+

    統(tǒng)計工作崗位的數(shù)量?

    mysql> select count(distinct job) from emp; +---------------------+ | count(distinct job) | +---------------------+ | 5 | +---------------------+

    2、連接查詢

    2.1 什么是連接查詢

    從一張表中單獨查詢,稱為單表查詢

    emp表和dept表聯(lián)合起來查詢數(shù)據(jù),從emp表中取員工名字,從dept表中查詢工作地點

    這種跨表查詢,多張表聯(lián)合起來查詢數(shù)據(jù),被稱為【連接查詢】

    2.2 連接查詢的分類?

    根據(jù)語法的年代分類:

    SQL92:1992年出現(xiàn)的語法

    SQL99:1999年出現(xiàn)的語法【重點學(xué)習(xí)】

    根據(jù)表連接的方式分類:

  • 內(nèi)連接 【完全能匹配條件的數(shù)據(jù),查詢出來】
  • 等值連接
  • 非等值連接
  • 自連接
  • 外連接 【外連接】:相當(dāng)于內(nèi)連接+主表沒有匹配的行
  • 左外連接(左連接)
  • 右外連接(右連接)
  • 全連接(不講)
  • 2.3 當(dāng)兩張表進行連接查詢時,沒有任何條件的限制會發(fā)生什么現(xiàn)象?

    【案例】:查詢每個員工所在部門名稱

  • 當(dāng)兩張表進行連接查詢,沒有任何條件限制的時候,最終查詢結(jié)果條數(shù)是兩個表條數(shù)的乘積。

    【笛卡爾積現(xiàn)象】:查詢多個表時,沒有添加有效的條件,導(dǎo)致多個表所有行完全連接。

  • mysql> select ename, dname from emp, dept; +--------+------------+ | ename | dname | +--------+------------+ | SMITH | OPERATIONS | | SMITH | SALES | | SMITH | RESEARCH | | SMITH | ACCOUNTING | ... | MILLER | OPERATIONS | | MILLER | SALES | | MILLER | RESEARCH | | MILLER | ACCOUNTING | +--------+------------+ 14*4 = 56 rows in set (0.00 sec)
    2.4 避免笛卡爾積現(xiàn)象
  • 連接時加條件 where ,滿足這個條件的才會被篩選出來!
  • 【匹配次數(shù)并沒有被減少,還是匹配了56次,只是被篩選出了1/4】

    【需要找到兩個表中重合的鍵】

    mysql> select ename, dname from emp, dept where emp.deptno = dept.deptno; +--------+------------+ | ename | dname | +--------+------------+ | SMITH | RESEARCH | | ALLEN | SALES | | WARD | SALES | | JONES | RESEARCH | | MARTIN | SALES | | BLAKE | SALES | | CLARK | ACCOUNTING | | SCOTT | RESEARCH | | KING | ACCOUNTING | | TURNER | SALES | | ADAMS | RESEARCH | | JAMES | SALES | | FORD | RESEARCH | | MILLER | ACCOUNTING | +--------+------------+ 14 rows in set (0.00 sec)

    【起別名】:表中起別名,對查詢范圍進行限制。很重要。效率問題。

    mysql> select e.ename, d.dname from emp e, dept d where e.deptno = d.deptno;//92語法 +--------+------------+ | ename | dname | +--------+------------+ | SMITH | RESEARCH | | ALLEN | SALES | | WARD | SALES | | JONES | RESEARCH | | MARTIN | SALES | | BLAKE | SALES | | CLARK | ACCOUNTING | | SCOTT | RESEARCH | | KING | ACCOUNTING | | TURNER | SALES | | ADAMS | RESEARCH | | JAMES | SALES | | FORD | RESEARCH | | MILLER | ACCOUNTING | +--------+------------+

    【注意】:由笛卡爾積現(xiàn)象得出:表的連接次數(shù)越多,效率越低,盡量避免表的連接次數(shù)。

    2.5 內(nèi)連接:等值連接

    【案例】:查詢每個員工所在部門名稱,顯示員工名和部門名?

    【思路】:emp e和dept d表進行連接,條件是:e.deptno = d.deptno

    SQL:1992select e.ename,d.dnamefromemp e, dept dwheree.deptno = d.deptno and 后面加條件;#條件是等量關(guān)系,故為等值連接 【缺點】:結(jié)構(gòu)不清晰,表的連接條件,和后期進一步篩選的條件,都放到了where后面。SQL:1999【表連接 和 表篩選 分離】#inner可以省略,寫的話可讀性更好select e.ename,d.dnamefromemp einner joindept done.deptno = d.deptno//條件是等量關(guān)系,故為等值連接where篩選條件 【優(yōu)點】:表連接的條件是獨立的,連接之后如果還需要繼續(xù)篩選,再往后繼續(xù)添加 where
    2.6 內(nèi)連接:非等值連接

    【案例】:找出每個員工的薪資等級,要求顯示員工名、薪資、薪資等級

    【思路】:先看每個表結(jié)構(gòu),再思考如何選取

    mysql> select * from salgrade; +-------+-------+-------+ | GRADE | LOSAL | HISAL | +-------+-------+-------+ | 1 | 700 | 1200 | | 2 | 1201 | 1400 | | 3 | 1401 | 2000 | | 4 | 2001 | 3000 | | 5 | 3001 | 9999 | +-------+-------+-------+ mysql> select e.ename, e.sal, s.grade from emp e join salgrade s on e.sal between s.losal and s.hisal; +--------+---------+-------+ | ename | sal | grade | +--------+---------+-------+ | SMITH | 800.00 | 1 | | ALLEN | 1600.00 | 3 | | WARD | 1250.00 | 2 | | JONES | 2975.00 | 4 | | MARTIN | 1250.00 | 2 | | BLAKE | 2850.00 | 4 | | CLARK | 2450.00 | 4 | | SCOTT | 3000.00 | 4 | | KING | 5000.00 | 5 | | TURNER | 1500.00 | 3 | | ADAMS | 1100.00 | 1 | | JAMES | 950.00 | 1 | | FORD | 3000.00 | 4 | | MILLER | 1300.00 | 2 | +--------+---------+-------+ 14 rows in set (0.00 sec)
    2.7 內(nèi)連接之自連接

    【案例】:查詢員工的上級領(lǐng)導(dǎo),要求顯示員工名對應(yīng)的領(lǐng)導(dǎo)名

    【思路】:自己表連接自己表(看作:1個員工表,1個領(lǐng)導(dǎo)表)

    select e1.empno '員工編號', e1.ename '員工名', e2.empno '領(lǐng)導(dǎo)編號', e2.ename '領(lǐng)導(dǎo)名' from emp e1 join emp e2 on e1.mgr = e2.empno; +----------+--------+----------+--------+ | 員工編號 | 員工名 | 領(lǐng)導(dǎo)編號 | 領(lǐng)導(dǎo)名 | +----------+--------+----------+--------+ | 7369 | SMITH | 7902 | FORD | | 7499 | ALLEN | 7698 | BLAKE | | 7521 | WARD | 7698 | BLAKE | | 7566 | JONES | 7839 | KING | | 7654 | MARTIN | 7698 | BLAKE | | 7698 | BLAKE | 7839 | KING | | 7782 | CLARK | 7839 | KING | | 7788 | SCOTT | 7566 | JONES | | 7844 | TURNER | 7698 | BLAKE | | 7876 | ADAMS | 7788 | SCOTT | | 7900 | JAMES | 7698 | BLAKE | | 7902 | FORD | 7566 | JONES | | 7934 | MILLER | 7782 | CLARK | +----------+--------+----------+--------+ 13 rows in set (0.00 sec)
    2.8 外連接:右外連接、左外連接

    思考:外連接的查詢結(jié)果條目一定是 >= 內(nèi)連接的結(jié)果條目:(外連接=內(nèi)連接+主表沒有匹配的行)

    mysql> select * from emp; +-------+--------+-----------+------+------------+---------+---------+--------+ | EMPNO | ENAME | JOB | MGR | HIREDATE | SAL | COMM | DEPTNO | +-------+--------+-----------+------+------------+---------+---------+--------+ | 7369 | SMITH | CLERK | 7902 | 1980-12-17 | 800.00 | NULL | 20 | | 7499 | ALLEN | SALESMAN | 7698 | 1981-02-20 | 1600.00 | 300.00 | 30 | | 7521 | WARD | SALESMAN | 7698 | 1981-02-22 | 1250.00 | 500.00 | 30 | | 7566 | JONES | MANAGER | 7839 | 1981-04-02 | 2975.00 | NULL | 20 | | 7654 | MARTIN | SALESMAN | 7698 | 1981-09-28 | 1250.00 | 1400.00 | 30 | | 7698 | BLAKE | MANAGER | 7839 | 1981-05-01 | 2850.00 | NULL | 30 | | 7782 | CLARK | MANAGER | 7839 | 1981-06-09 | 2450.00 | NULL | 10 | | 7788 | SCOTT | ANALYST | 7566 | 1987-04-19 | 3000.00 | NULL | 20 | | 7839 | KING | PRESIDENT | NULL | 1981-11-17 | 5000.00 | NULL | 10 | | 7844 | TURNER | SALESMAN | 7698 | 1981-09-08 | 1500.00 | 0.00 | 30 | | 7876 | ADAMS | CLERK | 7788 | 1987-05-23 | 1100.00 | NULL | 20 | | 7900 | JAMES | CLERK | 7698 | 1981-12-03 | 950.00 | NULL | 30 | | 7902 | FORD | ANALYST | 7566 | 1981-12-03 | 3000.00 | NULL | 20 | | 7934 | MILLER | CLERK | 7782 | 1982-01-23 | 1300.00 | NULL | 10 | +-------+--------+-----------+------+------------+---------+---------+--------+ 14 rows in set (0.00 sec) mysql> select * from dept; +--------+------------+----------+ | DEPTNO | DNAME | LOC | +--------+------------+----------+ | 10 | ACCOUNTING | NEW YORK | | 20 | RESEARCH | DALLAS | | 30 | SALES | CHICAGO || 40 | OPERATIONS | BOSTON | +--------+------------+----------+ 4 rows in set (0.00 sec)

    【外連接】:相當(dāng)于內(nèi)連接+主表沒有匹配的行, outer 可省略,加了可讀性好

    【right】:將 join 關(guān)鍵字右邊的這張表看成主表,主要是為了將這張表中的數(shù)據(jù)全部都查詢出來,捎帶著關(guān)聯(lián)查詢左邊的表。在外連接中,兩張表連接產(chǎn)生了主次關(guān)系。

    【left】:…左邊…

    任意左連接和右連接可以相互轉(zhuǎn)換

    【右外連接】 selecte.ename, d.dname fromemp e right outer join dept d on e.deptno = d.deptno; +--------+------------+ | ename | dname | +--------+------------+ | MILLER | ACCOUNTING | | KING | ACCOUNTING | | CLARK | ACCOUNTING | | FORD | RESEARCH | | ADAMS | RESEARCH | | SCOTT | RESEARCH | | JONES | RESEARCH | | SMITH | RESEARCH | | JAMES | SALES | | TURNER | SALES | | BLAKE | SALES | | MARTIN | SALES | | WARD | SALES | | ALLEN | SALES | | NULL | OPERATIONS | +--------+------------+ 15 rows in set (0.00 sec) 【左外連接】 selecte.ename, d.dname fromemp e left outer join dept d on e.deptno = d.deptno; +--------+------------+ | ename | dname | +--------+------------+ | SMITH | RESEARCH | | ALLEN | SALES | | WARD | SALES | | JONES | RESEARCH | | MARTIN | SALES | | BLAKE | SALES | | CLARK | ACCOUNTING | | SCOTT | RESEARCH | | KING | ACCOUNTING | | TURNER | SALES | | ADAMS | RESEARCH | | JAMES | SALES | | FORD | RESEARCH | | MILLER | ACCOUNTING | +--------+------------+ 14 rows in set (0.00 sec)

    【案例】:查詢每個員工的上級領(lǐng)導(dǎo),要求顯示所有員工的名字和領(lǐng)導(dǎo)名

    【思路】:相比于外連接,根領(lǐng)導(dǎo)的領(lǐng)導(dǎo)會寫null,即查詢結(jié)果具有14行數(shù)據(jù)

    selecte1.empno '員工編號', e1.ename '員工名', e2.empno '領(lǐng)導(dǎo)編號', e2.ename '領(lǐng)導(dǎo)名' fromemp e1 left outer joinemp e2 one1.mgr = e2.empno; +----------+--------+----------+--------+ | 員工編號 | 員工名 | 領(lǐng)導(dǎo)編號 | 領(lǐng)導(dǎo)名 | +----------+--------+----------+--------+ | 7369 | SMITH | 7902 | FORD | | 7499 | ALLEN | 7698 | BLAKE | | 7521 | WARD | 7698 | BLAKE | | 7566 | JONES | 7839 | KING | | 7654 | MARTIN | 7698 | BLAKE | | 7698 | BLAKE | 7839 | KING | | 7782 | CLARK | 7839 | KING | | 7788 | SCOTT | 7566 | JONES | | 7839 | KING | NULL | NULL | | 7844 | TURNER | 7698 | BLAKE | | 7876 | ADAMS | 7788 | SCOTT | | 7900 | JAMES | 7698 | BLAKE | | 7902 | FORD | 7566 | JONES | | 7934 | MILLER | 7782 | CLARK | +----------+--------+----------+--------+ 14 rows in set (0.00 sec)
    2.9 三張表、四張表怎么連接
    【語法】一條SQL語句中內(nèi)連接和外連接可以混合使用 select... froma joinb on a,b連接條件 joinc ona和c的連接條件 left joind ona和d的連接條件 where查詢條件;

    【案例1】:找出每個員工的部門名稱,以及工資等級,要求顯示員工名,部門名,薪資,薪資等級

    selecte1.ename '員工姓名', e2.dname '部門名', e1.sal '薪資', e3.grade '薪資等級' fromemp e1 left joindept e2 on e1.deptno = e2.deptno left joinsalgrade e3 one1.sal between e3.losal and e3.hisal; +----------+------------+---------+----------+ | 員工姓名 | 部門名 | 薪資 | 薪資等級 | +----------+------------+---------+----------+ | SMITH | RESEARCH | 800.00 | 1 | | ALLEN | SALES | 1600.00 | 3 | | WARD | SALES | 1250.00 | 2 | | JONES | RESEARCH | 2975.00 | 4 | | MARTIN | SALES | 1250.00 | 2 | | BLAKE | SALES | 2850.00 | 4 | | CLARK | ACCOUNTING | 2450.00 | 4 | | SCOTT | RESEARCH | 3000.00 | 4 | | KING | ACCOUNTING | 5000.00 | 5 | | TURNER | SALES | 1500.00 | 3 | | ADAMS | RESEARCH | 1100.00 | 1 | | JAMES | SALES | 950.00 | 1 | | FORD | RESEARCH | 3000.00 | 4 | | MILLER | ACCOUNTING | 1300.00 | 2 | +----------+------------+---------+----------+ 14 rows in set (0.00 sec)

    【案例2】:找出每個員工的部門名稱,工資等級,以及上級領(lǐng)導(dǎo),要求顯示員工名,上級領(lǐng)導(dǎo)名,部門名,薪資,薪資等級

    selecte1.ename '員工姓名', e1_1.ename '領(lǐng)導(dǎo)名', e2.dname '部門名', e1.sal '薪資', e3.grade '薪資等級' fromemp e1 left joinemp e1_1 one1.mgr = e1_1.empno left joindept e2 on e1.deptno = e2.deptno left joinsalgrade e3 one1.sal between e3.losal and e3.hisal; +----------+--------+------------+---------+----------+ | 員工姓名 | 領(lǐng)導(dǎo)名 | 部門名 | 薪資 | 薪資等級 | +----------+--------+------------+---------+----------+ | SMITH | FORD | RESEARCH | 800.00 | 1 | | ALLEN | BLAKE | SALES | 1600.00 | 3 | | WARD | BLAKE | SALES | 1250.00 | 2 | | JONES | KING | RESEARCH | 2975.00 | 4 | | MARTIN | BLAKE | SALES | 1250.00 | 2 | | BLAKE | KING | SALES | 2850.00 | 4 | | CLARK | KING | ACCOUNTING | 2450.00 | 4 | | SCOTT | JONES | RESEARCH | 3000.00 | 4 | | KING | NULL | ACCOUNTING | 5000.00 | 5 | | TURNER | BLAKE | SALES | 1500.00 | 3 | | ADAMS | SCOTT | RESEARCH | 1100.00 | 1 | | JAMES | BLAKE | SALES | 950.00 | 1 | | FORD | JONES | RESEARCH | 3000.00 | 4 | | MILLER | CLARK | ACCOUNTING | 1300.00 | 2 | +----------+--------+------------+---------+----------+ 14 rows in set (0.00 sec)

    3、子查詢

    3.1 什么是子查詢?
  • select語句中嵌套select語句,被嵌套的select語句被稱為子查詢
  • 子查詢一定要在首位加括號
  • 3.2 子查詢都可以出現(xiàn)在哪里?
    select...(select)...#作為顯示,只能逐次輸出1個結(jié)果 from...(select)...#相當(dāng)于臨時表 where...(select)...#select出的結(jié)果當(dāng)作條件
    3.3 where子句中的子查詢

    【案例】找出比最低工資高的員工姓名和工資?

    【思路1】

  • 查詢最低工資是多少

  • 找出 >800 的

  • 合并

  • selectempno, ename, sal fromemp wheresal > (select min(sal) from emp); +-------+--------+---------+ | empno | ename | sal | +-------+--------+---------+ | 7499 | ALLEN | 1600.00 | | 7521 | WARD | 1250.00 | | 7566 | JONES | 2975.00 | | 7654 | MARTIN | 1250.00 | | 7698 | BLAKE | 2850.00 | | 7782 | CLARK | 2450.00 | | 7788 | SCOTT | 3000.00 | | 7839 | KING | 5000.00 | | 7844 | TURNER | 1500.00 | | 7876 | ADAMS | 1100.00 | | 7900 | JAMES | 950.00 | | 7902 | FORD | 3000.00 | | 7934 | MILLER | 1300.00 | +-------+--------+---------+
    3.4 from子句中的子查詢

    【注意】:from后面的子查詢,可以將子查詢的結(jié)果當(dāng)作一張臨時表

    【案例】:找出每個崗位的平均薪資的等級

    【思路】

  • 分組,找出每個崗位的平均工資
  • 把以上查詢結(jié)果作為臨時表T
  • 把T表和S表進行表連接
  • selectt.*, s.grade from (select job, avg(sal) as avgSal from emp group by job) t joinsalgrade s ont.avgSal between s.losal and s.hisal; +-----------+-------------+-------+ | job | avgSal | grade | +-----------+-------------+-------+ | CLERK | 1037.500000 | 1 | | SALESMAN | 1400.000000 | 2 | | MANAGER | 2758.333333 | 4 | | ANALYST | 3000.000000 | 4 | | PRESIDENT | 5000.000000 | 5 | +-----------+-------------+-------+
    3.5 select后面出現(xiàn)的子查詢(了解)

    【案例】:找出每個員工的部門名稱,要求顯示員工名、部門名

    【思路1】:連接表

    【思路2】:子查詢語句

    【注意】:對于select后面的子查詢來說,這個子查詢只能一次返回一條結(jié)果,多余一條,報錯!!!

    【思路1】 selecte1.empno, e1.ename, e2.dname fromemp e1 join dept e2 on e1.deptno = e2.deptno;【思路2】 select e1.empno, e1.ename, (select e2.dname from dept e2 where e1.deptno = e2.deptno) as dname from emp e1; +-------+--------+------------+ | empno | ename | dname | +-------+--------+------------+ | 7369 | SMITH | RESEARCH | | 7499 | ALLEN | SALES | | 7521 | WARD | SALES | | 7566 | JONES | RESEARCH | | 7654 | MARTIN | SALES | | 7698 | BLAKE | SALES | | 7782 | CLARK | ACCOUNTING | | 7788 | SCOTT | RESEARCH | | 7839 | KING | ACCOUNTING | | 7844 | TURNER | SALES | | 7876 | ADAMS | RESEARCH | | 7900 | JAMES | SALES | | 7902 | FORD | RESEARCH | | 7934 | MILLER | ACCOUNTING | +-------+--------+------------+

    4、union合并查詢結(jié)果集

    【案例】:查詢工作崗位是MANAGER和SALESMAN的員工

    【思路1】:in, or

    【思路2】:union合并(效率更高,why)。對于表連接來說,每連接1次新表,匹配次數(shù)滿足笛卡爾積,而union可以在減少匹配次數(shù)情況下,同時完成兩個結(jié)果集的拼接。

    1. select empno, ename, job from emp where job in ('manager','salesman'); 2. select empno, ename, job from emp where job = 'manager' union select empno, ename, job from emp where job = 'salesman'; +-------+--------+----------+ | empno | ename | job | +-------+--------+----------+ | 7499 | ALLEN | SALESMAN | | 7521 | WARD | SALESMAN | | 7566 | JONES | MANAGER | | 7654 | MARTIN | SALESMAN | | 7698 | BLAKE | MANAGER | | 7782 | CLARK | MANAGER | | 7844 | TURNER | SALESMAN | +-------+--------+----------+ 7 rows in set (0.00 sec)

    【表連接】:a 連接 b 連接 c

    ? a 10條記錄

    ? b 10條記錄

    ? c 10條記錄

    匹配次數(shù)是:10*10*10 = 1000

    【union合并】:a 連接 b 連接 c

    ? a->b 10*10

    ? a->c 10*10

    匹配次數(shù):10*10+10*10 = 200

    【注意事項】:union進行結(jié)果集合并時,要求兩個結(jié)果集的列數(shù)和列的數(shù)據(jù)類型也相同

  • //報錯 select empno, job from emp where job = 'manager' union select empno, ename, job from emp where job = 'salesman';
  • //mysql可以通過,但沒意義。但是oracle語法嚴格,不通過,要求數(shù)據(jù)類型一樣, select ename, job from emp where job = 'manager' union select empno, ename from emp where job = 'salesman';
  • 5、limit(非常重要)

    5.1 limit作用

    【提高用戶體驗】:將查詢結(jié)果集的一部分取出,通常用于分頁查詢中。一次全都查出來,用戶閱讀體驗差。

    百度:一頁顯示10條記錄

    5.2 limit怎么用

    【用法】:limit startIndex, length。從0開始

    【執(zhí)行順序】: mysql中,limit在order by之后執(zhí)行

    【案例1】:按照薪資降序,取出排名在前5的員工

    select ename, sal from emp order by sal desc limit 0,5; mysql> select ename, sal from emp order by sal desc limit 0,5; +-------+---------+ | ename | sal | +-------+---------+ | KING | 5000.00 | | SCOTT | 3000.00 | | FORD | 3000.00 | | JONES | 2975.00 | | BLAKE | 2850.00 | +-------+---------+ 5 rows in set (0.00 sec)

    【案例2】:取出工資排名在[3-5]名的員工

    mysql> select ename, sal from emp order by sal desc limit 2,3; +-------+---------+ | ename | sal | +-------+---------+ | FORD | 3000.00 | | JONES | 2975.00 | | BLAKE | 2850.00 | +-------+---------+

    【案例3】:取出工資排名在[5-9]名的員工?

    mysql> select ename, sal from emp order by sal desc limit 4,5; +--------+---------+ | ename | sal | +--------+---------+ | BLAKE | 2850.00 | | CLARK | 2450.00 | | ALLEN | 1600.00 | | TURNER | 1500.00 | | MILLER | 1300.00 | +--------+---------+
    5.3 分頁
    每頁顯示3條記錄第1頁:limit 0,3 [0 1 2]2頁:limit 3,3 [3 4 5]3頁:limit 6,3 [6 7 8]4頁:limit 9,3 [9 10 11]每頁顯示pageSize條記錄第pageNo頁:limit (pageNo - 1) * pageSize , pageSizepublic static void main(String[] args){// 用戶提交過來一個頁碼,以及每頁顯示的記錄條數(shù)int pageNo = 5; //第5頁int pageSize = 10; //每頁顯示10條int startIndex = (pageNo - 1) * pageSize;//JDBCString sql = "select ...limit " + startIndex + ", " + pageSize;}

    6、DQL語句的大總結(jié)

    1. 語法順序 select... from... where... group by... having... order by... limit...2. 執(zhí)行順序1. from2. where3. group by4. having5. select6. order by7. limit 3. 去重復(fù)distinct 4. 多表聯(lián)查1. 內(nèi)連接1. 等值連接2. 非等值連接3. 自連接2. 外連接1. 左外連接(左連接)2. 右外連接(右連接)3.全連接(不講) 5. 子查詢 6. union合并查詢結(jié)果 7. limit

    -------------------------------------------------------------DDL------------------------------------------------------------------

    7、表的創(chuàng)建(建表)

    7.1 建表的語法格式:(DDL語句,包括:create, drop, alter)
    create table 表名(字段名1 數(shù)據(jù)類型, 字段名2 數(shù)據(jù)類型, 字段名3 數(shù)據(jù)類型);create table 表名(字段名1 數(shù)據(jù)類型(length), 字段名2 數(shù)據(jù)類型(length), ...字段名n 數(shù)據(jù)類型(length));

    【表名】:建議以t_或者tbl_開始,可讀性強。見名知意。

    【字段名】:見名知意

    表名和字段名都屬于標識符

    7.2 關(guān)于mysql中的數(shù)據(jù)類型

    有很多,我們只需要掌握常見的數(shù)據(jù)類型即可。

    varchar(最長255)

  • 聲明最大長度,存儲可變長度的字符串,會根據(jù)實際的數(shù)據(jù)長度動態(tài)分配空間
  • 比較智能,節(jié)省空間
  • 【優(yōu)點】:節(jié)省空間

    【缺點】:需要動態(tài)分配空間,速度慢

    char

  • 定長字符串
  • 不管實際的數(shù)據(jù)長度是多少,分配固定長度的空間取存儲數(shù)據(jù)
  • 使用不恰當(dāng)時,可能會導(dǎo)致空間的浪費
  • 【優(yōu)點】:不需要動態(tài)分配空間

    【缺點】:使用不當(dāng)可能會導(dǎo)致空間的浪費

    性別字段選用char,因為固定長度

    int(最長11)

    ? 1. 數(shù)字中的整數(shù)型。等同于java中的int

    bigint

  • 數(shù)字中的長整型。等同于java中的long
  • float

  • 單精度浮點型數(shù)據(jù)
  • double

  • 雙精度浮點型數(shù)據(jù)
  • date

  • 短日期類型
  • datetime

  • 長日期類型
  • clob

  • 字符大對象,最多可存儲4G的字符串
  • 比如:存儲一篇文章,一個說明
  • 超過255個字符的都要采用CLOB字符大對象來存儲
  • Chracter Large Object: CLOB
  • blob

  • 二進制大對象
  • Binary Large Object: BLOB
  • 專門用來存儲圖片、聲音、視頻等流媒體數(shù)據(jù)
  • 網(wǎng)BLOB類型的字段上插入數(shù)據(jù)的時候,例如插入一個圖片、視頻等,需要用IO流
  • 【案例】t_moive 電影表 (專門存儲電影信息的)

    編號姓名故事情節(jié)上映日期時長海報類型
    no(bigint)name(varchar)discription(clob)playtime(date)time(double)image(blob)type(char)
    1000
    7.3 創(chuàng)建一個學(xué)生表?

    括號內(nèi)的只是建議長度,超過也不會報錯,char:1文字1長度

    學(xué)號、姓名、年齡、性別、郵箱地址

    create table t_student4_4(student_id int,student_name varchar(255),sex char(6),age int(3),email varchar(255) );

    刪除表

    drop table if exists t_student4_4;
    7.4 插入數(shù)據(jù)insert ( DML )

    【注意】: insert 只要執(zhí)行成功,就會多一行記錄。沒有指定默認值的字段,默認值為null。

    語法格式:insert into 表名(字段名1, 字段名2, 字段名3, ...) values(值1, 值2, 值3, ...); 【注意】: 1. 字段名和值,要一一對應(yīng) 2. 前面的字段名省略的話,等于都寫上了!所以值也要【全都】寫上!!并且【不能顛倒順序】!! 3. insert 只要執(zhí)行成功,就會多一行記錄。沒有【指定默認值】的字段,默認值為null。 drop table if exists t_student4_4; create table t_student4_4(student_id int,student_name varchar(255),sex char(6),age int(3),email varchar(255),測試 varchar(255) default '沒輸入' ); insert into t_student4_4 values(001, 'Kate', 'f', 17, 'Kate@edu.csu.cn', '輸入了'); insert into t_student4_4(student_id, student_name, sex, age, email) values(002, 'Jack', 'm', 17, 'Jack@edu.csu.cn'); select * from t_student4_4;
    7.5 insert插入日期

    數(shù)字格式化:format(數(shù)字, ‘格式’)

    1. 查詢員工薪水加入千分位 select ename,format(sal, 0) as sal from emp; 2. 查詢員工薪水加入千分位和保留兩位小數(shù) select ename, format(sal, 2) as sal from emp;

    str_to_date 將字符串varchar類型轉(zhuǎn)換成date類型

    通常用于insert語句,因為需要將date->varchar

    drop table if exists t_student4_4; create table t_student4_4(id int,姓名 varchar(255),生日 char(10)#可以用data類型 #生日 date ); mysql> desc t_student4_4; +-------+--------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+--------------+------+-----+---------+-------+ | id | int | YES | | NULL | | | 姓名 | varchar(255) | YES | | NULL | | | 生日 | char(10) | YES | | NULL | | +-------+--------------+------+-----+---------+-------+ 插入數(shù)據(jù)? insert into t_student4_4(id, 姓名, 生日) values(1, 'jack', '01-10-2001');

    【命名規(guī)范】:所有標識符都是小寫,用下劃線銜接

    insert into t_student4_4(id, 姓名, 生日) values(1, 'jack', str_to_date('01-10-2001', '%d-%m-%Y')); 【注意】:如果是'%Y-%m-%d'形式,無需 str_to_date insert into t_student4_4(id, 姓名, 生日) values(1, 'jack', '2001-02-11');

    mysql日期格式,對大小寫敏感

    %Y 年【記住這里是大寫】

    %m 月

    %d 日

    %h 時

    %i 分

    %s 秒

    date_format :將date類型轉(zhuǎn)換成具有一定格式的varchar字符串類型

    【用法】:date_format(日期類型數(shù)據(jù), ‘日期格式’);

    通常用于查詢?nèi)掌跁r,修改展示的日期格式。不指定的話,mysql會默認指定為:‘%Y-%m-%d’ 形式

    mysql> select id, 姓名 'name', date_format(生日,'%Y年%m月%d日') as birth from t_student4_4; +------+------+----------------+ | id | name | birth | +------+------+----------------+ | 1 | jack | 2001年10月01日 | | 1 | jack | 2001年02月11日 | +------+------+----------------+mysql> select id, 姓名 'name', 生日 as birth from t_student4_4;#默認形式 +------+------+------------+ | id | name | birth | +------+------+------------+ | 1 | jack | 2001-10-01 | | 1 | jack | 2001-02-11 | +------+------+------------+
    7.6 date和datetime兩個類型的區(qū)別

    date:短日期,只包括年月日信息

    datetime:是長日期,包括年月日時分秒信息

    drop table if exists t_user; create table t_user(id int,name varchar(32),birth date,create_time datetime ); id 是整數(shù) name 是字符串 birth 是短日期 create_time 是這條記錄的創(chuàng)建時間:長日期類型

    mysql短日期默認格式:%Y-%m-%d

    mysql長日期默認格式:%Y-%m-%d %h: %i: %s

    insert into t_user(id,name,birth,create_time) values(1,'zhangsan','1990-10-01','2020-03-18 15:49:50');

    mysql通過now() 函數(shù)獲取系統(tǒng)當(dāng)前時間,并且獲取的時間帶有:時分秒信息!!!!是datetime類型的。

    insert into t_user(id,name,birth,create_time) values(2,'lisi','1991-10-01',now()); +------+----------+------------+---------------------+ | id | name | birth | create_time | +------+----------+------------+---------------------+ | 1 | zhangsan | 1990-10-01 | 2020-03-18 15:49:50 | | 2 | lisi | 1991-10-01 | 2022-04-04 22:13:26 | | 3 | wangwu | 1991-10-01 | 2022-04-04 22:14:42 | +------+----------+------------+---------------------+
    7.7 update ( DML )
    語法格式: update 表名 set 字段名1 = 值1, 字段名2 = 值2, 字段名3 = 值3... where 條件; 【注意】:沒有條件會導(dǎo)致所有數(shù)據(jù)全部更新,所以條件要確定行【如,主鍵】 update t_user set name = 'jack' where id = 2; +------+----------+------------+---------------------+ | id | name | birth | create_time | +------+----------+------------+---------------------+ | 1 | zhangsan | 1990-10-01 | 2020-03-18 15:49:50 | | 2 | jack | 1991-10-01 | 2022-04-04 22:13:26 | | 3 | wangwu | 1991-10-01 | 2022-04-04 22:14:42 | +------+----------+------------+---------------------+ 3 rows in set (0.00 sec) update t_user set birth = '2002-02-26', create_time = now() where id = 2; mysql> select * from t_user; +------+----------+------------+---------------------+ | id | name | birth | create_time | +------+----------+------------+---------------------+ | 1 | zhangsan | 1990-10-01 | 2020-03-18 15:49:50 | | 2 | jack | 2002-02-26 | 2022-04-04 22:24:33 | | 3 | wangwu | 1991-10-01 | 2022-04-04 22:14:42 | +------+----------+------------+---------------------+ update t_user set create_time = now(); mysql> select * from t_user; +------+----------+------------+---------------------+ | id | name | birth | create_time | +------+----------+------------+---------------------+ | 1 | zhangsan | 1990-10-01 | 2022-04-04 22:25:08 | | 2 | jack | 1991-10-01 | 2022-04-04 22:25:08 | | 3 | wangwu | 1991-10-01 | 2022-04-04 22:25:08 | +------+----------+------------+---------------------+
    7.8 delete(DML)
    語法格式: delete from 表名 where 條件; 【注意】:沒有條件,整表全部刪除 delete from t_user where id = 2;mysql> select * from t_user; +------+----------+------------+---------------------+ | id | name | birth | create_time | +------+----------+------------+---------------------+ | 1 | zhangsan | 1990-10-01 | 2022-04-04 22:25:08 | | 3 | wangwu | 1991-10-01 | 2022-04-04 22:25:08 | +------+----------+------------+---------------------+ 2 rows in set (0.00 sec)insert into t_user(id) values(2); delete from t_user;#刪除所有內(nèi)容mysql> select * from t_user; Empty set (0.01 sec)drop table if exists t_user;#drop是刪除整個表結(jié)構(gòu)

    CRUD操作(create 添加數(shù)據(jù)read讀取數(shù)據(jù) update 修改數(shù)據(jù)delete刪除數(shù)據(jù))

    三、Day 03

    1、查詢每個員工的所在部門名稱?要求顯示員工名和部門名?

    連接并不能提高效率,只是篩選出符合條件的有效數(shù)據(jù)。 別名能夠提高效率加條件只是為了避免笛卡爾積現(xiàn)象,只是為了查詢出有效的組合記錄。 匹配的次數(shù)一次都沒有少,還是56次。selecte.ename, d.dname fromemp e joindept d one.deptno = d.deptno; +--------+------------+ | ename | dname | +--------+------------+ | SMITH | RESEARCH | | ALLEN | SALES | | WARD | SALES | | JONES | RESEARCH | | MARTIN | SALES | | BLAKE | SALES | | CLARK | ACCOUNTING | | SCOTT | RESEARCH | | KING | ACCOUNTING | | TURNER | SALES | | ADAMS | RESEARCH | | JAMES | SALES | | FORD | RESEARCH | | MILLER | ACCOUNTING | +--------+------------+ 14 rows in set (0.01 sec)

    2、insert語句可以一次插入多條記錄【掌握】

    【語法】: insert into 表名(字段名1, 字段名2) values(值1, 值2),(值1, 值2),(值1, 值2);insert into t_user(id, name, birth, create_time) values(1,'zs','1980-10-11',now()), (2,'lisi','1981-10-11',now()),(3,'wangwu','1982-10-11',now());

    3、快速建表

    【原理】:

  • 將一個查詢結(jié)果當(dāng)做一張表新建!!!!!
  • 這個可以完成表的快速復(fù)制!!!!
  • 表創(chuàng)建出來,同時表中的數(shù)據(jù)也存在了!!!
  • create table mytable as select empno, ename from emp where job = 'manager';drop table if exists t_user;#drop是刪除整個表結(jié)構(gòu)

    4、將查詢結(jié)果插入到一張表中?insert相關(guān)

    #結(jié)果和表的結(jié)構(gòu)(字段個數(shù)和數(shù)據(jù)類型)要對應(yīng) insert into mytable (select * from mytable);#用的比較少

    5、快速刪除表中的數(shù)據(jù)?【truncate比較重要,必須掌握,DDL操作】

    【用法】:

    truncate table dept_bak; #這種操作屬于DDL操作

    【注意】:使用truncate之前,必須仔細詢問客戶是否真的要刪除,并警告刪除之后不可恢復(fù)!

  • delete原理:

    ? 表中數(shù)據(jù)被刪除了,但是數(shù)據(jù)在硬盤中的真實存儲空間不會被釋放!

  • 缺點:刪除效率低
  • 優(yōu)點:可以回滾數(shù)據(jù)
  • delete from mytable where empno = 7566;
  • truncate原理:

    ? 表被一次性截斷,物理刪除!

    a. 缺點:不支持回滾

    ? b. 優(yōu)點:快速,效率高

  • 大表,包含上億條記錄????
    使用 delete,也許需要執(zhí)行1個小時才能刪除完!效率較低。
    使用 truncate,只需要不到1秒鐘的時間就刪除結(jié)束。效率較高。
    truncate是刪除表中的數(shù)據(jù),表還在!

  • 與drop區(qū)別:
  • drop table 表名; # 這不是刪除表中的數(shù)據(jù),這是把表刪除。

    6、對表結(jié)構(gòu)的增刪改?【DDL,create drop alter,針對字段】

  • 什么是對表結(jié)構(gòu)的修改?alter
  • 添加一個字段、刪除一個字段、修改一個字段

    #添加字段[默認字段于尾,可設(shè)置首,及任意位置。可添加默認值。comment里為備注信息] alter table 表名 add 新字段名 數(shù)據(jù)類型[(長度)]; alter table 表名 add 字段名 varchar(255) first; alter table 表名 add 字段名 varchar(255) default null comment '申請詳情'; alter table 表名 add 字段名 decimal(10,2) DEFAULT '0.00' comment '抵扣消費金額' after 字段名(在其后插入新字段); #修改數(shù)據(jù)類型/長度 alter table 表名 modify 舊字段名 數(shù)據(jù)類型; #修改字段名 alter table 表名 change 舊字段名 新字段名 數(shù)據(jù)類型; #刪除字段 alter table 表名 drop 字段名;

    【測試】:快速建表,然后修改字段

    #刪除整個表結(jié)構(gòu)mytable drop table if exists mytable; #根據(jù)select查詢結(jié)果快速創(chuàng)建表mytable create table mytable as (select e.deptno, e.empno, e.ename, e.sal, job, d.loc from emp e join dept d on e.deptno = d.deptno); #顯示表結(jié)構(gòu)和表內(nèi)容 desc mytable; select * from mytable; #新增字段gender alter table mytable add gender int; #設(shè)置新增gender所有內(nèi)容為1 update mytable set gender = 1; #顯示表結(jié)構(gòu)和表內(nèi)容 select * from mytable; desc mytable; #把所有列顯示為小寫 update mytable set ename = lower(ename), loc = lower(loc), job = lower(job); #把所有列都顯示為大寫 update mytable set ename = upper(ename), loc = upper(loc), job = upper(job); #把gender字段改為sex字段 alter table mytable change gender sex int; #刪除新增的sex字段 alter table mytable drop sex; #在第一列新增字段:number, not null表示字段值不能為空 alter table mytable add number int not null comment '測試序號' first; #在序號后新增字段:university alter table mytable add university varchar(10) default 'CSU' after number; #顯示表結(jié)構(gòu)和表內(nèi)容 desc mytable; select * from mytable;
  • 對表修改的修改使用:alter
  • 屬于DDL語句

  • DDL包括:create、drop、alter
  • 第一:在實際開發(fā)中,需求一旦確定后,表一旦設(shè)計好,很少進行表結(jié)構(gòu)的修改。因為開發(fā)過程中,修改表結(jié)構(gòu),成本較高。修改表結(jié)構(gòu)之后,對應(yīng)的java代碼就需要進行大量的修改。

    第二:修改表結(jié)構(gòu)的操作較少,如果需要修改表結(jié)構(gòu),使用工具

    第三:修改表結(jié)構(gòu)的操作不需要寫道java程序中,實際上也不是java程序員的范疇。

    7、約束(極其重要*****)

    7.1 什么是約束?
  • 約束對應(yīng)的英語單詞:constraint
  • 在創(chuàng)建表的時候,我們可以給表的字段加上一些約束,來保證這個表數(shù)據(jù)的完整性、有效性。
  • 約束的作用:保證表中的數(shù)據(jù)有效!!!
  • 只是約束,對字段刪除/增加約束,不會增加/減少字段
  • 7.2 約束包括哪些?
    • 非空約束:not null
    • 唯一性約束:unique
    • 主鍵約束:primary key(PK)
    • 外鍵約束:foreign key(FK)
    • 檢查約束:check key(mysql不支持,orcale支持)
    7.3 非空約束:not null
  • 非空約束not null約束的字段不能為null
  • 列級約束
  • drop table if exists t_vip; create table t_vip(id int,name varchar(255) not null // not null只有列級約束,沒有表級約束! ); insert into t_vip(id,name) values(1,'zhangsan'); insert into t_vip(id,name) values(2,'lisi');insert into t_vip(id) values(3); ERROR 1364 (HY000): Field 'name' doesn't have a default value
    7.4 唯一性約束:unique
  • 唯一性約束unique約束的字段不能重復(fù),但是可以為null
  • 列級約束
  • 表級約束:需要給多個字段聯(lián)合起來添加某一個約束的時候,需要使用表級約束。
  • drop table if exists t_vip; create table t_vip(id int,name varchar(255) unique,email varchar(255));insert into t_vip(id,name,email) values(1,'zhangsan','zhangsan@123.com');insert into t_vip(id,name,email) values(2,'lisi','lisi@123.com');insert into t_vip(id,name,email) values(3,'wangwu','wangwu@123.com');select * from t_vip;insert into t_vip(id,name,email) values(4,'wangwu','wangwu@sina.com');ERROR 1062 (23000): Duplicate entry 'wangwu' for key 'name' #name字段雖然被unique約束了,但是可以為NULL。insert into t_vip(id) values(4);insert into t_vip(id) values(5);
  • 兩個字段聯(lián)合起來具有唯一性
  • # 1. 如下不符合,因為這代表各自唯一,不是聯(lián)合 drop table if exists t_vip; create table t_vip(id int,#約束直接添加到列后面的,叫做【列級約束】。name varchar(255) unique,email varchar(255) unique#但如果采用以上方式創(chuàng)建表的話,肯定創(chuàng)建失敗,因為'zhangsan'和'zhangsan'重復(fù)了。insert into t_vip(id,name,email) values(1,'zhangsan','zhangsan@123.com');insert into t_vip(id,name,email) values(2,'zhangsan','zhangsan@sina.com'); ); # 2. 應(yīng)該這樣創(chuàng)建 drop table if exists t_vip; create table t_vip(id int,name varchar(255) unique not null,email varchar(255) unique not null,#約束沒有添加在列的后面,這種約束被稱為【表級約束】。unique(name,email) );insert into t_vip(id,name,email) values(1,'zhangsan','zhangsan@123.com');insert into t_vip(id,name,email) values(2,'zhangsan','zhangsan@sina.com');select * from t_vip;
  • unique和null聯(lián)合
  • 在mysql當(dāng)中,如果一個字段同時被not null和unique約束的話,該字段自動變成主鍵字段(非空且不重復(fù),當(dāng)然是主鍵特征)。多個字段被同時聲明not null unique,則第一個為主鍵。

    drop table if exists t_vip; create table t_vip(id int,name varchar(255) unique not null,email varchar(255) unique not null,#約束沒有添加在列的后面,這種約束被稱為【表級約束】。unique(name,email) ); Query OK, 0 rows affected (0.06 sec)mysql> desc t_vip; +-------+--------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+--------------+------+-----+---------+-------+ | id | int | YES | | NULL | | | name | varchar(255) | NO | PRI | NULL | | | email | varchar(255) | NO | UNI | NULL | | +-------+--------------+------+-----+---------+-------+ 3 rows in set (0.00 sec)
  • 【注意】:oracle中不一樣!

  • 7.5 主鍵約束(Primary key, PK,非常重要*****)
  • PK的相關(guān)術(shù)語:

  • 主鍵約束:就是一種約束
  • 主鍵字段:該字段上添加了主鍵約束,這樣的字段叫:主鍵字段
  • 主鍵值:主鍵字段中的每個值都叫做:主鍵值
  • 什么是主鍵?作用?

  • 主鍵值是每一行記錄的唯一標識
  • 任何表都應(yīng)該有主鍵,否則是無效表
  • 主鍵特征

  • not null+unique,非空且不重復(fù)
  • 給表添加主鍵約束

  • 列級約束
  • 表級約束:復(fù)合主鍵(聯(lián)合主鍵)
  • 建議單一主鍵,不建議復(fù)合主鍵
  • 結(jié)論:一張表,主鍵約束只能添加1個。(主鍵只能有1個)
  • 主鍵值建議類型:

  • int
  • bigint
  • char
  • 主鍵值通常是遞增的數(shù)字,一般是定長,不建議使用varchar
  • 主鍵分類2種

  • 單一主鍵

  • 復(fù)合主鍵

  • 自然主鍵:主鍵值是一個自然數(shù),和業(yè)務(wù)沒關(guān)系

  • 業(yè)務(wù)主鍵:主鍵值和業(yè)務(wù)緊密關(guān)聯(lián),例如拿銀行卡賬號作主鍵值。

    • 自然主鍵使用較多,因為不需要意義,只要不重復(fù)即可。如果與業(yè)務(wù)掛鉤,則業(yè)務(wù)發(fā)生變動時,可能會影響主鍵值。
  • MySQL自動維護主鍵值

  • 創(chuàng)建表時,可以使用 auto_increment 表示自增,從1開始,以1遞增

    drop table if exists t_vip; create table t_vip(id int primary key auto_increment,name varchar(255) ); insert into t_vip(name) values ('jack'), ('jack'), ('jack'), ('jack');
  • 已存在的表,添加主鍵約束

    alter table 表名 modify 列名 數(shù)據(jù)類型 primary key;alter table 表名 add primary key(列名);alter table 表名 add constraint 主鍵約束的名字(自定義) primary key(列名);
  • ? 3. 刪除遞增主鍵約束時,要先去掉遞增屬性

    #遞增主鍵字段id改為普通int alter table 表名 modify 字段名 int; #刪除普通主鍵約束(只有一個主鍵,不用指定字段) alter table 表名 drop primary key;

    【代碼測試】

    drop table if exists t_vip; #1個字段做主鍵,叫做:單一主鍵 create table t_vip(id int primary key, #列級約束name varchar(255) ); insert into t_vip(id,name) values(1,'zhangsan'),values(2,'lisi');#錯誤:不能重復(fù) insert into t_vip(id,name) values(2,'wangwu'); ERROR 1062 (23000): Duplicate entry '2' for key 'PRIMARY'#錯誤:不能為NULL insert into t_vip(name) values('zhaoliu'); ERROR 1364 (HY000): Field 'id' doesn't have a default value#可以使用表級約束 添加約束 drop table if exists t_vip;create table t_vip(id int,name varchar(255),primary key(id) #表級約束);insert into t_vip(id,name) values(1,'zhangsan');#錯誤insert into t_vip(id,name) values(1,'lisi'); ERROR 1062 (23000): Duplicate entry '1' for key 'PRIMARY' #表級約束主要是給多個字段聯(lián)合起來添加約束, #id和name聯(lián)合起來做主鍵:復(fù)合主鍵!!!! drop table if exists t_vip;create table t_vip(id int, name varchar(255),email varchar(255),primary key(id,name) );insert into t_vip(id,name,email) values(1,'zhangsan','zhangsan@123.com');insert into t_vip(id,name,email) values(1,'lisi','lisi@123.com');#錯誤:不能重復(fù)insert into t_vip(id,name,email) values(1,'lisi','lisi@123.com');ERROR 1062 (23000): Duplicate entry '1-lisi' for key 'PRIMARY'#一個表中主鍵約束能加兩個嗎?不,有且僅有1個drop table if exists t_vip;create table t_vip(id int primary key,name varchar(255) primary key); #ERROR 1068 (42000): Multiple primary key defined
    7.6 外鍵約束(foreign key, PK, 非常重要)
  • 相關(guān)術(shù)語

  • 外鍵約束:一種約束:foreign key
  • 外鍵字段:該字段被添加了外鍵約束
  • 外鍵值:主鍵字段當(dāng)中的每一個值
  • 外鍵不一定是主表的主鍵,但是一定要具有唯一性unique約束,添加外鍵后,外鍵值可以為空

  • 業(yè)務(wù)背景

    • 設(shè)計數(shù)據(jù)庫表,描述班級和學(xué)生信息

    【方案1】:班級和學(xué)生存儲在一張表

    no(PK)nameclassnoclassname
    1jack100北京市大興區(qū)亦莊鎮(zhèn)第二中學(xué)高三1班
    2luck100北京市大興區(qū)亦莊鎮(zhèn)第二中學(xué)高三1班
    3rose101北京市大興區(qū)亦莊鎮(zhèn)第二中學(xué)高三2班
    4bourne101北京市大興區(qū)亦莊鎮(zhèn)第二中學(xué)高三2班
    • 缺點:數(shù)據(jù)冗余、空間浪費
    • 評價:設(shè)計比較失敗

    【方案2】:班級表、學(xué)生表

    classno(pk)classname
    100北京市大興區(qū)亦莊鎮(zhèn)第二中學(xué)高三1班
    101北京市大興區(qū)亦莊鎮(zhèn)第二中學(xué)高三2班
    no(pk)namecsno
    1jack100
    2luck100
    3rose101
    4bourne101
    • 當(dāng)csno沒有任何約束的時候,可能導(dǎo)致數(shù)據(jù)無效(102不在班級表中)

      為了保證cno字段中的值都是100和101,需要給cnoi段添加外鍵約束

      【注意】:如果classno不具有唯一性,那么就無法得知csno所屬了

    【故】:csno就是外鍵字段,csno字段中每一個值都是外鍵值。

    【注意】:t_class是父表(被引用的表)

    ? t_student是子表(添加外鍵的表)

    drop table if exists t_class; drop table if exists t_students; #因為希望有外鍵,故先創(chuàng)建父表,再子表 create table t_class(classno int primary key,classname varchar(255) ); create table t_students(no int primary key auto_increment,#主鍵自增name varchar(255),csno int,#【添加外鍵約束】foreign key(csno) references t_class(classno) );insert into t_class(class, classname) values(100, '北京市大興區(qū)亦莊鎮(zhèn)第二中學(xué)高三1班'); insert into t_class(class, classname) values(101, '北京市大興區(qū)亦莊鎮(zhèn)第二中學(xué)高三2班');insert into t_students(name, csno) values ('jack', 100), ('lucy', 100), ('rose', 101), ('bourne', 101); insert into t_students(name) values ('kate');#報錯 insert into (csno) values(102); ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`bjpowernode`.`t_students`, CONSTRAINT `t_students_ibfk_1` FOREIGN KEY (`csno`) REFERENCES `t_class` (`classno`))
  • 創(chuàng)建外鍵【約束】的兩種方式
  • 創(chuàng)建表時直接創(chuàng)建外鍵約束
    • 備注:必須先創(chuàng)建參照表,才能在創(chuàng)建外鍵約束,即必須現(xiàn)有表Category,再有book

    • foreign key(子表字段) references 父表名(父表字段); #刪除外鍵字段 alter table 表名 drop foreign key 外鍵約束的名字;
    • 先創(chuàng)建表,表創(chuàng)建成功后,單獨添加外鍵約束
    • alter table 子表名 add constraint 外鍵約束的名字(自定義) foreign key(字段1) references 主表名(字段2);

    【測試】

    create table books(bookid number(10) not null primary key,bookName varchar2(20) not null,price number(10,2),categoryId number(10) not null ); ALTER TABLE books ADD CONSTRAINT FK_Book_categoryid FOREIGN KEY(categoryId ) REFERENCES Category(id); create table t_students(no int primary key auto_increment,#主鍵自增name varchar(255) not null,csno int not null default 100,#【添加外鍵約束】foreign key(csno) references t_class(classno) );#刪除外鍵約束【只是刪除約束,并沒有刪除字段】 alter table t_students drop foreign key class_id; alter table t_students add class_id int default 100 after name; #如下【constaint關(guān)鍵字一定要在】 alter table t_students add constraint class_id foreign key(class_id) references t_class(classno);
  • 主表和子表的創(chuàng)建和刪除具有順序
    • 依照他們的時間周期
  • 7.7 級聯(lián)更新與級聯(lián)刪除
  • 級聯(lián)更新 on update cascade
  • 先刪除子表的外鍵約束
  • 然后同時添加外鍵約束和級聯(lián)更新
  • 這樣,當(dāng)更新父表被引用的字段時,子表會被自動更新
  • alter table t_students drop foreign key fk_class_id;alter table t_students add constraint fk_class_id foreign key(class_id) references t_class(classno) on update cascade;#要保證所有沒有被設(shè)置級聯(lián)更新的外鍵都被刪除了 update t_class set classno = 20 where classno = 101;
  • 級聯(lián)刪除 on delete cascade
  • 先刪除子表的外鍵約束
  • 然后同時添加外鍵約束和級聯(lián)刪除
  • 這樣,當(dāng)刪除父表被引用的字段時,子表會被自動刪除
  • alter table t_students drop foreign key fk_class_id;alter table t_students add constraint fk_class_id foreign key(class_id) references t_class(classno) on delete cascade; #只刪除父表中數(shù)據(jù),但是子表中的數(shù)據(jù)也會被刪除 delete from t_class where classno = 100;
    7.8 刪除約束
    1. alter table 子表名 drop foreign key 外鍵約束名; 2. alter table 子表名 drop primary key 主鍵約束名; 3. alter table 子表名 drop key 約束名;
    7.9 添加約束
    1. alter table 子表名 add constraint 外鍵約束名 foreign key(子表字段) references 父表名(父表字段); 2. alter table 子表名 add constraint 外鍵約束名 primary key(字段);
    7.10 修改約束
    alter table 表名 modify 字段名 類型 約束;

    8、存儲引擎

    8.1 存儲引擎的作用
    #看表的詳細信息:存儲引擎、結(jié)構(gòu)、約束等 show create table 表名;mysql> show create table t_students; +------------+-------------------------------------------------------------- | Table | Create Table | t_students | CREATE TABLE `t_students` (`no` int NOT NULL,`name` varchar(255) DEFAULT NULL,`class_id` int DEFAULT '100',`csno` int DEFAULT NULL,PRIMARY KEY (`no`),KEY `fk_csno` (`csno`),KEY `fk_class_id` (`class_id`),CONSTRAINT `fk_class_id` FOREIGN KEY (`class_id`) REFERENCES `t_class` (`classno`),CONSTRAINT `fk_csno` FOREIGN KEY (`csno`) REFERENCES `t_class` (`classno`) ON UPDATE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci | +------------+--------------------------------------------------------------
  • 存儲引擎是MySQL中特有的一個術(shù)語,其他數(shù)據(jù)庫中沒有。
    • Oracle中有,但是不叫這個名字
  • 存儲引擎是存儲/組織數(shù)據(jù)的方式
  • 不同的存儲引擎,存儲數(shù)據(jù)的方式不同
  • 8.2 給表添加/指定“存儲引擎”
  • 查看表的詳細信息:存儲引擎、結(jié)構(gòu)、約束…
  • 1. show create table 表名; 2. show table status '表名';
  • 建表時使用關(guān)鍵字ENGINE顯示指定存儲引擎
  • CREATE TABLE `t_student` (`no` int(11) NOT NULL AUTO_INCREMENT,`name` varchar(255) DEFAULT NULL,`cno` int(11) DEFAULT NULL,PRIMARY KEY (`no`),KEY `cno` (`cno`),CONSTRAINT `t_student_ibfk_1` FOREIGN KEY (`cno`) REFERENCES `t_class` (`classno`)) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8;
  • 對現(xiàn)有表使用alter table語句改變存儲引擎
  • alter table 表名 engine = innodb;
    8.3 查看mysql支持的存儲引擎
  • 查看mysql版本
  • mysql> select version(); +-----------+ | version() | +-----------+ | 8.0.28 | +-----------+
  • 查看支持引擎
  • mysql> show engines\G *************************** 1. row ***************************Engine: MEMORYSupport: YESComment: Hash based, stored in memory, useful for temporary tables Transactions: NOXA: NOSavepoints: NO *************************** 2. row ***************************Engine: MRG_MYISAMSupport: YESComment: Collection of identical MyISAM tables Transactions: NOXA: NOSavepoints: NO *************************** 3. row ***************************Engine: CSVSupport: YESComment: CSV storage engine Transactions: NOXA: NOSavepoints: NO *************************** 4. row ***************************Engine: FEDERATEDSupport: NOComment: Federated MySQL storage engine Transactions: NULLXA: NULLSavepoints: NULL *************************** 5. row ***************************Engine: PERFORMANCE_SCHEMASupport: YESComment: Performance Schema Transactions: NOXA: NOSavepoints: NO *************************** 6. row ***************************Engine: MyISAMSupport: YESComment: MyISAM storage engine Transactions: NOXA: NOSavepoints: NO *************************** 7. row ***************************Engine: InnoDBSupport: DEFAULTComment: Supports transactions, row-level locking, and foreign keys Transactions: YESXA: YESSavepoints: YES *************************** 8. row ***************************Engine: BLACKHOLESupport: YESComment: /dev/null storage engine (anything you write to it disappears) Transactions: NOXA: NOSavepoints: NO *************************** 9. row ***************************Engine: ARCHIVESupport: YESComment: Archive storage engine Transactions: NOXA: NOSavepoints: NO 9 rows in set (0.00 sec)
    8.4 mysql常用存儲引擎

    【主鍵】:對于一張表,主要是主鍵,或者加有unique約束的字段上會自動創(chuàng)建索引

  • MyISAM存儲引擎

  • 最常用的存儲引擎
  • 具有如下特征:
  • 使用三個文件表示每個表
  • 格式文件-存儲表結(jié)構(gòu)的定義(mytable.frm)
  • 數(shù)據(jù)文件-存儲表行的內(nèi)容(mytable.myd)
  • 索引文件-存儲表上的索引(mytable.myi)
  • 靈活的auto-increment字段處理
  • 【優(yōu)勢】可被轉(zhuǎn)換為壓縮、只讀表來節(jié)省空間
  • MyISAM不支持事務(wù)機制,安全性低
  • 全表鎖
  • InnoDB存儲引擎

  • MySQL默認采用InnoDB存儲引擎,是重量級的存儲引擎(行鎖)
  • innodb支持事務(wù),支持數(shù)據(jù)庫崩潰后自動恢復(fù)機制
  • 主要特點是十分安全
  • 具有如下特征:
  • 每個innodb表在數(shù)據(jù)庫目錄中以.frm格式文件表示
  • 用commit(提交)、savepoint及rollback(回滾)支持事務(wù)處理
  • 提供ACID兼容
  • 在mysql服務(wù)器崩潰后,可提供自動恢復(fù)
  • 多版本(MVCC)和行級鎖定
  • 支持外鍵及引用的完整性,包括級聯(lián)刪除和更新
  • 主要特點:
  • 支持事務(wù),以保證數(shù)據(jù)的安全性
  • 效率不是很高,不能壓縮,不能轉(zhuǎn)換為只讀,不能很好的節(jié)省磁盤空間
  • memory存儲引擎

  • 【速度快】使用memory存儲引擎的表,數(shù)據(jù)存儲在內(nèi)存中,且行的長度固定
  • 具有如下特征:
  • 在數(shù)據(jù)庫目錄內(nèi),每個表均以.frm格式的文件表示
  • 表數(shù)據(jù)及索引被存儲在內(nèi)存中(目的就是快)
  • 表級鎖
  • 不能包含TEXT或者BLOB字段
  • 以前被稱作heap引擎
  • 主要特點:
  • 查詢效率是最高的,不需要和硬盤交互
  • 不安全,關(guān)機之后數(shù)據(jù)消失,因為數(shù)據(jù)和索引都是在內(nèi)存中
  • 9、事務(wù)(非常重要*****)

    9.1 什么是事務(wù)

    ? 事務(wù)就是一組DML語句對數(shù)據(jù)庫進行操作,它們要么全部完成,要么全部不完成,具有ACID性質(zhì):

    9.2 什么sql語句支持事務(wù)
  • 只有以下三個DML語句才會有事務(wù),其他語句與事務(wù)無關(guān)

  • insert
  • delete
  • update
  • 因為以上三個數(shù)據(jù)對數(shù)據(jù)庫表中數(shù)據(jù)進行增、刪、改,涉及到了安全問題,故引入事務(wù)。

  • 9.3 事務(wù)存在的意義
  • 因為所有的業(yè)務(wù)不可能一條DML語句就能完成,多條DML涉及到安全問題,故必須引入事務(wù)。

  • 一個事務(wù)其實就是多條DML語句同時成功,或者同時失敗。

  • 9.4 事務(wù)的原理
    1. InnoDB存儲引擎:提供了一組用來記錄事務(wù)性活動的日志文件 事務(wù)開啟了:insertinsertinsertdeleteupdateupdateupdate事務(wù)結(jié)束了!

    在事務(wù)執(zhí)行過程中,每一條DML操作都會記錄到“事務(wù)性活動的日志文件“中;在事務(wù)的執(zhí)行過程中,我們可以提交事務(wù),也可以回滾事務(wù)。

  • 提交事務(wù)

  • 清空事務(wù)性活動的日志文件,將數(shù)據(jù)全部徹底持久化到數(shù)據(jù)庫表中

  • 提交事務(wù)標志著:事務(wù)結(jié)束,并且是一種全部成功的結(jié)束。

  • 回滾事務(wù)

  • 將之前所有的DML操作全部撤銷,并且清空事務(wù)性活動的日志文件
  • 回滾事務(wù)標志著:事務(wù)的結(jié)束,并且是一種全部失敗的結(jié)束。
  • 9.5 如何提交事務(wù),如何回滾事務(wù)
  • 提交事務(wù):commit語句
  • 回滾事務(wù):rollback語句(永遠只能回滾到上一次的提交點)
  • 【transaction:事務(wù)】

  • mysql中默認自動提交事務(wù)

  • 每執(zhí)行一條DML語句,就提交一次
  • 并不符合我們的開發(fā)習(xí)慣,因為我們通常需要多條DML語句作為一個業(yè)務(wù),同時成功后才能提交,而不能
  • 自定義事務(wù)提交

  • 先開啟事務(wù):

    start transaction
  • 執(zhí)行事務(wù)操作

  • 【回滾】:演示事務(wù)回滾

    create table dept_bak(no int, name varchar(255), hometown varchar(255)); start transaction; insert into dept_bak values(10,'abc', 'bj'); insert into dept_bak values(20,'abc', 'tj'); select * from dept_bak; rollback; select * from dept_bak;

    【提交】:演示事務(wù)提交

    start transaction; insert into dept_bak values(10,'abc','bj'); insert into dept_bak values(20,'abc','tj'); commit; select * from dept_bak;
    9.6 事務(wù)的ACID性質(zhì)

    原子性(atomicty)

    事務(wù)是最小的工作單元,不可再分,要么全部提交,要么全部回滾,沒有中間狀態(tài)

    一致性(consistency)

    事務(wù)執(zhí)行前后,數(shù)據(jù)從一個合法性狀態(tài)變換成另一個合法性狀態(tài),這種狀態(tài)是語義上的(滿足預(yù)定的約束狀態(tài)),不是語法上的。

    隔離性(Isolation)

    一個事務(wù)的執(zhí)行,不能被其它事務(wù),即一個事務(wù)內(nèi)部的操作及其使用的數(shù)據(jù)對并發(fā)的其他事務(wù)是隔離的,并發(fā)執(zhí)行的各個事務(wù)之間不能相互干擾(資源互斥)

    持久性(durability)

    一個事務(wù)一旦被提交,他對數(shù)據(jù)庫中的數(shù)據(jù)的改變就是永久性的(通過重做日志和回滾日志實現(xiàn))。事務(wù)提交:將沒有保存到硬盤上的數(shù)據(jù)保存到硬盤上。

    【原子性是基礎(chǔ),隔離性是手段,一致性是約束條件,持久性則是我們的目的】

    9.7 事務(wù)的5種狀態(tài)

    活動的:事務(wù)對應(yīng)的數(shù)據(jù)庫操作正在執(zhí)行

    部分提交的:事務(wù)中的最后一個操作完成,但是操作都在內(nèi)存中,還沒有把結(jié)果刷新到磁盤中

    失敗的:處于活動的,或者部分提交時出現(xiàn)了錯誤

    中止的:執(zhí)行了一部分而變?yōu)槭〉?#xff0c;就需要把已經(jīng)修改的事務(wù)的操作還原到執(zhí)行之前,這個回滾操作完成后,數(shù)據(jù)庫恢復(fù)到了執(zhí)行事務(wù)之前的狀態(tài),我們就說該事務(wù)處于中止

    提交的:修改過的數(shù)據(jù)都同步到了磁盤

    9.7 事務(wù)隔離級別
  • 數(shù)據(jù)并發(fā)問題

    (不保證串行):【數(shù)據(jù)不一致】
    **1. 臟寫:**事務(wù)A修改了另一個未提交事務(wù)B修改過(可能會回滾)的數(shù)據(jù),就發(fā)生了臟寫(提交了的數(shù)據(jù)被回滾掉了,即數(shù)據(jù)沒有變化)
    **2. 臟讀:**事務(wù)A讀取了B更新但沒有被提交的字段(若B回滾了,則A讀取的內(nèi)容是臨時且無效的)
    3. 不可重復(fù)讀:A讀取了一個字段,然后B更新了該字段,則A再次讀取同一個字段,值就不同了
    4. 幻讀(多讀:讀到了之前沒讀到的記錄):A從一個表讀取了一個字段,B插入了新行(幻影記錄),A再讀就多了幾行

    • 四種隔離級別(都解決了臟寫):都解決了,并發(fā)性特別差,先給問題嚴重性排序:
      ? 臟寫>臟讀>不可重復(fù)讀>幻讀
  • 四個隔離級別(逐漸加強)

    我們愿意舍棄一部分隔離性來換取一部分性能:設(shè)立4個隔離級別,越低則并發(fā)問題發(fā)生越多,越往下并發(fā)越差
    1. READ UNCOMMITTED:讀未提交,允許一個事務(wù)讀其他事務(wù)未提交的字段,有臟讀可能
    2. READ COMMITTED:讀已提交(oracle默認),一個事務(wù)只能讀其他事務(wù)已提交的字段,有不可能臟讀
    3. REPEATABLE READ:可重復(fù)讀(mysql默認),確保如果在一個事務(wù)中多次執(zhí)行相同的select語句,都能得到相同的結(jié)果,不管其他事務(wù)是否提交修改(銀行轉(zhuǎn)賬)。
    4. SERIALIZABLE:可串行化,效率最低,事務(wù)排隊,不能并發(fā)。synchronized,線程同步(事務(wù)同步)。

  • 隔離級別臟讀可能不可重復(fù)讀可能幻讀可能性加鎖讀
    讀未提交yesyesyesno
    讀已提交noyesyesno
    可重復(fù)讀nonoInnoDB解決了no
    可串行化nononoyes
    9.8 驗證各種隔離級別
    #設(shè)置全局隔離級別 set global transaction isolation level read uncommitted; #- read-uncommitted #- read-committed #- repeatable-read #- serializable#退出后重進,查看隔離級別 sql> select @@transaction_isolation; +-------------------------+ | @@transaction_isolation | +-------------------------+ | REPEATABLE-READ | +-------------------------+ 1 row in set (0.00 sec) #打開兩個mysql端,進行事務(wù)的隔離級別驗證
    9.9 設(shè)置服務(wù)器的缺省隔離級別
  • 通過修改配置文件設(shè)置

    • 可以在my.ini文件中使用transaction-isolation選項來設(shè)置服務(wù)器的缺省事務(wù)隔離級別

      • read-uncommitted
      • read-committed
      • repeatable-read
      • serializable
    • - [mysqld] - transaction-isolation = read-committed
  • 通過動態(tài)命令設(shè)置隔離級別

    • #設(shè)置全局隔離級別,要退出后重進,才修改了隔離級別 set global transaction isolation level read uncommitted; #global -> session則是僅改變當(dāng)前會話的隔離級別,不用退出重進 set session transaction isolation level read uncommitted; #查看事務(wù)隔離級別 sql> select @@transaction_isolation; +-------------------------+ | @@transaction_isolation | +-------------------------+ | read uncommitted | +-------------------------+ 1 row in set (0.00 sec)
      • read uncommitted
      • read committed
      • repeatable read
      • serializable
  • 三、Day 04

    1、索引

    1.1 什么是索引

    MySQL在查詢方面主要就是兩種方式:
    第一種方式:全表掃描
    第二種方式:根據(jù)索引檢索。

    ? 索引【自主添加】是在數(shù)據(jù)庫表的字段上添加的,是為了提高查詢效率存在的一種機制。一張表的一個字段可以添加一個索引,多個字段聯(lián)合起來也可以添加索引。

    ? 索引相當(dāng)于一本書的目錄,是為了縮小掃描范圍而存在的機制。

    ? 對于一本字典來說,查找某個漢字有兩種方式:
    ? 第一種方式:一頁一頁挨著找,直到找到為止,這種查找方式屬于全字典掃描。
    ? 效率比較低。
    ? 第二種方式:先通過目錄(索引)去定位一個大概的位置,然后直接定位到這個
    ? 位置,做局域性掃描,縮小掃描的范圍,快速的查找。這種查找方式屬于通過
    ? 索引檢索,效率較高。

    select * from t_user where name = ‘jack’;

    以上的這條SQL語句會去name字段上掃描,為什么?
    因為查詢條件是:name=‘jack’

    如果name字段上沒有添加索引,或者說沒有給name字段創(chuàng)建索引,
    MySQL會進行全掃描,會將name字段上的每一個值都比對一遍。效率比較低。

    【注意】:
    在實際中,漢語字典前面的目錄是排序的,按照a b c d e f…排序,
    為什么排序呢?因為只有排序了才會有區(qū)間查找這一說!(縮小掃描范圍
    其實就是掃描某個區(qū)間罷了!)

    在mysql數(shù)據(jù)庫當(dāng)中索引也是需要排序的,并且這個所以的排序和TreeSet
    數(shù)據(jù)結(jié)構(gòu)相同。TreeSet(TreeMap)底層是一個自平衡的二叉樹!在mysql
    當(dāng)中索引是一個B-Tree數(shù)據(jù)結(jié)構(gòu)。

    ? 遵循左小右大原則存放。采用中序遍歷方式遍歷取數(shù)據(jù)。

    1.2 索引的實現(xiàn)原理

    假設(shè)有一張用戶表:t_user

    id(PK) name 每一行記錄在硬盤上都有物理存儲編號 ------------------------------------------------------------------------ 100 zhangsan 0x1111 120 lisi 0x2222 99 wangwu 0x8888 88 zhaoliu 0x9999 101 jack 0x6666 55 lucy 0x5555 130 tom 0x7777

    【提醒1】:在任何數(shù)據(jù)庫當(dāng)中主鍵上都會自動添加索引對象,id字段上自動有索引,因為id是PK。另外在mysql中,一個字段上如果有unique約束的話,也會自動創(chuàng)建索引對象。

    【提醒2】:在任何數(shù)據(jù)庫中,任何一張表的任何一條記錄在硬盤存儲上都有一個物理地址

    【提醒3】:在mysql中,索引是一個單獨的對象,不同的存儲引擎以不同的形式存在,在myisam存儲引擎中,索引存儲在.myi文件中。在innodb中,存儲在一個邏輯名稱為tablespace中。在memory中,存儲在內(nèi)存中。

    1.3、mysql自動添加索引

    在mysql當(dāng)中,主鍵上,以及unique字段上都會自動添加索引的!!!!

    1.4 索引的優(yōu)化

    什么條件下,我們會考慮給字段添加索引呢?
    條件1:數(shù)據(jù)量龐大(到底有多么龐大算龐大,這個需要測試,因為每一個硬件環(huán)境不同)
    條件2:該字段經(jīng)常出現(xiàn)在where的后面,以條件的形式存在,也就是說這個字段總是被掃描。
    條件3:該字段很少的DML(insert delete update)操作。(因為DML之后,索引需要重新排序!!!時間倍增!!!

    建議不要隨意添加索引,因為索引也是需要維護的,太多的話反而會降低系統(tǒng)的性能。
    建議通過主鍵查詢,建議通過unique約束的字段進行查詢(因為這里有索引),效率是比較高的。

    1.5 索引的創(chuàng)建、刪除
  • 創(chuàng)建索引

    #給emp表的ename字段添加索引,起名:emp_ename_index create index emp_ename_index on emp(ename);
  • 刪除索引

    #將emp表上的emp_ename_index索引對象刪除 drop index emp_ename_index on emp;
  • 1.6 查看SQL語句是否使用了索引進行檢索

    使用explain關(guān)鍵字

    #未添加索引,直接查詢非主鍵 explain select * from emp where ename = 'KING'; #直接查詢主鍵(自動添加索引) explain select * from emp where empno = 7566; #給非主鍵添加索引后查詢 create index emp_ename_index on emp(ename); explain select * from emp where ename = 'KING';
    1.7 索引失效(優(yōu)化策略)
  • 對含索引字段進行模糊查詢時,如果以%開頭,那么不會使用索引

    explain select * from emp where ename like '%T';

    優(yōu)化策略:模糊查詢是不使用%開頭

  • 如果使用or,則兩邊字段都要有索引,否則索引失效

    explain select * from emp where ename = 'KING' or job = 'MANAGER';
  • 使用復(fù)合索引,需要使用左側(cè)的列查找,否則索引失效

    • 復(fù)合索引:兩個及兩個以上字段,聯(lián)合起來添加一個索引

      create index emp_job_sal_index on emp(job,sal); explain select * from emp where job = 'MANAGER'; explain select * from emp where sal = 5000;
  • where中索引列不能參與運算,否則索引失效

    create index emp_sal_index on emp(sal); explain select * from emp where sal*2 = 1600;
  • where中索引列不能使用函數(shù)

    explain select * from emp where lower(ename) = 'smith';
  • 1.8 數(shù)據(jù)庫優(yōu)化重要手段:索引

    數(shù)據(jù)庫優(yōu)化時,首先考慮的就是索引。

  • 單一索引:一個字段上添加索引

  • 復(fù)合索引:兩個及兩個以上字段上添加索引

  • 主鍵索引:主鍵上添加索引(主鍵和unique鍵自動添加索引)

  • 唯一性索引:具有unique約束的字段上添加索引

  • 【注意】:唯一性比較弱的字段上,添加索引用處不大

    2、視圖(View)

    2.1 什么是視圖

    view:站在不同角度,看待同一份數(shù)據(jù)

    2.2 創(chuàng)建/刪除視圖對象
  • 只有DQL語句才能以view的形式創(chuàng)建,相當(dāng)于地址

    • create view dept2_view as(DQL語句);
  • #先建一個表用于演示視圖 create table dept as (select * from dept); #創(chuàng)建視圖對象 create view dept2_view as select * from dept2; #刪除視圖 drop view dept2_view;
    2.3 視圖的作用:類似JAVA引用
  • 我們可以面向視圖對象進行增刪改查,對視圖對象的增刪改,會導(dǎo)致原表被操作!
  • 特點:對視圖的操作,會影響到原表數(shù)據(jù)。
  • #面向視圖查詢 select * from dept2_view; #面向視圖插入 insert into dept2_view(deptno,dname,loc) values(60,'SALES', 'BEIJING');#查詢原表數(shù)據(jù) select * from dept2; #創(chuàng)建兩個表連接的視圖 create view emp_dept_view as(select e.ename, e.sal, d.dnamefrom emp ejoindept done.deptno = d.deptno ); #查詢視圖對象 select * from emp_dept_view; +--------+---------+------------+ | ename | sal | dname | +--------+---------+------------+ | SMITH | 800.00 | RESEARCH | | ALLEN | 1600.00 | SALES | | WARD | 1250.00 | SALES | | JONES | 2975.00 | RESEARCH | | MARTIN | 1250.00 | SALES | | BLAKE | 2850.00 | SALES | | CLARK | 2450.00 | ACCOUNTING | | SCOTT | 3000.00 | RESEARCH | | KING | 5000.00 | ACCOUNTING | | TURNER | 1500.00 | SALES | | ADAMS | 1100.00 | RESEARCH | | JAMES | 950.00 | SALES | | FORD | 3000.00 | RESEARCH | | MILLER | 1300.00 | ACCOUNTING | +--------+---------+------------+ #面向視圖更新【謹慎修改,原表數(shù)據(jù)也變了】 update emp_dept_view set sal = 1000 where dname = 'ACCOUNTING'; #查詢原表 select * from emp; +-------+--------+-----------+------+------------+---------+---------+--------+ | EMPNO | ENAME | JOB | MGR | HIREDATE | SAL | COMM | DEPTNO | +-------+--------+-----------+------+------------+---------+---------+--------+ | 7369 | SMITH | CLERK | 7902 | 1980-12-17 | 800.00 | NULL | 20 | | 7499 | ALLEN | SALESMAN | 7698 | 1981-02-20 | 1600.00 | 300.00 | 30 | | 7521 | WARD | SALESMAN | 7698 | 1981-02-22 | 1250.00 | 500.00 | 30 | | 7566 | JONES | MANAGER | 7839 | 1981-04-02 | 2975.00 | NULL | 20 | | 7654 | MARTIN | SALESMAN | 7698 | 1981-09-28 | 1250.00 | 1400.00 | 30 | | 7698 | BLAKE | MANAGER | 7839 | 1981-05-01 | 2850.00 | NULL | 30 | | 7782 | CLARK | MANAGER | 7839 | 1981-06-09 | 1000.00 | NULL | 10 | | 7788 | SCOTT | ANALYST | 7566 | 1987-04-19 | 3000.00 | NULL | 20 | | 7839 | KING | PRESIDENT | NULL | 1981-11-17 | 1000.00 | NULL | 10 | | 7844 | TURNER | SALESMAN | 7698 | 1981-09-08 | 1500.00 | 0.00 | 30 | | 7876 | ADAMS | CLERK | 7788 | 1987-05-23 | 1100.00 | NULL | 20 | | 7900 | JAMES | CLERK | 7698 | 1981-12-03 | 950.00 | NULL | 30 | | 7902 | FORD | ANALYST | 7566 | 1981-12-03 | 3000.00 | NULL | 20 | | 7934 | MILLER | CLERK | 7782 | 1982-01-23 | 1000.00 | NULL | 10 | +-------+--------+-----------+------+------------+---------+---------+--------+
    2.4 視圖對象在實際開發(fā)中的作用
  • 提高代碼復(fù)用、簡化開發(fā)、利于維護
  • 比如視圖emp_dept_view就代表了下面的兩表連接查詢語句,該視圖對象即代表了復(fù)雜的查詢語句。
  • 存儲在硬盤內(nèi)。如果將查詢結(jié)果直接新建表,并不能修改原表
  • #創(chuàng)建兩個表連接的視圖 create view emp_dept_view as(select e.ename, e.sal, d.dnamefrom emp ejoindept done.deptno = d.deptno );

    【注意】:
    1. 視圖對應(yīng)的語句只能是DQL語句。
    2. 但是視圖對象創(chuàng)建完成之后,可以對視圖進行增刪改查等操作。

    【CRUD】:
    增刪改查,又叫做:CRUD。
    CRUD是在公司中程序員之間溝通的術(shù)語。一般我們很少說增刪改查。
    一般都說CRUD。

    C: Create (增) R: Retrieve(查:檢索) U: Update (改) D: Delete (刪)

    3、DBA常用命令

    database administrator,數(shù)據(jù)庫管理員

    3.1 重點掌握
    • 數(shù)據(jù)的導(dǎo)入和導(dǎo)出(數(shù)據(jù)備份)
      • 導(dǎo)入
      • 導(dǎo)出
    • 其他命令了解即可
      • 新建用戶
      • 授權(quán)
      • 回收權(quán)限
    3.2 數(shù)據(jù)導(dǎo)出

    ? 在windows的dos命令窗口:

    • mysqldump 數(shù)據(jù)庫名>文件路徑存放文件名.sql -uroot -p123456 #刪除庫 drop database bjpowernode;
    • 導(dǎo)出指定表

      mysqldump bjpowernode emp>D:\bjpowernode.sql -uroot -p123456
    3.3 數(shù)據(jù)導(dǎo)入

    【source】

    ? step 1. 先登錄到mysql數(shù)據(jù)庫服務(wù)器上

    ? step 2. 創(chuàng)建數(shù)據(jù)庫:create database bjpowernode;

    ? step 3. 使用數(shù)據(jù)庫:use bjpowernode

    ? step 4. 初始化數(shù)據(jù)庫:source D:\bjpowernode.sql

    4、數(shù)據(jù)庫設(shè)計的三范式(重要)

    4.1 什么是數(shù)據(jù)庫設(shè)計范式

    數(shù)據(jù)庫表的設(shè)計規(guī)則

    4.2 數(shù)據(jù)庫設(shè)計三大范式
    • 第一范式:要求任何一張表都必須要有主鍵,每一個字段原子性不可再分
    • 第二范式:建立在的第一范式基礎(chǔ)之上,要求所有非主鍵字段完全依賴主鍵,不要產(chǎn)生部分依賴
    • 第三范式:建立在第二范式基礎(chǔ)之上,要求所有非主鍵字段直接依賴主鍵,不要產(chǎn)生傳遞依賴

    【注意】:面試官經(jīng)常問三范式,要熟記于心

    按照三大范式進行數(shù)據(jù)庫表設(shè)計,可以避免表中數(shù)據(jù)的冗余,空間的浪費

    單一主鍵滿足第二范式,但是復(fù)合主鍵可能產(chǎn)生部份依賴,不滿足第二范式

    4.3 第一范式
  • 最核心,最重要的范式,所有表的設(shè)計都需要滿足

  • 必須要有主鍵,并且每一個字段都是原子不可再分

  • 學(xué)生編號 學(xué)生姓名 聯(lián)系方式 ------------------------------------------ 1001 張三 zs@gmail.com,1359999999 1002 李四 ls@gmail.com,13699999999 1001 王五 ww@163.net,13488888888

    上表不滿足第一范式:沒有主鍵;聯(lián)系方式可以分為郵箱地址和電話

    學(xué)生編號(pk) 學(xué)生姓名 郵箱地址 聯(lián)系電話 ---------------------------------------------------- 1001 張三 zs@gmail.com 1359999999 1002 李四 ls@gmail.com 13699999999 1003 王五 ww@163.net 13488888888
    4.4 第二范式
  • 建立在第一范式的基礎(chǔ)之上
  • 要求所有的非主鍵字段必須【完全依賴】主鍵字段,不要產(chǎn)生【部分依賴】
  • 學(xué)生編號 學(xué)生姓名 教師編號 教師姓名 ---------------------------------------------------- 1001 張三 001 王老師 1002 李四 002 趙老師 1003 王五 001 王老師 1001 張三 002 趙老師
  • 沒有主鍵,不滿足第一范式
  • 不滿足第二范式:
  • 這張表滿足了學(xué)生和老師的關(guān)系:(1個學(xué)生可能對應(yīng)多個老師,1個老師有多個學(xué)生)
  • 這是非常典型的【多對多關(guān)系】!!!:3表2外鍵
  • 【修改1】滿足第一范式:復(fù)合主鍵(PK: 學(xué)生編號+教師編號)

    單一主鍵滿足第二范式,但是復(fù)合主鍵可能產(chǎn)生部份依賴,不滿足第二范式

    學(xué)生編號+教師編號(pk) 學(xué)生姓名 教師姓名


    ? 1001 001 張三 王老師
    ? 1002 002 李四 趙老師
    ? 1003 001 王五 王老師
    ? 1001 002 張三 趙老師

    經(jīng)過修改之后,上表仍然 不滿足第二范式:

  • “張三”依賴1001,“王老師”不依賴1001,而依賴001,顯然產(chǎn)生了部分依賴。
  • 產(chǎn)生部分依賴造成:數(shù)據(jù)冗余了。空間浪費了。“張三”重復(fù)了,“王老師”重復(fù)了。
  • 【修改2】:創(chuàng)建三張表:學(xué)生表、教師表、學(xué)生教師關(guān)系表

    【多對多設(shè)計原則】:多對多->三張表->關(guān)系表有兩個外鍵

    學(xué)生表 學(xué)生編號(pk) 學(xué)生名字 ------------------------------------ 1001 張三 1002 李四 1003 王五 教師表 教師編號(pk) 教師姓名 -------------------------------------- 001 王老師 002 趙老師 學(xué)生教師關(guān)系表 id(pk) 學(xué)生編號(fk) 教師編號(fk)------------------------------------------------------ 1 1001 001 2 1002 002 3 1003 001 4 1001 002
    4.5 第三范式
  • 第三范式建立在第二范式的基礎(chǔ)之上
  • 要求所有非主鍵字段必須【直接依賴】主鍵,不產(chǎn)生【傳遞依賴】
  • 學(xué)生編號(PK) 學(xué)生姓名 班級編號 班級名稱 -------------------------------------1001 張三 01 一年一班1002 李四 02 一年二班1003 王五 03 一年三班1004 趙六 03 一年三班

    以上表的設(shè)計是描述:班級和學(xué)生的關(guān)系。很顯然是1對多關(guān)系!

  • 滿足第一范式:有主鍵

  • 滿足第二范式:不是復(fù)合主鍵,沒有產(chǎn)生部份依賴。主鍵是單一主鍵

  • 不滿足第三范式:產(chǎn)生了傳遞依賴(班級名稱->班級編號->學(xué)生編號),不符合第三范式的要求,產(chǎn)生了數(shù)據(jù)冗余

  • 【修改】:一對多,兩張表,多的表加外鍵!!!

    班級表:一 班級編號(pk) 班級名稱 01 一年一班 02 一年二班 03 一年三班 學(xué)生表:多 學(xué)生編號(PK)學(xué)生姓名 班級編號(fk) -------------------------------- 1001 張三 01 1002 李四 02 1003 王五 03 1004 趙六 03
    4.6 總結(jié)表的設(shè)計(牢記)

    【一對多】:

    一對多,兩張表,多的表加外鍵fk!!!!!!!!!!!!

    【多對多】

    多對多,三張表,關(guān)系表兩個外鍵fk!!!!!!!!!!!!!!!

    【一對一】

    口訣:一對一,外鍵fk且唯一unique!!!!!!!!!!

    在實際的開發(fā)中,可能存在一張表字段太多,太龐大。這個時候要拆分表。
    一對一怎么設(shè)計?

    沒有拆分表之前:一張表 t_user id login_name login_pwd real_name email address........ ------------------------------------------------------------------------- 1 zhangsan 123 張三 zhangsan@xxx 2 lisi 123 李四 lisi@xxx ...

    這種龐大的表建議拆分為兩張

    t_login 登錄信息表 id(pk) login_name login_pwd --------------------------------- 1 zhangsan 123 2 lisi 123 t_user 用戶詳細信息表 id(pk) real_name email login_id(fk+unique) ------------------------------------------------------------------------- 100 張三 zhangsan@xxx 1 200 李四 lisi@xxx 2
    4.7 總結(jié)

    數(shù)據(jù)庫設(shè)計指導(dǎo):

    數(shù)據(jù)庫設(shè)計三范式是理論上的,但是理論和實踐具有偏差,最終的目的都是為了滿足客戶的需求,有的時候就要拿冗余換執(zhí)行速度。

    因為在SQL中,表和表之間連接次數(shù)越多,效率越低(笛卡爾積)。

    有時存在冗余,卻會減少表的連接次數(shù),這樣也是合理的,同時數(shù)據(jù)庫表的SQL開發(fā)和維護難度也會降低。

    總結(jié)

    以上是生活随笔為你收集整理的【内容详细、源码详尽】MySQL极简学习笔记的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

    亚洲人成人无码网www国产 | 国产精品-区区久久久狼 | 国产精品视频免费播放 | 久精品国产欧美亚洲色aⅴ大片 | 在线欧美精品一区二区三区 | 久久久久久a亚洲欧洲av冫 | 荡女精品导航 | 亚洲国产精华液网站w | 在线视频网站www色 | 妺妺窝人体色www在线小说 | 亚洲色偷偷偷综合网 | 日欧一片内射va在线影院 | 国产成人综合在线女婷五月99播放 | 久久精品国产99久久6动漫 | 久久99精品国产.久久久久 | 无人区乱码一区二区三区 | 永久黄网站色视频免费直播 | 日本熟妇浓毛 | 亚洲精品久久久久avwww潮水 | 东京热无码av男人的天堂 | 国产精品久久国产三级国 | 男人扒开女人内裤强吻桶进去 | 国产成人亚洲综合无码 | 鲁鲁鲁爽爽爽在线视频观看 | 又色又爽又黄的美女裸体网站 | 秋霞成人午夜鲁丝一区二区三区 | 国产xxx69麻豆国语对白 | 国产精品对白交换视频 | 少妇无码av无码专区在线观看 | 国产成人无码av在线影院 | 国产精品资源一区二区 | 亚洲精品中文字幕久久久久 | 久久天天躁夜夜躁狠狠 | 性欧美疯狂xxxxbbbb | 亚洲综合无码一区二区三区 | 国产一精品一av一免费 | 亚洲国产av精品一区二区蜜芽 | 国产精品.xx视频.xxtv | 人妻无码αv中文字幕久久琪琪布 | 大肉大捧一进一出好爽视频 | 亚洲综合无码一区二区三区 | 亚洲精品成a人在线观看 | 高清不卡一区二区三区 | 人妻少妇被猛烈进入中文字幕 | 国产舌乚八伦偷品w中 | 偷窥日本少妇撒尿chinese | 3d动漫精品啪啪一区二区中 | 亚洲s色大片在线观看 | 中文字幕 亚洲精品 第1页 | 狠狠躁日日躁夜夜躁2020 | 亚洲中文字幕无码一久久区 | 欧美成人家庭影院 | 中国女人内谢69xxxx | 色妞www精品免费视频 | 扒开双腿疯狂进出爽爽爽视频 | 久久99国产综合精品 | 久久婷婷五月综合色国产香蕉 | 欧美日韩精品 | 夜精品a片一区二区三区无码白浆 | 三级4级全黄60分钟 | 久久久久成人片免费观看蜜芽 | 中文字幕无码人妻少妇免费 | 少妇无码一区二区二三区 | 无码人妻精品一区二区三区下载 | 欧美人与禽猛交狂配 | 国产成人久久精品流白浆 | 兔费看少妇性l交大片免费 | 国产精品毛片一区二区 | 色婷婷久久一区二区三区麻豆 | 麻豆国产人妻欲求不满 | 亚洲综合另类小说色区 | 亚洲国产精品无码久久久久高潮 | 最新国产乱人伦偷精品免费网站 | 三级4级全黄60分钟 | 麻豆av传媒蜜桃天美传媒 | 无遮挡啪啪摇乳动态图 | 18精品久久久无码午夜福利 | 精品国产成人一区二区三区 | 国产suv精品一区二区五 | 奇米影视7777久久精品 | 久久精品国产一区二区三区肥胖 | 亚洲gv猛男gv无码男同 | 国产性猛交╳xxx乱大交 国产精品久久久久久无码 欧洲欧美人成视频在线 | 亚洲精品午夜无码电影网 | 樱花草在线社区www | 狠狠cao日日穞夜夜穞av | 国色天香社区在线视频 | 又粗又大又硬又长又爽 | 亚洲中文字幕va福利 | 妺妺窝人体色www婷婷 | 亚洲中文字幕成人无码 | 久久亚洲中文字幕无码 | 成人性做爰aaa片免费看 | yw尤物av无码国产在线观看 | 在线欧美精品一区二区三区 | 中文字幕无码日韩专区 | 少妇性l交大片欧洲热妇乱xxx | 国产成人精品视频ⅴa片软件竹菊 | 欧美日韩人成综合在线播放 | 亚洲综合久久一区二区 | 国产精品怡红院永久免费 | 亚洲va欧美va天堂v国产综合 | 精品国产青草久久久久福利 | 成人毛片一区二区 | 性生交大片免费看女人按摩摩 | 亚洲成a人片在线观看日本 | 精品国产av色一区二区深夜久久 | 欧美熟妇另类久久久久久不卡 | 人人爽人人澡人人人妻 | 久久精品无码一区二区三区 | 97夜夜澡人人双人人人喊 | 日本肉体xxxx裸交 | 国产精品第一区揄拍无码 | 无码吃奶揉捏奶头高潮视频 | 人人爽人人澡人人人妻 | 日产国产精品亚洲系列 | 伊人久久大香线蕉午夜 | 99精品视频在线观看免费 | 国产精品成人av在线观看 | 鲁大师影院在线观看 | 麻豆人妻少妇精品无码专区 | 亚洲国产精品成人久久蜜臀 | 国产精品亚洲一区二区三区喷水 | 啦啦啦www在线观看免费视频 | 亚洲aⅴ无码成人网站国产app | 日本护士xxxxhd少妇 | 特大黑人娇小亚洲女 | 娇妻被黑人粗大高潮白浆 | 国产精品99久久精品爆乳 | 无码精品国产va在线观看dvd | 超碰97人人射妻 | 国产成人精品久久亚洲高清不卡 | 乌克兰少妇xxxx做受 | 亚洲精品国产a久久久久久 | 乱人伦人妻中文字幕无码久久网 | 精品无人区无码乱码毛片国产 | 疯狂三人交性欧美 | 日本熟妇人妻xxxxx人hd | 六月丁香婷婷色狠狠久久 | 久久国产自偷自偷免费一区调 | 欧美老人巨大xxxx做受 | 亚洲精品综合五月久久小说 | 波多野结衣aⅴ在线 | 亚洲欧美日韩成人高清在线一区 | 亚洲欧美综合区丁香五月小说 | 国产又粗又硬又大爽黄老大爷视 | 欧美成人高清在线播放 | 在线欧美精品一区二区三区 | 天天拍夜夜添久久精品 | 成年美女黄网站色大免费视频 | а√资源新版在线天堂 | 久久久婷婷五月亚洲97号色 | 欧美熟妇另类久久久久久不卡 | 一个人看的www免费视频在线观看 | 日日噜噜噜噜夜夜爽亚洲精品 | 免费无码av一区二区 | 国产成人亚洲综合无码 | 色综合久久久久综合一本到桃花网 | a在线观看免费网站大全 | 亚洲中文字幕乱码av波多ji | 久久99精品久久久久婷婷 | 色综合天天综合狠狠爱 | 大地资源中文第3页 | 无遮挡国产高潮视频免费观看 | 97无码免费人妻超级碰碰夜夜 | a片在线免费观看 | 奇米影视888欧美在线观看 | 中文字幕乱妇无码av在线 | 天堂а√在线中文在线 | 又粗又大又硬又长又爽 | 日韩精品乱码av一区二区 | 国产亚洲精品久久久久久国模美 | 97久久精品无码一区二区 | 国产麻豆精品精东影业av网站 | 成人无码视频在线观看网站 | 桃花色综合影院 | 鲁大师影院在线观看 | 日本精品少妇一区二区三区 | 在线 国产 欧美 亚洲 天堂 | 欧美日韩一区二区综合 | 国产精品怡红院永久免费 | 性开放的女人aaa片 | 亚洲精品国产精品乱码不卡 | 乱码午夜-极国产极内射 | 人人澡人人妻人人爽人人蜜桃 | 精品人妻人人做人人爽夜夜爽 | 男人的天堂2018无码 | 色噜噜亚洲男人的天堂 | 捆绑白丝粉色jk震动捧喷白浆 | 国产美女极度色诱视频www | 婷婷五月综合激情中文字幕 | 亚洲国产精品久久人人爱 | 麻花豆传媒剧国产免费mv在线 | 亚洲 a v无 码免 费 成 人 a v | 亚洲人成人无码网www国产 | 国产精品久久久久影院嫩草 | 精品人妻人人做人人爽夜夜爽 | 少妇人妻偷人精品无码视频 | 内射欧美老妇wbb | 女高中生第一次破苞av | 免费看男女做好爽好硬视频 | 欧美色就是色 | 国产 精品 自在自线 | 亚洲精品无码国产 | 中文无码成人免费视频在线观看 | 日产国产精品亚洲系列 | 久久精品国产99精品亚洲 | 久久天天躁狠狠躁夜夜免费观看 | 国产精品无码久久av | 国产人妻精品一区二区三区 | 天堂久久天堂av色综合 | 97se亚洲精品一区 | 欧美日韩精品 | 中文字幕 人妻熟女 | 国产精品怡红院永久免费 | 日韩av无码一区二区三区不卡 | 最近的中文字幕在线看视频 | 色综合久久中文娱乐网 | 亚洲成a人一区二区三区 | 老熟女重囗味hdxx69 | 中文字幕人妻无码一区二区三区 | 久久精品中文字幕一区 | 扒开双腿疯狂进出爽爽爽视频 | av人摸人人人澡人人超碰下载 | 狂野欧美性猛交免费视频 | 人人妻人人澡人人爽人人精品 | 一本久道久久综合狠狠爱 | 婷婷色婷婷开心五月四房播播 | www国产亚洲精品久久久日本 | 日日天干夜夜狠狠爱 | 久久婷婷五月综合色国产香蕉 | 国产莉萝无码av在线播放 | 国产精品多人p群无码 | 久久久久亚洲精品中文字幕 | 久久zyz资源站无码中文动漫 | 夜夜夜高潮夜夜爽夜夜爰爰 | 俺去俺来也www色官网 | 蜜桃av蜜臀av色欲av麻 999久久久国产精品消防器材 | 任你躁国产自任一区二区三区 | 免费无码av一区二区 | 国产成人无码av在线影院 | 扒开双腿疯狂进出爽爽爽视频 | 亚洲大尺度无码无码专区 | 亚洲国产av美女网站 | 香港三级日本三级妇三级 | a国产一区二区免费入口 | 超碰97人人做人人爱少妇 | 国产美女极度色诱视频www | 亚洲国产欧美国产综合一区 | 小泽玛莉亚一区二区视频在线 | 国产精品人人爽人人做我的可爱 | 午夜福利不卡在线视频 | 男女下面进入的视频免费午夜 | 精品成人av一区二区三区 | 亚洲人成影院在线无码按摩店 | 欧美三级a做爰在线观看 | 成年美女黄网站色大免费全看 | 欧美丰满熟妇xxxx性ppx人交 | 中国大陆精品视频xxxx | 嫩b人妻精品一区二区三区 | 夜先锋av资源网站 | 欧洲熟妇色 欧美 | 亚洲国产精品无码一区二区三区 | 麻豆国产丝袜白领秘书在线观看 | 国产网红无码精品视频 | 亚洲欧美国产精品专区久久 | 欧美老妇与禽交 | 欧美日韩亚洲国产精品 | 免费中文字幕日韩欧美 | 中文字幕无码av激情不卡 | 无码人妻少妇伦在线电影 | 国产精品第一国产精品 | 在线 国产 欧美 亚洲 天堂 | 国内少妇偷人精品视频 | 国产精品a成v人在线播放 | 国产成人无码a区在线观看视频app | 亚洲の无码国产の无码影院 | 人人爽人人爽人人片av亚洲 | 99久久精品国产一区二区蜜芽 | 女人被男人躁得好爽免费视频 | 成人亚洲精品久久久久 | 一本色道久久综合亚洲精品不卡 | 无码av免费一区二区三区试看 | 狠狠色噜噜狠狠狠狠7777米奇 | 国产成人精品一区二区在线小狼 | 日日摸日日碰夜夜爽av | 亚洲一区二区观看播放 | 中国女人内谢69xxxx | 亚洲精品一区二区三区四区五区 | 97无码免费人妻超级碰碰夜夜 | 国产精品a成v人在线播放 | 无码帝国www无码专区色综合 | 黑人巨大精品欧美一区二区 | 丝袜人妻一区二区三区 | 日韩成人一区二区三区在线观看 | 久久精品女人天堂av免费观看 | 精品日本一区二区三区在线观看 | 性生交片免费无码看人 | 18黄暴禁片在线观看 | 久久久久成人精品免费播放动漫 | 全黄性性激高免费视频 | 欧美日韩一区二区综合 | 亚洲欧洲日本综合aⅴ在线 | 强奷人妻日本中文字幕 | 色婷婷综合中文久久一本 | 国产av剧情md精品麻豆 | 欧美人与动性行为视频 | 亚洲天堂2017无码 | 日韩无套无码精品 | 欧美一区二区三区视频在线观看 | 一本加勒比波多野结衣 | 日日干夜夜干 | 国精产品一品二品国精品69xx | 国产精品久久久久久无码 | 高潮毛片无遮挡高清免费视频 | 沈阳熟女露脸对白视频 | 亚洲一区二区三区四区 | 成人欧美一区二区三区黑人 | 国产成人无码av一区二区 | 国产精品a成v人在线播放 | 爆乳一区二区三区无码 | 2019nv天堂香蕉在线观看 | 18精品久久久无码午夜福利 | 欧美日韩亚洲国产精品 | 99久久99久久免费精品蜜桃 | 中文字幕av日韩精品一区二区 | 伊人久久婷婷五月综合97色 | 欧美大屁股xxxxhd黑色 | 国产婷婷色一区二区三区在线 | 欧美 丝袜 自拍 制服 另类 | 亚洲成av人片天堂网无码】 | 内射白嫩少妇超碰 | 无码任你躁久久久久久久 | 国产在线无码精品电影网 | 无遮挡国产高潮视频免费观看 | 99久久久国产精品无码免费 | 久久人人爽人人人人片 | 99久久久无码国产精品免费 | 久久精品99久久香蕉国产色戒 | 欧美日韩视频无码一区二区三 | 国产激情无码一区二区app | 国产午夜无码视频在线观看 | 日日鲁鲁鲁夜夜爽爽狠狠 | 亚洲中文字幕无码中文字在线 | 99精品视频在线观看免费 | 国产区女主播在线观看 | 内射后入在线观看一区 | 人人妻人人澡人人爽人人精品 | 国产乱人无码伦av在线a | 女人被爽到呻吟gif动态图视看 | 久久久国产精品无码免费专区 | 国产午夜亚洲精品不卡 | 亚洲精品久久久久avwww潮水 | 18精品久久久无码午夜福利 | 色一情一乱一伦一视频免费看 | 国产精品无码mv在线观看 | 久久婷婷五月综合色国产香蕉 | 欧美老妇与禽交 | 亚洲欧美日韩综合久久久 | а√天堂www在线天堂小说 | 色 综合 欧美 亚洲 国产 | 国产偷抇久久精品a片69 | 欧美一区二区三区 | 久久人人爽人人爽人人片ⅴ | 欧美丰满熟妇xxxx性ppx人交 | 老熟妇乱子伦牲交视频 | 欧美 亚洲 国产 另类 | 欧美黑人乱大交 | 国产精品人人妻人人爽 | 国产精品久久久久久亚洲毛片 | 亚洲熟熟妇xxxx | 精品国产福利一区二区 | 日日摸日日碰夜夜爽av | 日本乱偷人妻中文字幕 | 国产成人无码专区 | 高清无码午夜福利视频 | 全黄性性激高免费视频 | 亚洲欧美日韩成人高清在线一区 | 人妻互换免费中文字幕 | 狂野欧美激情性xxxx | 又粗又大又硬又长又爽 | 日本一卡2卡3卡四卡精品网站 | 好爽又高潮了毛片免费下载 | 荫蒂被男人添的好舒服爽免费视频 | 奇米影视7777久久精品人人爽 | 亚洲精品一区三区三区在线观看 | 中文字幕久久久久人妻 | 国产av人人夜夜澡人人爽麻豆 | 亚洲高清偷拍一区二区三区 | 亚洲色欲色欲天天天www | 国产精品嫩草久久久久 | 亚洲熟熟妇xxxx | 沈阳熟女露脸对白视频 | 四虎国产精品一区二区 | 亚拍精品一区二区三区探花 | 久久久国产一区二区三区 | 欧美日韩久久久精品a片 | 欧美第一黄网免费网站 | 国产人妻精品一区二区三区 | 精品久久久无码中文字幕 | 亚洲色www成人永久网址 | 日韩精品一区二区av在线 | 97人妻精品一区二区三区 | 精品国产精品久久一区免费式 | 无码播放一区二区三区 | 98国产精品综合一区二区三区 | 亚洲七七久久桃花影院 | 小sao货水好多真紧h无码视频 | 55夜色66夜色国产精品视频 | 免费观看黄网站 | 波多野结衣 黑人 | 精品久久8x国产免费观看 | 精品 日韩 国产 欧美 视频 | 亚洲狠狠婷婷综合久久 | 波多野结衣高清一区二区三区 | 久久午夜无码鲁丝片午夜精品 | 精品熟女少妇av免费观看 | 国精产品一品二品国精品69xx | 日韩欧美中文字幕公布 | www国产亚洲精品久久久日本 | 性色欲情网站iwww九文堂 | 女人色极品影院 | 欧美激情综合亚洲一二区 | 无码人妻出轨黑人中文字幕 | 中文字幕无码视频专区 | 18精品久久久无码午夜福利 | 午夜男女很黄的视频 | 中文亚洲成a人片在线观看 | 久久精品无码一区二区三区 | 99久久99久久免费精品蜜桃 | 美女扒开屁股让男人桶 | 欧美日韩久久久精品a片 | 久久国产36精品色熟妇 | 内射白嫩少妇超碰 | 麻豆人妻少妇精品无码专区 | 亚洲色无码一区二区三区 | 少妇久久久久久人妻无码 | 久久精品国产一区二区三区肥胖 | 六十路熟妇乱子伦 | 无码毛片视频一区二区本码 | 粉嫩少妇内射浓精videos | 精品久久久久久人妻无码中文字幕 | 成人综合网亚洲伊人 | www成人国产高清内射 | 国内老熟妇对白xxxxhd | 在线精品亚洲一区二区 | 无套内谢的新婚少妇国语播放 | 中文字幕乱码人妻无码久久 | 日韩在线不卡免费视频一区 | 日本精品人妻无码77777 天堂一区人妻无码 | 国产网红无码精品视频 | 正在播放东北夫妻内射 | 成人精品视频一区二区三区尤物 | 久青草影院在线观看国产 | 最近中文2019字幕第二页 | 亚洲a无码综合a国产av中文 | 亚洲日韩av一区二区三区中文 | 亚洲aⅴ无码成人网站国产app | 精品无人国产偷自产在线 | 国精品人妻无码一区二区三区蜜柚 | 香港三级日本三级妇三级 | 国产精品成人av在线观看 | 精品无码成人片一区二区98 | 精品久久久中文字幕人妻 | 亚洲成av人影院在线观看 | 水蜜桃亚洲一二三四在线 | 亚洲热妇无码av在线播放 | 日日橹狠狠爱欧美视频 | 内射老妇bbwx0c0ck | 亚洲无人区午夜福利码高清完整版 | 国産精品久久久久久久 | 香蕉久久久久久av成人 | 精品久久久久久人妻无码中文字幕 | 国产精品嫩草久久久久 | 激情人妻另类人妻伦 | 久久综合给合久久狠狠狠97色 | 狠狠色丁香久久婷婷综合五月 | 东京无码熟妇人妻av在线网址 | 无码人妻久久一区二区三区不卡 | 熟女俱乐部五十路六十路av | 国产精品毛多多水多 | 风流少妇按摩来高潮 | 国产精品久久久久久久影院 | 国产精品无码成人午夜电影 | av人摸人人人澡人人超碰下载 | 丝袜 中出 制服 人妻 美腿 | 亚洲中文字幕av在天堂 | 亚洲国产精品美女久久久久 | 欧美丰满熟妇xxxx | 娇妻被黑人粗大高潮白浆 | 久久精品人妻少妇一区二区三区 | 日韩av无码一区二区三区 | 久久99国产综合精品 | 国产精品久久精品三级 | 日本xxxx色视频在线观看免费 | 成 人 网 站国产免费观看 | 人妻无码久久精品人妻 | 亚洲小说春色综合另类 | 国产综合色产在线精品 | 国产精品沙发午睡系列 | 久久久久av无码免费网 | 丝袜 中出 制服 人妻 美腿 | 婷婷五月综合缴情在线视频 | 在线观看免费人成视频 | 色综合久久久久综合一本到桃花网 | 在线观看免费人成视频 | 精品少妇爆乳无码av无码专区 | 国产网红无码精品视频 | 婷婷六月久久综合丁香 | 精品久久久无码人妻字幂 | 国产亚洲精品久久久久久国模美 | 四虎永久在线精品免费网址 | 无码中文字幕色专区 | 免费看男女做好爽好硬视频 | 爱做久久久久久 | 国产偷自视频区视频 | 久久午夜夜伦鲁鲁片无码免费 | 亚洲精品鲁一鲁一区二区三区 | 一个人看的www免费视频在线观看 | 色 综合 欧美 亚洲 国产 | 蜜桃av蜜臀av色欲av麻 999久久久国产精品消防器材 | 人人妻人人澡人人爽人人精品浪潮 | 亚洲综合在线一区二区三区 | 中文字幕久久久久人妻 | 国产精品亚洲lv粉色 | 色婷婷综合中文久久一本 | 九月婷婷人人澡人人添人人爽 | 在线欧美精品一区二区三区 | 国产成人av免费观看 | 欧美人与禽猛交狂配 | 亲嘴扒胸摸屁股激烈网站 | 荡女精品导航 | 熟妇女人妻丰满少妇中文字幕 | 熟女俱乐部五十路六十路av | 亚洲中文字幕在线无码一区二区 | 强伦人妻一区二区三区视频18 | 天天综合网天天综合色 | 人妻尝试又大又粗久久 | 日本熟妇大屁股人妻 | 强伦人妻一区二区三区视频18 | www成人国产高清内射 | 天堂无码人妻精品一区二区三区 | 人妻尝试又大又粗久久 | 欧美国产日韩久久mv | 东京无码熟妇人妻av在线网址 | 老子影院午夜伦不卡 | 精品国产av色一区二区深夜久久 | 波多野结衣av一区二区全免费观看 | 亚洲成a人片在线观看无码3d | 欧美日本日韩 | 大地资源中文第3页 | 国产电影无码午夜在线播放 | 久久精品国产99精品亚洲 | 奇米影视888欧美在线观看 | 国内精品人妻无码久久久影院蜜桃 | 久久午夜夜伦鲁鲁片无码免费 | 男女下面进入的视频免费午夜 | 久久无码中文字幕免费影院蜜桃 | 精品无人区无码乱码毛片国产 | 精品人妻av区 | 中文字幕人妻丝袜二区 | 人人澡人人透人人爽 | 久久久精品国产sm最大网站 | 精品久久久久久人妻无码中文字幕 | 国产国产精品人在线视 | 日韩精品无码一本二本三本色 | 精品日本一区二区三区在线观看 | 成年美女黄网站色大免费全看 | 欧美国产日产一区二区 | 久久综合给合久久狠狠狠97色 | 亚洲日韩精品欧美一区二区 | 亚洲呦女专区 | 久久久精品456亚洲影院 | 成人三级无码视频在线观看 | 无码毛片视频一区二区本码 | 亚洲精品成人福利网站 | 久久无码专区国产精品s | 男人扒开女人内裤强吻桶进去 | 亚洲va欧美va天堂v国产综合 | 成人无码精品一区二区三区 | 人妻少妇精品久久 | 欧美日本日韩 | 日本爽爽爽爽爽爽在线观看免 | 欧美xxxxx精品 | 亚洲а∨天堂久久精品2021 | 日本一区二区更新不卡 | 国产内射老熟女aaaa | 亚洲天堂2017无码 | 久久综合九色综合97网 | yw尤物av无码国产在线观看 | 377p欧洲日本亚洲大胆 | 亚洲精品一区二区三区婷婷月 | 亚洲天堂2017无码 | 老子影院午夜伦不卡 | 亚洲无人区一区二区三区 | 无码国产色欲xxxxx视频 | 76少妇精品导航 | 色综合久久网 | 日本大乳高潮视频在线观看 | 精品无码一区二区三区爱欲 | 波多野结衣aⅴ在线 | 亚洲综合精品香蕉久久网 | 九九在线中文字幕无码 | 日韩欧美成人免费观看 | 国产深夜福利视频在线 | 特级做a爰片毛片免费69 | 亚洲精品一区二区三区婷婷月 | 成人欧美一区二区三区黑人免费 | 青草青草久热国产精品 | 亚洲日韩av一区二区三区中文 | 中文字幕人成乱码熟女app | yw尤物av无码国产在线观看 | 成人无码精品一区二区三区 | 捆绑白丝粉色jk震动捧喷白浆 | 国产后入清纯学生妹 | 欧美怡红院免费全部视频 | 欧美性色19p | 免费观看又污又黄的网站 | 九九在线中文字幕无码 | 成人免费视频一区二区 | 欧美熟妇另类久久久久久多毛 | 亚洲精品国产a久久久久久 | 欧洲熟妇色 欧美 | 久久国产精品二国产精品 | 日本丰满护士爆乳xxxx | 国产内射老熟女aaaa | 在线观看国产午夜福利片 | a在线亚洲男人的天堂 | 妺妺窝人体色www在线小说 | 亚洲色在线无码国产精品不卡 | 色婷婷av一区二区三区之红樱桃 | 国产av无码专区亚洲awww | 水蜜桃亚洲一二三四在线 | 久久国产36精品色熟妇 | 国产在线无码精品电影网 | 日韩精品a片一区二区三区妖精 | 给我免费的视频在线观看 | 亚洲精品久久久久久久久久久 | 欧美日韩一区二区三区自拍 | 麻豆精品国产精华精华液好用吗 | 丰满肥臀大屁股熟妇激情视频 | 亚洲熟妇色xxxxx欧美老妇 | 老司机亚洲精品影院 | 亚洲人成网站免费播放 | 日日摸天天摸爽爽狠狠97 | 亚洲一区二区三区香蕉 | 国产特级毛片aaaaaaa高清 | 国产精品久久久午夜夜伦鲁鲁 | 成人影院yy111111在线观看 | 午夜福利不卡在线视频 | 国产激情无码一区二区app | 亚洲国产精品无码一区二区三区 | 中文字幕乱码人妻无码久久 | 日韩精品无码一区二区中文字幕 | 无码国产乱人伦偷精品视频 | 欧美 日韩 人妻 高清 中文 | 色情久久久av熟女人妻网站 | 日韩成人一区二区三区在线观看 | 免费网站看v片在线18禁无码 | 国产午夜亚洲精品不卡 | 99久久人妻精品免费二区 | 少妇无码av无码专区在线观看 | 成人欧美一区二区三区 | 亚洲精品一区二区三区四区五区 | 欧美野外疯狂做受xxxx高潮 | 亚洲码国产精品高潮在线 | 国产高清av在线播放 | 未满小14洗澡无码视频网站 | 色欲综合久久中文字幕网 | 精品午夜福利在线观看 | 日本成熟视频免费视频 | 中文久久乱码一区二区 | 婷婷六月久久综合丁香 | 久久99精品久久久久婷婷 | 久久国产精品萌白酱免费 | 人人妻人人澡人人爽欧美一区九九 | 日韩精品乱码av一区二区 | 久久久久久久人妻无码中文字幕爆 | 国产精品亚洲а∨无码播放麻豆 | 男人扒开女人内裤强吻桶进去 | 高清无码午夜福利视频 | 亚洲欧美日韩国产精品一区二区 | 麻豆国产97在线 | 欧洲 | 牲欲强的熟妇农村老妇女 | 亚洲一区二区三区无码久久 | 精品久久久无码中文字幕 | 麻豆成人精品国产免费 | 欧美老熟妇乱xxxxx | 亚洲阿v天堂在线 | 日欧一片内射va在线影院 | 性欧美大战久久久久久久 | 精品国产国产综合精品 | 国产精品久久久久影院嫩草 | 欧美阿v高清资源不卡在线播放 | 日本va欧美va欧美va精品 | 亚洲国产欧美国产综合一区 | 一本久久a久久精品vr综合 | 日韩人妻系列无码专区 | 欧美喷潮久久久xxxxx | 一本久久a久久精品vr综合 | 国产xxx69麻豆国语对白 | 中文字幕无码av激情不卡 | 国产suv精品一区二区五 | 国产成人无码av一区二区 | 色五月丁香五月综合五月 | 草草网站影院白丝内射 | 色综合视频一区二区三区 | 少妇久久久久久人妻无码 | 亚洲色欲色欲欲www在线 | 97人妻精品一区二区三区 | 少妇被粗大的猛进出69影院 | 美女黄网站人色视频免费国产 | 国产口爆吞精在线视频 | 搡女人真爽免费视频大全 | 精品日本一区二区三区在线观看 | 久久无码人妻影院 | 国产欧美精品一区二区三区 | 亚洲精品鲁一鲁一区二区三区 | 久久精品成人欧美大片 | 亚洲va中文字幕无码久久不卡 | 大地资源中文第3页 | 动漫av网站免费观看 | 蜜桃臀无码内射一区二区三区 | 日本护士xxxxhd少妇 | 丰满少妇女裸体bbw | 激情综合激情五月俺也去 | 狠狠色噜噜狠狠狠狠7777米奇 | 国产亚av手机在线观看 | 日本大乳高潮视频在线观看 | 在线成人www免费观看视频 | 亚洲精品国产第一综合99久久 | 亚洲无人区一区二区三区 | 午夜男女很黄的视频 | 精品 日韩 国产 欧美 视频 | 在线精品国产一区二区三区 | 中文无码成人免费视频在线观看 | 人妻无码久久精品人妻 | 国产亚洲精品久久久ai换 | 全黄性性激高免费视频 | 最近的中文字幕在线看视频 | 99精品视频在线观看免费 | 久久99精品久久久久久动态图 | 亚洲小说图区综合在线 | 白嫩日本少妇做爰 | 久久综合九色综合欧美狠狠 | 夫妻免费无码v看片 | 狠狠躁日日躁夜夜躁2020 | 久久精品人妻少妇一区二区三区 | 久久久成人毛片无码 | 欧美日韩综合一区二区三区 | 国产精品成人av在线观看 | 999久久久国产精品消防器材 | 日韩av无码中文无码电影 | 成人无码视频在线观看网站 | 国产片av国语在线观看 | 国精产品一区二区三区 | 麻花豆传媒剧国产免费mv在线 | 精品亚洲成av人在线观看 | 国产成人午夜福利在线播放 | 扒开双腿疯狂进出爽爽爽视频 | 亚洲热妇无码av在线播放 | 成人精品一区二区三区中文字幕 | 久久久久久av无码免费看大片 | 国产热a欧美热a在线视频 | 成人精品一区二区三区中文字幕 | 精品无码国产自产拍在线观看蜜 | 亚洲日韩乱码中文无码蜜桃臀网站 | 国产黄在线观看免费观看不卡 | 天天爽夜夜爽夜夜爽 | 国产精品无码mv在线观看 | 欧美国产日韩亚洲中文 | 亚洲色欲久久久综合网东京热 | 美女黄网站人色视频免费国产 | 亚洲色www成人永久网址 | 麻豆国产人妻欲求不满 | 麻豆md0077饥渴少妇 | 精品人妻人人做人人爽 | 国产美女极度色诱视频www | 国内精品人妻无码久久久影院蜜桃 | 99久久婷婷国产综合精品青草免费 | 国产片av国语在线观看 | 国产成人亚洲综合无码 | 国产成人久久精品流白浆 | 亚洲男人av香蕉爽爽爽爽 | 免费网站看v片在线18禁无码 | 国产性生交xxxxx无码 | 久久久久免费精品国产 | 67194成是人免费无码 | 又黄又爽又色的视频 | 精品成人av一区二区三区 | 日本大乳高潮视频在线观看 | 国内精品久久毛片一区二区 | 精品亚洲韩国一区二区三区 | 精品少妇爆乳无码av无码专区 | 亚洲热妇无码av在线播放 | 美女黄网站人色视频免费国产 | 国产亚洲精品久久久ai换 | 精品少妇爆乳无码av无码专区 | 久久无码专区国产精品s | 综合人妻久久一区二区精品 | 日本一区二区更新不卡 | 麻豆果冻传媒2021精品传媒一区下载 | 国产激情精品一区二区三区 | 中文字幕 亚洲精品 第1页 | 免费视频欧美无人区码 | 国产一区二区三区影院 | 亚洲一区二区三区含羞草 | 国产麻豆精品一区二区三区v视界 | 亚洲综合无码一区二区三区 | 欧洲vodafone精品性 | 色情久久久av熟女人妻网站 | 欧美人妻一区二区三区 | 亚洲区欧美区综合区自拍区 | 无码帝国www无码专区色综合 | 亚洲精品一区二区三区在线 | 爆乳一区二区三区无码 | 少妇厨房愉情理9仑片视频 | 少妇人妻大乳在线视频 | 国精品人妻无码一区二区三区蜜柚 | 国产成人无码a区在线观看视频app | 亚洲国产精品一区二区美利坚 | 色综合久久久无码中文字幕 | 老熟女重囗味hdxx69 | 国产成人综合美国十次 | 日本精品人妻无码免费大全 | 久久97精品久久久久久久不卡 | 欧美老熟妇乱xxxxx | 亚洲成av人综合在线观看 | 欧美日韩色另类综合 | 国产成人无码av一区二区 | 四虎4hu永久免费 | 日韩精品a片一区二区三区妖精 | 一本精品99久久精品77 | 少妇人妻av毛片在线看 | 成人女人看片免费视频放人 | 未满成年国产在线观看 | 亚洲中文字幕无码一久久区 | 日本护士xxxxhd少妇 | 欧美一区二区三区 | 亚洲日韩一区二区 | 中文字幕+乱码+中文字幕一区 | 国产成人一区二区三区别 | 99久久精品午夜一区二区 | 欧美人与物videos另类 | 大屁股大乳丰满人妻 | 亚洲精品久久久久avwww潮水 | 欧美日韩色另类综合 | 国产精品igao视频网 | 亚洲国产精品无码一区二区三区 | 18精品久久久无码午夜福利 | 久久精品国产一区二区三区 | 动漫av一区二区在线观看 | 国产精品永久免费视频 | 人妻插b视频一区二区三区 | aⅴ在线视频男人的天堂 | 无码吃奶揉捏奶头高潮视频 | 999久久久国产精品消防器材 | 国产成人一区二区三区在线观看 | 日日夜夜撸啊撸 | 日韩精品无码一区二区中文字幕 | 玩弄中年熟妇正在播放 | 国产精品久久久av久久久 | 亚洲成av人综合在线观看 | 日本一区二区更新不卡 | 一本精品99久久精品77 | 激情内射日本一区二区三区 | 国产精品美女久久久 | 国产国产精品人在线视 | 亚洲精品中文字幕乱码 | 亚洲精品国产精品乱码不卡 | 国产精品人妻一区二区三区四 | 久久99精品国产麻豆 | 性色av无码免费一区二区三区 | 国产精品久久久久久亚洲毛片 | 日本xxxx色视频在线观看免费 | 国产猛烈高潮尖叫视频免费 | 丰满妇女强制高潮18xxxx | 在线观看国产一区二区三区 | 亚洲伊人久久精品影院 | 国产精品内射视频免费 | 色爱情人网站 | 亚洲春色在线视频 | 美女扒开屁股让男人桶 | 亚洲国产欧美日韩精品一区二区三区 | 午夜福利电影 | 久久国产36精品色熟妇 | 国产偷自视频区视频 | 欧洲熟妇精品视频 | 中文字幕乱码人妻二区三区 | 欧美日韩综合一区二区三区 | 亚洲成av人综合在线观看 | 日本爽爽爽爽爽爽在线观看免 | 国产无套内射久久久国产 | 丰满人妻精品国产99aⅴ | 国产精品久久久久久久9999 | 国产农村妇女aaaaa视频 撕开奶罩揉吮奶头视频 | 亚洲综合色区中文字幕 | 精品久久久无码中文字幕 | 九九久久精品国产免费看小说 | 色五月丁香五月综合五月 | 红桃av一区二区三区在线无码av | 久久人妻内射无码一区三区 | 中文字幕乱码人妻无码久久 | 国产99久久精品一区二区 | 伊人久久大香线焦av综合影院 | 人妻少妇精品无码专区动漫 | 亚洲伊人久久精品影院 | 亚洲精品鲁一鲁一区二区三区 | 国产精品人人爽人人做我的可爱 | 性做久久久久久久免费看 | 色偷偷人人澡人人爽人人模 | 俺去俺来也在线www色官网 | 强伦人妻一区二区三区视频18 | 欧美午夜特黄aaaaaa片 | 国产成人无码专区 | 欧美丰满老熟妇xxxxx性 | 日韩精品无码一区二区中文字幕 | 未满成年国产在线观看 | 正在播放东北夫妻内射 | 亚洲小说春色综合另类 | 日本一卡2卡3卡4卡无卡免费网站 国产一区二区三区影院 | 久久人人爽人人人人片 | 精品 日韩 国产 欧美 视频 | 亚洲最大成人网站 | 亚洲无人区一区二区三区 | 最新国产乱人伦偷精品免费网站 | 青春草在线视频免费观看 | 精品偷自拍另类在线观看 | 亚洲日韩精品欧美一区二区 | 国产内射爽爽大片视频社区在线 | 国产无套内射久久久国产 | 综合网日日天干夜夜久久 | 欧美喷潮久久久xxxxx | 黑人大群体交免费视频 | 搡女人真爽免费视频大全 | 久久久久久久久888 | 亚洲成av人在线观看网址 | 久久综合九色综合97网 | 国产精品永久免费视频 | 欧美精品一区二区精品久久 | 亚洲国产av精品一区二区蜜芽 | 性色av无码免费一区二区三区 | 日本大乳高潮视频在线观看 | 中文字幕乱码人妻无码久久 | 久久久久久久人妻无码中文字幕爆 | 免费看男女做好爽好硬视频 | 国产又粗又硬又大爽黄老大爷视 | 丰满少妇女裸体bbw | 久久久久久九九精品久 | 美女张开腿让人桶 | 中文字幕无码视频专区 | 日本成熟视频免费视频 | 成人无码视频免费播放 | 丝袜人妻一区二区三区 | 沈阳熟女露脸对白视频 | 国产成人无码一二三区视频 | 欧美刺激性大交 | 国产亚洲美女精品久久久2020 | 亚洲人成人无码网www国产 | 欧美黑人巨大xxxxx | 男人的天堂av网站 | 又湿又紧又大又爽a视频国产 | 最近中文2019字幕第二页 | 97久久精品无码一区二区 | 内射爽无广熟女亚洲 | 少妇无码一区二区二三区 | 欧美激情内射喷水高潮 | 51国偷自产一区二区三区 | 日韩精品一区二区av在线 | 四虎永久在线精品免费网址 | 乌克兰少妇性做爰 | 欧美人与善在线com | 天下第一社区视频www日本 | 人妻有码中文字幕在线 | 人人超人人超碰超国产 | 国产黄在线观看免费观看不卡 | 日韩欧美中文字幕在线三区 | 亚洲国产成人av在线观看 | 亚洲男人av香蕉爽爽爽爽 | 中文字幕无码日韩专区 | 亚洲国产高清在线观看视频 | 无码av免费一区二区三区试看 | 国产精品a成v人在线播放 | 国产一区二区三区日韩精品 | 九月婷婷人人澡人人添人人爽 | 国产精品永久免费视频 | 2019nv天堂香蕉在线观看 | 少妇人妻大乳在线视频 | 中文字幕 亚洲精品 第1页 | 性做久久久久久久久 | 亚洲人成网站在线播放942 | 亚洲熟悉妇女xxx妇女av | 国产在线精品一区二区高清不卡 | aⅴ亚洲 日韩 色 图网站 播放 | 亚洲经典千人经典日产 | 中文字幕乱码人妻二区三区 | 荫蒂添的好舒服视频囗交 | 正在播放东北夫妻内射 | 伦伦影院午夜理论片 | 国产无遮挡吃胸膜奶免费看 | 精品日本一区二区三区在线观看 | 香港三级日本三级妇三级 | 精品久久久中文字幕人妻 | 极品尤物被啪到呻吟喷水 | 麻豆精产国品 | 国产精品第一国产精品 | 日韩精品一区二区av在线 | 国产99久久精品一区二区 | 天天躁日日躁狠狠躁免费麻豆 | 又粗又大又硬又长又爽 | 鲁大师影院在线观看 | 最近的中文字幕在线看视频 | 日本精品高清一区二区 | 国产无遮挡又黄又爽免费视频 | 欧美老妇与禽交 | 亚洲欧美日韩国产精品一区二区 | 精品久久久中文字幕人妻 | 国产成人综合色在线观看网站 | 国产无套粉嫩白浆在线 | 欧美激情一区二区三区成人 | 熟女体下毛毛黑森林 | 日韩欧美中文字幕在线三区 | 亚洲一区二区三区在线观看网站 | 我要看www免费看插插视频 | 日本丰满护士爆乳xxxx | 国内精品一区二区三区不卡 | 久在线观看福利视频 | 精品国产乱码久久久久乱码 | 国产国语老龄妇女a片 | 蜜臀aⅴ国产精品久久久国产老师 | 人人妻人人澡人人爽人人精品浪潮 | 日本一区二区三区免费高清 | 色窝窝无码一区二区三区色欲 | 大肉大捧一进一出视频出来呀 | 成人免费视频在线观看 | 强伦人妻一区二区三区视频18 | 玩弄少妇高潮ⅹxxxyw | 亚洲大尺度无码无码专区 | 性色欲情网站iwww九文堂 | 人人妻人人澡人人爽欧美精品 | 亚洲人成人无码网www国产 | 少妇性荡欲午夜性开放视频剧场 | 日韩av无码一区二区三区不卡 | 东京一本一道一二三区 | 强伦人妻一区二区三区视频18 | 国産精品久久久久久久 | 在线观看免费人成视频 | 日本一区二区更新不卡 | 亚洲成av人在线观看网址 | 999久久久国产精品消防器材 | 亚洲码国产精品高潮在线 | 在线播放免费人成毛片乱码 | 国产成人综合在线女婷五月99播放 | 亚洲娇小与黑人巨大交 | 人妻aⅴ无码一区二区三区 | 丰满人妻一区二区三区免费视频 | 欧美大屁股xxxxhd黑色 | 欧美人与禽zoz0性伦交 | 九一九色国产 | 一本色道婷婷久久欧美 | 中文字幕无线码免费人妻 | 亚洲 高清 成人 动漫 | 麻豆精品国产精华精华液好用吗 | 伊在人天堂亚洲香蕉精品区 | 久久99久久99精品中文字幕 | 黑森林福利视频导航 | 荫蒂添的好舒服视频囗交 | 55夜色66夜色国产精品视频 | 图片区 小说区 区 亚洲五月 | 国产精品99久久精品爆乳 | 亚洲日韩一区二区三区 | 国产内射爽爽大片视频社区在线 | 久久精品人人做人人综合试看 | 欧美猛少妇色xxxxx | 国产免费久久久久久无码 | 精品久久久久久人妻无码中文字幕 | 国产手机在线αⅴ片无码观看 | 日本xxxx色视频在线观看免费 | 伊人久久大香线蕉av一区二区 | 国产欧美精品一区二区三区 | 成人动漫在线观看 | 丰满人妻一区二区三区免费视频 | 兔费看少妇性l交大片免费 | 又大又黄又粗又爽的免费视频 | 成人一在线视频日韩国产 | 熟妇人妻无乱码中文字幕 | 欧美成人午夜精品久久久 | 又大又紧又粉嫩18p少妇 | 国产三级久久久精品麻豆三级 | 99麻豆久久久国产精品免费 | 国产午夜精品一区二区三区嫩草 | 中文字幕无码免费久久99 | 高潮喷水的毛片 | 3d动漫精品啪啪一区二区中 | 一本精品99久久精品77 | 欧美国产日韩久久mv | 国产成人一区二区三区在线观看 | 中文字幕色婷婷在线视频 | 久久天天躁狠狠躁夜夜免费观看 | 久青草影院在线观看国产 | 亚洲熟熟妇xxxx | 精品亚洲韩国一区二区三区 | 久久久久亚洲精品中文字幕 | 我要看www免费看插插视频 | 高清国产亚洲精品自在久久 | 中文字幕无线码免费人妻 | 国产69精品久久久久app下载 | 国产美女极度色诱视频www | 国产精品亚洲一区二区三区喷水 | 2020久久超碰国产精品最新 | 亚洲精品一区二区三区四区五区 | 成 人 免费观看网站 | 美女极度色诱视频国产 | 成 人 网 站国产免费观看 | 久久精品一区二区三区四区 | 亚洲国产精品无码一区二区三区 | 色婷婷综合激情综在线播放 | 国产午夜视频在线观看 | 午夜精品久久久久久久 | 少妇厨房愉情理9仑片视频 | 无码吃奶揉捏奶头高潮视频 | 亚洲综合无码久久精品综合 | 欧美人与动性行为视频 | 熟妇女人妻丰满少妇中文字幕 | 免费视频欧美无人区码 | 色综合久久久无码中文字幕 | 欧美 丝袜 自拍 制服 另类 | 2020久久超碰国产精品最新 | 亚洲中文字幕无码中字 | 亚洲精品国偷拍自产在线麻豆 | 97久久国产亚洲精品超碰热 | 亚洲国产高清在线观看视频 | 亚洲va欧美va天堂v国产综合 | av无码电影一区二区三区 | 日日摸日日碰夜夜爽av | 一本久道久久综合狠狠爱 | 国产极品美女高潮无套在线观看 | 国产亚av手机在线观看 | 精品久久久久香蕉网 | 精品日本一区二区三区在线观看 | 久久精品中文字幕大胸 | 亚洲精品一区国产 | 亚洲国产精品无码久久久久高潮 | 国产亚洲人成在线播放 | 国产特级毛片aaaaaa高潮流水 | 思思久久99热只有频精品66 | 亚洲精品一区二区三区四区五区 | 一本加勒比波多野结衣 | 性生交大片免费看女人按摩摩 | 国产三级久久久精品麻豆三级 | 国产成人无码av片在线观看不卡 | 波多野结衣aⅴ在线 | 免费国产成人高清在线观看网站 | 日韩人妻无码中文字幕视频 | 中文字幕乱码人妻无码久久 | 日本va欧美va欧美va精品 | 老子影院午夜精品无码 | 国产香蕉尹人综合在线观看 | yw尤物av无码国产在线观看 | 精品无人区无码乱码毛片国产 | 日本乱偷人妻中文字幕 | 蜜臀aⅴ国产精品久久久国产老师 | 荫蒂被男人添的好舒服爽免费视频 | 国产又爽又黄又刺激的视频 | 亚洲爆乳精品无码一区二区三区 | 午夜理论片yy44880影院 | 国产av无码专区亚洲a∨毛片 | 日韩人妻少妇一区二区三区 | 国产av一区二区精品久久凹凸 | 久久精品99久久香蕉国产色戒 | 亚洲欧美国产精品久久 | 国产精品亚洲专区无码不卡 | 亚洲 a v无 码免 费 成 人 a v | 狂野欧美性猛交免费视频 | 国产网红无码精品视频 | 无码人妻丰满熟妇区毛片18 | 免费无码av一区二区 | 97精品人妻一区二区三区香蕉 | 日韩无套无码精品 | 欧洲极品少妇 | 国产精品视频免费播放 | 中文字幕无码免费久久9一区9 | а√资源新版在线天堂 | 久久99精品国产.久久久久 | 午夜性刺激在线视频免费 | 亚洲第一网站男人都懂 | 成人无码视频在线观看网站 | 欧美日韩精品 | 又大又硬又黄的免费视频 | 少妇久久久久久人妻无码 | 色欲av亚洲一区无码少妇 | 少妇性荡欲午夜性开放视频剧场 | 中文字幕 人妻熟女 | 亚洲成熟女人毛毛耸耸多 | 精品aⅴ一区二区三区 | 久久人人97超碰a片精品 | 成 人 免费观看网站 | 亚洲色成人中文字幕网站 | 人人澡人人妻人人爽人人蜜桃 | 日本精品少妇一区二区三区 | 亚洲熟妇色xxxxx亚洲 | 国产美女极度色诱视频www | aⅴ亚洲 日韩 色 图网站 播放 | 国产精品久久久 | 国产美女极度色诱视频www | 成人精品一区二区三区中文字幕 | 欧美日韩色另类综合 | 一个人看的视频www在线 | 黑人粗大猛烈进出高潮视频 | 亚洲一区二区三区国产精华液 | 国产欧美熟妇另类久久久 | 国产美女精品一区二区三区 | 人妻互换免费中文字幕 | 国产香蕉尹人综合在线观看 | 2020最新国产自产精品 | 亚洲成a人片在线观看无码3d | 性开放的女人aaa片 | 成人无码精品一区二区三区 | 国产suv精品一区二区五 | 亚洲人成影院在线观看 | 国内老熟妇对白xxxxhd | 国产色在线 | 国产 | 人人爽人人爽人人片av亚洲 | 曰本女人与公拘交酡免费视频 | 亚洲国产精品一区二区美利坚 | 中文字幕 人妻熟女 | 久久久久se色偷偷亚洲精品av | 婷婷综合久久中文字幕蜜桃三电影 | 国内丰满熟女出轨videos | 人人爽人人澡人人高潮 | 男人和女人高潮免费网站 | 国产高清不卡无码视频 | a片在线免费观看 | www成人国产高清内射 | 亚洲s码欧洲m码国产av | 人人妻人人澡人人爽欧美精品 | 一二三四在线观看免费视频 | 久久久久久久久888 | 波多野42部无码喷潮在线 | 精品熟女少妇av免费观看 | 亚洲精品综合一区二区三区在线 | 综合激情五月综合激情五月激情1 | 国产肉丝袜在线观看 | 国产口爆吞精在线视频 | 婷婷丁香六月激情综合啪 | 国产亚洲精品久久久久久大师 | 国产性生大片免费观看性 | 国语自产偷拍精品视频偷 | 国产无套粉嫩白浆在线 | 天下第一社区视频www日本 | 亚洲精品一区二区三区大桥未久 | 欧美日韩一区二区综合 | 特级做a爰片毛片免费69 | 亚洲熟妇色xxxxx亚洲 | 亚洲国产精品无码久久久久高潮 | 亚洲乱码国产乱码精品精 | 无人区乱码一区二区三区 | 国产乱子伦视频在线播放 | 国产精品99爱免费视频 | 亚洲成av人综合在线观看 | 爽爽影院免费观看 | 色欲人妻aaaaaaa无码 | 露脸叫床粗话东北少妇 | 色综合久久久无码中文字幕 | 亚洲乱码中文字幕在线 | 欧美freesex黑人又粗又大 | 久久国产精品偷任你爽任你 | 天堂а√在线地址中文在线 | 亚洲精品美女久久久久久久 | 欧美人与物videos另类 | 亚洲aⅴ无码成人网站国产app | 久久无码专区国产精品s | 久久99精品久久久久婷婷 | 亚洲国产精品美女久久久久 | 精品国偷自产在线视频 | 精品久久8x国产免费观看 | 欧美喷潮久久久xxxxx | 在线a亚洲视频播放在线观看 | 久久综合网欧美色妞网 | 精品国产国产综合精品 | 免费网站看v片在线18禁无码 | 亚洲精品国偷拍自产在线麻豆 | 国产无套粉嫩白浆在线 | 国产另类ts人妖一区二区 | 日韩精品一区二区av在线 | 漂亮人妻洗澡被公强 日日躁 | 久9re热视频这里只有精品 | 色欲人妻aaaaaaa无码 | 亚洲精品综合五月久久小说 | 亚洲色无码一区二区三区 | 欧美熟妇另类久久久久久多毛 | 伊在人天堂亚洲香蕉精品区 | 日本又色又爽又黄的a片18禁 | 国产凸凹视频一区二区 | 国产又爽又猛又粗的视频a片 | 亚洲欧美精品aaaaaa片 | 精品人妻人人做人人爽夜夜爽 | 少妇激情av一区二区 | 九九在线中文字幕无码 | 国产人妻精品一区二区三区 | 国产农村妇女高潮大叫 | 亚洲国产成人a精品不卡在线 | 中文字幕人妻丝袜二区 | 性欧美大战久久久久久久 | 一本色道久久综合狠狠躁 | 久久天天躁狠狠躁夜夜免费观看 | 日本熟妇乱子伦xxxx | 日日夜夜撸啊撸 | 亚洲 另类 在线 欧美 制服 | 国产麻豆精品精东影业av网站 | av无码不卡在线观看免费 | 亚洲 欧美 激情 小说 另类 | 亚洲中文无码av永久不收费 | 人人妻人人澡人人爽人人精品浪潮 | 极品嫩模高潮叫床 | 久久精品国产99精品亚洲 | 国产精品嫩草久久久久 | 午夜精品久久久内射近拍高清 | 久久99久久99精品中文字幕 | 300部国产真实乱 | 免费乱码人妻系列无码专区 | 精品一二三区久久aaa片 | 国产综合在线观看 | 2020久久超碰国产精品最新 | 国产香蕉97碰碰久久人人 | 国产av一区二区精品久久凹凸 | 亚洲精品国偷拍自产在线观看蜜桃 | 久久国产精品偷任你爽任你 | 国产成人精品视频ⅴa片软件竹菊 | a在线亚洲男人的天堂 | 无遮无挡爽爽免费视频 | 精品国偷自产在线视频 | 人妻少妇精品视频专区 | 成人女人看片免费视频放人 | 国产美女极度色诱视频www | 精品偷拍一区二区三区在线看 | 六月丁香婷婷色狠狠久久 | 强伦人妻一区二区三区视频18 | 欧美日韩人成综合在线播放 | 亚洲成av人在线观看网址 | 窝窝午夜理论片影院 | 婷婷五月综合激情中文字幕 | 日韩av无码一区二区三区 | 在线播放免费人成毛片乱码 | 人妻熟女一区 | 丰满少妇女裸体bbw | 国产精品a成v人在线播放 | 2020最新国产自产精品 | 疯狂三人交性欧美 | 欧美成人家庭影院 | 男女作爱免费网站 | 中文字幕乱码人妻二区三区 | 精品成在人线av无码免费看 | 中国女人内谢69xxxx | 亚洲综合无码一区二区三区 | 无码av免费一区二区三区试看 | 国产乱人伦av在线无码 | 一本加勒比波多野结衣 | 精品国偷自产在线视频 | 久久99热只有频精品8 | 亚洲色偷偷偷综合网 | 国产精品久久久久久无码 | 97se亚洲精品一区 | 丝袜 中出 制服 人妻 美腿 | 人人超人人超碰超国产 | 性色欲网站人妻丰满中文久久不卡 | 午夜福利一区二区三区在线观看 | 男人和女人高潮免费网站 | 妺妺窝人体色www婷婷 | 51国偷自产一区二区三区 | 毛片内射-百度 | 美女毛片一区二区三区四区 | 免费播放一区二区三区 | 男女爱爱好爽视频免费看 | 美女张开腿让人桶 | 色综合天天综合狠狠爱 | 国产又爽又黄又刺激的视频 | 熟女体下毛毛黑森林 | 最近免费中文字幕中文高清百度 | 国产综合色产在线精品 | 久久久国产精品无码免费专区 | 亚洲精品中文字幕久久久久 | 午夜性刺激在线视频免费 | 在线精品亚洲一区二区 | 亚洲色欲色欲欲www在线 | 欧美老熟妇乱xxxxx | 国产精品久久久久久亚洲影视内衣 | 中国女人内谢69xxxxxa片 | 377p欧洲日本亚洲大胆 | 亚洲国产精品一区二区美利坚 | 国产性生交xxxxx无码 | 亚洲精品中文字幕乱码 | 无遮挡国产高潮视频免费观看 | 麻豆蜜桃av蜜臀av色欲av | 日韩人妻无码中文字幕视频 | 亚洲小说图区综合在线 | 无遮挡啪啪摇乳动态图 | 无码国产激情在线观看 | 少妇激情av一区二区 | 人妻体内射精一区二区三四 | 99久久无码一区人妻 | 色欲av亚洲一区无码少妇 | 波多野结衣av一区二区全免费观看 | 无码人妻久久一区二区三区不卡 | 久久久久亚洲精品男人的天堂 | 久久久久人妻一区精品色欧美 | 日韩欧美中文字幕公布 | 国产免费久久精品国产传媒 | 免费观看的无遮挡av | 女人被男人躁得好爽免费视频 | 国产成人无码av在线影院 | 18精品久久久无码午夜福利 | 国产无遮挡又黄又爽免费视频 | 色综合久久久久综合一本到桃花网 | 漂亮人妻洗澡被公强 日日躁 | 日本免费一区二区三区最新 | 牲交欧美兽交欧美 | 国产人妻久久精品二区三区老狼 | 欧美野外疯狂做受xxxx高潮 | 少妇被黑人到高潮喷出白浆 | 天天爽夜夜爽夜夜爽 | 成人三级无码视频在线观看 | а√天堂www在线天堂小说 | 午夜福利不卡在线视频 | 99精品无人区乱码1区2区3区 | 亚洲国产综合无码一区 | 婷婷综合久久中文字幕蜜桃三电影 | 成人免费无码大片a毛片 | 久久 国产 尿 小便 嘘嘘 | 亚洲国产日韩a在线播放 | 2019nv天堂香蕉在线观看 | 国色天香社区在线视频 | 欧美日韩在线亚洲综合国产人 | 黑人粗大猛烈进出高潮视频 | 免费视频欧美无人区码 | 欧美真人作爱免费视频 | 欧美黑人性暴力猛交喷水 | 亚洲天堂2017无码中文 | 久久久久99精品成人片 | 秋霞特色aa大片 | 日本一卡2卡3卡四卡精品网站 | 大胆欧美熟妇xx | 久激情内射婷内射蜜桃人妖 | 东京热男人av天堂 | 99精品国产综合久久久久五月天 | 亚洲日本va午夜在线电影 | 国产精品18久久久久久麻辣 | 久久无码人妻影院 | 国产性猛交╳xxx乱大交 国产精品久久久久久无码 欧洲欧美人成视频在线 | 久久99精品久久久久久 | 波多野42部无码喷潮在线 | 亚洲成a人片在线观看日本 | 国内精品久久久久久中文字幕 | 蜜桃av抽搐高潮一区二区 | 宝宝好涨水快流出来免费视频 | 少妇人妻av毛片在线看 | 国产精华av午夜在线观看 | 中文字幕乱妇无码av在线 | 久久综合网欧美色妞网 | 精品久久久无码人妻字幂 | 国产 精品 自在自线 | 国产免费无码一区二区视频 | 波多野结衣av一区二区全免费观看 | 国产深夜福利视频在线 | 2019午夜福利不卡片在线 | 亚洲精品欧美二区三区中文字幕 | 精品国偷自产在线视频 | 欧美 亚洲 国产 另类 | 国产莉萝无码av在线播放 | 中文字幕人妻丝袜二区 | 国产亚av手机在线观看 | 国产真实伦对白全集 | 欧美阿v高清资源不卡在线播放 | 一个人看的视频www在线 | 亚洲第一无码av无码专区 | 性欧美熟妇videofreesex | 精品aⅴ一区二区三区 | 97久久精品无码一区二区 | 亚拍精品一区二区三区探花 | 国产特级毛片aaaaaaa高清 | 亚洲爆乳大丰满无码专区 | 久久天天躁狠狠躁夜夜免费观看 | 99久久婷婷国产综合精品青草免费 | 97精品国产97久久久久久免费 | 在线欧美精品一区二区三区 | 少妇人妻偷人精品无码视频 | 熟女俱乐部五十路六十路av | 波多野结衣一区二区三区av免费 | 国内精品人妻无码久久久影院 | 久久这里只有精品视频9 | 玩弄人妻少妇500系列视频 | 欧美熟妇另类久久久久久不卡 | 国内少妇偷人精品视频 | 性做久久久久久久免费看 | 色婷婷综合激情综在线播放 | 亚洲欧洲日本综合aⅴ在线 | 国产精品办公室沙发 | 久久久久成人精品免费播放动漫 | 欧美国产日韩久久mv | 无码人中文字幕 | 国产三级久久久精品麻豆三级 | 日本护士xxxxhd少妇 | 九月婷婷人人澡人人添人人爽 | 欧美 丝袜 自拍 制服 另类 | 久久久久av无码免费网 | 久久精品视频在线看15 | 日本精品高清一区二区 | 国产日产欧产精品精品app | 国产一区二区三区四区五区加勒比 | 亚洲色大成网站www国产 | 四虎影视成人永久免费观看视频 | 久在线观看福利视频 | 国内精品久久久久久中文字幕 | 久久熟妇人妻午夜寂寞影院 | 亚洲阿v天堂在线 | 亚洲国产成人a精品不卡在线 | 天天综合网天天综合色 | 97无码免费人妻超级碰碰夜夜 | 内射巨臀欧美在线视频 | 在线成人www免费观看视频 | 内射白嫩少妇超碰 | 亚洲国产av美女网站 | 秋霞成人午夜鲁丝一区二区三区 | 国产明星裸体无码xxxx视频 | 国产激情综合五月久久 | 婷婷五月综合激情中文字幕 | 国产精品久久久午夜夜伦鲁鲁 | 1000部夫妻午夜免费 | 少妇无码av无码专区在线观看 | 国产精品嫩草久久久久 | 人妻尝试又大又粗久久 | 少妇人妻偷人精品无码视频 | 亚洲午夜福利在线观看 | 免费国产成人高清在线观看网站 | 亚洲男人av香蕉爽爽爽爽 | 婷婷丁香六月激情综合啪 | 久久久久免费精品国产 | 欧美xxxx黑人又粗又长 | 波多野42部无码喷潮在线 | 老司机亚洲精品影院无码 | 国产色xx群视频射精 | 亚洲国产一区二区三区在线观看 | 久久精品国产大片免费观看 | 日本一卡2卡3卡4卡无卡免费网站 国产一区二区三区影院 | 熟妇人妻激情偷爽文 | 日韩精品乱码av一区二区 | 成人一在线视频日韩国产 | 久久天天躁夜夜躁狠狠 | а√天堂www在线天堂小说 | 亚洲成av人片在线观看无码不卡 | aⅴ亚洲 日韩 色 图网站 播放 | 1000部夫妻午夜免费 | 人妻无码αv中文字幕久久琪琪布 | 真人与拘做受免费视频一 | 日产精品99久久久久久 | 色情久久久av熟女人妻网站 | 大胆欧美熟妇xx | 亚洲中文字幕无码中文字在线 | 少妇无码av无码专区在线观看 | 日韩人妻系列无码专区 | 亚洲热妇无码av在线播放 | 奇米影视7777久久精品 | 夜夜夜高潮夜夜爽夜夜爰爰 | 婷婷丁香六月激情综合啪 | 一本久道久久综合婷婷五月 | 亚洲乱码国产乱码精品精 | 99麻豆久久久国产精品免费 | 日日摸天天摸爽爽狠狠97 | 天天爽夜夜爽夜夜爽 | 2020最新国产自产精品 | 亚洲一区二区观看播放 | 亚洲日本一区二区三区在线 | 国产成人精品久久亚洲高清不卡 | 国产精品a成v人在线播放 | 波多野结衣aⅴ在线 | 少妇一晚三次一区二区三区 | 精品久久综合1区2区3区激情 | 国产精品亚洲а∨无码播放麻豆 | 亚洲国产欧美日韩精品一区二区三区 | 又大又硬又黄的免费视频 | 国产成人无码午夜视频在线观看 | 日韩精品一区二区av在线 | 国产成人无码av在线影院 | 午夜福利不卡在线视频 | 亚洲欧美中文字幕5发布 | 又大又硬又黄的免费视频 | 人人爽人人澡人人高潮 | 久激情内射婷内射蜜桃人妖 | 鲁大师影院在线观看 | 中文毛片无遮挡高清免费 | 5858s亚洲色大成网站www | 免费看少妇作爱视频 | 偷窥村妇洗澡毛毛多 | 久久久久久国产精品无码下载 | 动漫av网站免费观看 | 伊人久久大香线蕉亚洲 | 国产激情一区二区三区 | 午夜男女很黄的视频 | 台湾无码一区二区 | 亚洲日本在线电影 | 夜夜夜高潮夜夜爽夜夜爰爰 | 国产精品久久国产三级国 | 呦交小u女精品视频 | 国产艳妇av在线观看果冻传媒 | 最新版天堂资源中文官网 | 国产av一区二区精品久久凹凸 | 日本乱人伦片中文三区 | 娇妻被黑人粗大高潮白浆 | 波多野结衣高清一区二区三区 | 99国产精品白浆在线观看免费 | 99re在线播放 | 51国偷自产一区二区三区 | 青春草在线视频免费观看 | 97夜夜澡人人爽人人喊中国片 | 人妻少妇精品久久 | a在线亚洲男人的天堂 | 大地资源中文第3页 | 国精产品一区二区三区 | 亚洲综合久久一区二区 | 久久久久免费看成人影片 | 98国产精品综合一区二区三区 | 国产热a欧美热a在线视频 | 人人妻在人人 | 亚洲精品一区国产 | 久久婷婷五月综合色国产香蕉 | 亚洲国产一区二区三区在线观看 | 久久综合激激的五月天 | 国产欧美精品一区二区三区 | 中文字幕无码免费久久99 | 波多野结衣av在线观看 | 亚洲aⅴ无码成人网站国产app | 2019nv天堂香蕉在线观看 | 国产成人无码av一区二区 | 亚洲欧美国产精品专区久久 | 蜜桃av抽搐高潮一区二区 | 在线观看免费人成视频 | 亚洲成av人在线观看网址 | 久久精品中文字幕大胸 | 亚洲乱码中文字幕在线 | 丰满诱人的人妻3 | 成人一在线视频日韩国产 | 男女爱爱好爽视频免费看 | 亚洲欧美国产精品专区久久 | 天天摸天天碰天天添 | 激情国产av做激情国产爱 | 国产莉萝无码av在线播放 | 性欧美牲交xxxxx视频 | 国产熟妇高潮叫床视频播放 | 亚洲精品国产精品乱码不卡 | 嫩b人妻精品一区二区三区 | 自拍偷自拍亚洲精品10p | 青草青草久热国产精品 | 欧美放荡的少妇 | 最新国产麻豆aⅴ精品无码 | 蜜桃臀无码内射一区二区三区 | 亚洲精品一区二区三区大桥未久 | 丰满岳乱妇在线观看中字无码 | 兔费看少妇性l交大片免费 | 永久免费精品精品永久-夜色 | 天天爽夜夜爽夜夜爽 | 成人精品一区二区三区中文字幕 | 特黄特色大片免费播放器图片 | 欧美激情一区二区三区成人 | 欧美亚洲日韩国产人成在线播放 | 精品国产国产综合精品 | 女人和拘做爰正片视频 | 领导边摸边吃奶边做爽在线观看 | 精品国产一区二区三区四区在线看 | 日韩欧美中文字幕公布 | 国内精品一区二区三区不卡 | 精品人人妻人人澡人人爽人人 | 思思久久99热只有频精品66 | 国产精品亚洲一区二区三区喷水 | 99久久久无码国产精品免费 | 精品无人国产偷自产在线 | 中文字幕无码日韩欧毛 |