1、表字段的操作
    1、语法:alter table 表名 执行动作;
    2、添加字段(add)
        1、添加到末尾
            alter table 表名 add 字段名 数据类型;
        2、添加到第一列
            alter table 表名 add 字段名 数据类型 first;
        3、添加到指定位置
            alter table 表名 add 字段名 数据类型 after 字段名;
    3、删除字段(drop)
        alter table 表名 drop 字段名;
    4、修改字段数据类型(modify)
        alter table 表名 modify 字段名 新的数据类型;
    5、修改字段名(change)
        alter table 表名 change 旧字段名 新字段名 数据类型;
    6、修改表名(rename)
        alter table 表名 rename 新表名;
2、表记录的管理
    1、删除表记录
        1delete from 表名 where 条件;
        2、注意
            delete语句后如果不加where条件子句会将表中所有记录全部删除
        3、示例
            create table t4(
            id int(3) zerofill,
            name varchar(20),
            sex enum("boy","girl")
            );

            insert into t4 values
            (1,"Lucy","girl"),
            (2,"Tom","boy"),
            (3,"Bob","boy");

            select * from t4;
    2、更新表记录
        1update 表名 set 字段名=值1,字段名=值2,...,where 条件;
        2、注意
            update语句后如果不加where条件会将表中所有的值修改
        3、练习(见建表脚本MOSHOU.hero.txt)
            1、查找所有蜀国人的信息
                select * from hero where country="蜀国";
            2、查找女英雄的姓名、性别和国家
                select name,sex,country from hero where sex="女";
            3、把曹操的国籍改为蜀国
                update hero set country="蜀国" where name="曹操";
            4、把魏延的性别改为 女 ,国籍改为 泰国
            5、把id为2的记录的姓名改为司马懿,性别为男,国家为魏国
            6、删除所有的泰国人
            7、将表中所有的记录的国家改为吴国
            8、删除所有英雄的信息
3、运算符操作(配合查询、修改、删除)
    1、数值比较&字符比较
        1、数值比较运算符:=!=>>=<<=
        2、字符比较运算符:=!=
        3、练习
            1、找出攻击力高于150的英雄的名字和攻击力的值
            2、找出防御力值不是66的英雄信息
    2、逻辑比较
        1、运算符:and(多个条件同时满足) 
                             or(多个条件有一个满足即可)
        2、练习
            1、找出攻击值大于200的蜀国英雄的名字、攻击值及国家
            2、将吴国英雄中攻击值为110的英雄的攻击值设置为100,防御值设置为60
            3、查找蜀国和魏国的英雄信息
    3、范围内比较
        1、运算符:between andinnot in
        2、语法
            字段名 between 值1 and 值2
            字段名 in(值1,值2,...,值N)
            字段名 not in(值1,值2,...,值N)
        3、练习
            1、查找攻击值在100-200之间的蜀国英雄信息
            2、找到蜀国和吴国以外的国家的女英雄信息
            3、找到编号为1、3或5的蜀国英雄和貂蝉的编号、姓名、国家
    4、匹配空、非空
        1、空:is null
        2、非空:is not null
        3、练习
            1、查找姓名为空值(NULL)的蜀国男英雄信息
            2、查找姓名为空字符串("")的英雄信息
        4、注意
            1NULL :空值,必须用is或者is not去匹配
            2、""   :空字符串,用 = 或者 != 去匹配
                

               5.模糊比较
                           1.语法
                                字段名 like 表达式
                          2. 表达式
                                1. _ :匹配单个字符
                                2. %:匹配0到多个字符
                         3. 练习
                               1 select  id, name, from sanguo where  name like '_%_';
                               匹配名字中至少有两个字符
                              2. select id,name, from sanguo where name like '%';
                                匹配所有的
                             3.select id, name from sanguo where name like '___';
                                 匹配名字中至少有3个字符的
                               4. select id, name from sanguo where name like '赵%';
 
4. SQL查询
                   1. 总结(执行顺序)
                        3.  select ...聚合函数 from ...
                        1 . where...
                        2.  group by...
                        4.  having...
                        5.  order by...
                        6.  limit...
                    2. order by
                         1. 作用: 给查询的结果进行排序
                         2. 排序方法
                                1. ASC(默认):升序
                                2. DESC: 降序
                     3. 语法格式
                          order by 字段名   排序方法
                      4. 练习
                          1.将英雄信息按防御值从低到高排序 
                                  select * from sanguo order by fangyu ASC
                          2.将蜀国英雄信息按攻击值从高到低排序
                                  select * from sanguo where country='蜀国' order by gongji DESC
                           3 将蜀国两国的男英雄的名字为三个字的英雄按防御力升序排列


                        3.limit(永远在SQL语句的最后写)
                                 1.作用: 限制显示查询记录的条数
                                 2.用法
                                        1.limit  n-->显示几条记录
                                        2.limit m,n
                                            m->从第几条记录开始显示,n表示显示几条
                                                   m的值是从0开始计数,3则是表示从第四条记录开始
                                  3 练习
                                           1. 查找攻击值前三名且名字不为空值的蜀国英雄的姓名,攻击值和国家
                                            select name,gongji country from sanguo
                                            where
                                            name is not null and country ='蜀国
                                            order by gongji desc
                                            limit 3;
                                            2. 查找防御值倒数第二名到倒数第四名的蜀国英雄记录
                                             select * from sanguo
                                             where country='蜀国'
                                             order by fangyu asc
                                             limit 1, 3;
                          4. 聚合函数
                                   1.分类
                                          1.avg(字段名) : 求字段的平均值
                                          2. sum(字段名) : 求字段的和
                                          3. max(字段名) :求字段的最大值
                                          4. min(字段名) :求字段的最小值
                                          5.count(字段名) :统计该字段的记录个数
                                     2.练习
                                          1.  攻击力最强值是多少? 
                                                select max(gongji) from sanguo;
                                          2, 统计一下啊表中id,name字段分别有多少条记录
                                                select count(id), count(name) from sanguo;
                                               ##空值NULL不会被统计,空字符串""会被统计
                                           3.计算一下蜀国英雄的总攻击力
                                                select sum(gongji) from sanguo where country ='蜀国';
                                            4.统计蜀国英雄中攻击力大于200的英雄
                                               select count(*) from sanguo where country='蜀国' and gongji>200;

                                   
                              5. group by 
                                       1. 作用:给查询的结果进行分组
                                       2. 练习
                                           1. 查询三国表中一共有几个国家
                                                  select country from sanguo group by country
                                           2. 计算各个国家的平均攻击力
                                                  select country avg(gongji) from sanguo group by country 
                                           3. 查找所有国家中英雄数量最多的前两名的国家名称和英雄数量
                                               select country,count(*) from sanguo 
                                                group by country
                                                order by desc limit 2;

                                        3.注意
                                           1. group by 之后的字段名必须要为select之后的字段名相同
                                           2.如果select之后的字段和group by 之后的字段名不一致,则必须要对该字段名进行聚合处理(聚合函数)

 
                                6. having 语句
                                       1.作用: 对查询的语句进行进一步的删选
                                       2.练习 
                                             1.找出平均攻击力大于105的国家的前两名,显示国家名和平均攻击力
                                                   select country, avg(gongji) from sanguo 
                                                   group by country 
                                                   having  avg(gongji) >105
                order by avg(gongji) desc
                                                   limit 2;
                                         3.注意
                                            1.having语句通常与group by语句联合使用,用于过滤由group by 语句返回的记录集
                                             2.having语句的存在弥补了where条件子句不能与聚合函数联合使用的不足,where只能操作表中实际操作的值
                                             ,having操作的是聚合函数生成的列
                                    7. distinct
                                            1.作用:不显示字段的重复值
                                            2 .练习
                                                  1.sanguo表中有哪几个国家
                                                       select distinct country from sanguo
                                                       #多个字段用逗号隔开
                                                   2. 计算蜀国一共有多少个英雄
                                                      select count(distinct name) from sanguo where country='蜀国';
                                                   3. 注意
                                                       1. distinct 处理的是di'stinct 与 from 之间的所有字段,全部相同才能去重
                                                        2. distinct 不能对任何字段做聚合处理
                                       8. 查询表记录时做数学运算
                                              1. 运算符
                                                    +-, * ,/. %
                                              2. 练习
                                                   1. 查询显示所有英雄的攻击力全部 乘以10
                                                      select id, name, country, gongji*10 as xgj from sanguo 
                                                   2 查询时显示所有英雄的防御力+5
                                                      select id, name, country, gongji+5 as xgj from sanguo 

5. 约束
        1.作用
               为了保证数据的完整型,
                可以限制无效的数据插入到数据表中
         2. 约束分类
             1.默认约束(default)
                 1 作用: 在插入记录时,如果不给该字段赋值,则使用默认值
                 2 格式: 字段名, 数据类型 default值
              2,非空约束(not null) 
                   1.作用:不允许该字段的值有NULL记录
                    2.格式 :字段名 数据类型 not null 

6. 索引 
          1.定义
               对数据库中表的一列或者多列的值进行排序的一种结构
                (MySQL中用BTREE方式)
                   MySQL 中支持分三层

           2. 优点 
              1. 可以加快数据的检索速度
           3. 缺点
               1. 当你对表中的数据进行增加修改和删除的时候索引也要动态维护,降低了数据的维护速度;
               2. 索引需要占用物理空间
            4. 索引类型
               1. 普通索引(index)
                     1. 使用规则
                          1 一个表中可以有多个index字段
                          2. 字段的值可以有重复,且可以为NuLL值
                          3. 经常把做查询条件的字段设置为index字段
                          4  index字段的key标志是MUL
                      2 创建index
                           1. 创建表时创建
                               index(字段名1), index(字段名2)
                            2. 在已有表中创建index
                               create index 索引名(字段名) on 表名(字段名)
                            3.注意
                               索引名一般和字段名相同
                       3.  查看普通索引
                            1. desc 表名; -->查看key标志为MUL
                            2. show index from 表名
                        4. 删除普通索引
                              drop index 索引名 on 表名
                              注意:
                                  删除索引只能一个一个删除
                         
                 2. 唯一索引
                 3. 主键索引
                 4. 外键索引       

 

posted on 2018-07-29 21:58  python我的最爱  阅读(318)  评论(0编辑  收藏  举报