1. 程式人生 > >Mysql高階查詢,約束,索引

Mysql高階查詢,約束,索引

1、高階查詢

              (1)總結

                        3、select ... 聚合函式   from  表名

                        1、where ...

                        2、group  by ... 

                        4、having ...

                        5、order  by ...

                        6、limit ...; 



            (2)order   by:給查詢結果排序

                     order  by  欄位名  ASC(升序,是預設的)/DESC(降序)

                     

            (3)limit (永遠放在SQL命令的最後寫)

                       顯示查詢記錄的條數

                       用法:

                            limit n;  --->顯示 n  條記錄

                            limit    m,n;  ----->從第m + 1條記錄開始顯示n條記錄

                            limit   2,3; 顯示第3,4,5三條記錄

           (4)分頁

                     每頁顯示5條記錄,顯示第4頁的內容

                      第1頁:limit  (1-1)*5,5   # 1  2  3  4  5

                      第2頁:limit  (2-1)*5,5    #6   7   8  9  10

                      第3頁:limit  (3-1)*5,5    #11  12  13  14  15

                      ...

                      第m頁:limit  (m-1)*n,n  

         (5)聚合函式

                分類

             avg(欄位名)  :   求該欄位的平均值

             sum(欄位名)  :   求和

             max(欄位名)  :   求最大值

             min(欄位名)  :    求最小值

             count(欄位名)  :   統計該段記錄的個數  



        (6)group  by:給查詢的結果進行分組

              計算每個國家的平均攻擊力:

                select country,avg(gongji) from sanguo group by country;

                   先分組      再聚合        再去重

         注意: 

               select 之後的欄位名如果沒有在group  by  之後出現,則必須要對該欄位進行聚合(聚合函式)                 


          (7)、having語句

                   作用:對查詢結果進行進一步的帥選

                   練習:找出平均攻擊力大於105的國家的前2名,顯示國家名和平均攻擊力

                         mysql> select country,avg(gongji) from sanguo group by country

                         -> having avg(gongji)>105

                         -> order by avg(gongji) DESC

                         -> limit 2;


              注意:

                     1、having語句通常和group  by  語句聯合使用,過濾由group  by 語句返回的記錄集

                     2、where只能操作表中實際存在欄位,having語句可操作由聚合函式生成的顯示列
                
         (8)distinct:不顯示欄位的重複值

                  語法:select distinct  欄位1,欄位2   from 表名

                  select count(distinct country) as n from sanguo;

                  注意:distinct和from之間的所有欄位值都相同才會去重

         (9)查詢表記錄時可以做數學運算

                運算子:+    -     *    /     % 

                示例: select id,name,gongji*2 from sanguo;

       2、約束:
              (1)、作用:保證資料的一致性、有效性 

              (2)、約束分類:

                  ①預設約束(default)

                    插入記錄時,不給該欄位賦值,則使用預設值

                    sex   enum("M","F","S") default  "S"

                  ②非空約束(not  null)

                    不允許該欄位的值為NULL

                    id  int  not  NULL

                    id  int  not  NULL default 0 
      3、索引:
             對資料庫中的一列或多列的值進行排序的一種結構(BTree)

         (1)普通索引(index)

                        使用規則: 

                                      ① 可設定多個欄位,欄位值無約束

                                      ②把經常用來查詢的欄位設定為索引欄位

                                      ③KEY標誌:MUL

                        普通索引的建立:

                                     ①建立表時建立

                                        create table t1(

                                          ...,

                                          ...,

                                         index(name),

                                         index(id);

                                     ②已有表中建立:

                                               create index 索引名 on 表名(欄位名);

                        檢視索引:

                                   ①desc  表名;

                                   ②show  index from 表名\G;

                        刪除普通索引:

                                 drop  index   索引名  on  表名;      

                          

              (2)唯一索引(unique)

                         ①使用規則:

                                     可以設定多個欄位

                                     約束:欄位值允許重複,但可以為NULL

                                     KEY標誌:UNI

                       ②建立:

                                    建立表時建立

                                              unique(phnumber),

                                              unique(cardnumber)

                                     已有表建立:

                                            create unique  index  索引名  on  表名

                       ③檢視、刪除同普通索引

              (3)主鍵索引(primary key)

                        ① 使用規則:

                               一個表中只能有一個欄位為主鍵欄位

                            約束:

                               欄位值不允許重複,也不能為NULL

                                KEY標誌:PRI

                                通常設定記錄編號欄位為id,能夠唯一鎖定一條記錄

                        ② 建立:

                              建立表時:

                                   方法1: id int  primary  key auto_increment,

                                                name varchar(20) not null

                                                )auto_increment=10000,charset=utf8,engine=InnoDB;

                                **InnoDB,MyISAM 
                                 兩種型別有什麼區別:MyISAM型別不支援事務處理等高階處理,而InnoDB型別支援。 
                                                    MyISAM型別的表強調的是效能,其執行數度比InnoDB型別更快,但是不提供事務支援,而                                                        InnoDB提供事務支援,外來鍵等高階資料庫功能。

                                                    MyISAM型別的二進位制資料檔案可以在不同作業系統中遷移。也就是可以直接從Windows系統拷貝                                                        到linux系統中使用。  

                                             alter table 表名 auto_increment=10000;

                                                                 

                                  方法2 :id int auto_increment,

                                             name varchar(20),

                                             primary  key(id,name) #複合主鍵

                              已有表:

                                    alter table 表名 add primary_key(id);

                       ③刪除主鍵

                                   先刪除自增長屬性(modify)

                                   alter table 表名  modify  id  int 

                                   刪除主鍵:

                                     alter  table  表名  drop  primary key;       


              (4)外來鍵(foreign key)