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)

猜你喜欢

转载自blog.csdn.net/extremelove520/article/details/82800145