• Mysql数据操作指令


    -----多数据插入-----
    只要写一次insert指令,但是可以直接插入多条记录
    insert into table values(),(),();

    主键冲突
    我们插入值的时候,主键中已经存在某个值,插入重复值引起主键冲突
    两种解决方案
    1. 主键冲突更新 duplicate key--主键冲突
    类似插入数据语法,如果插入的过程中主键冲突,那么采用更新方法
    #insert into 表名 [(字段列表)] values(值列表) on duplicate key update 字段 = 新值;
    eg: insert into my_student values('stu0004','小婷') on duplicate key update stu_name = '小婷';
    2. 主键冲突替换
    当主键冲突之后,干掉原来的数据,重新插入进去
    Replace into [(字段列表)] values(值列表);
    判断->干掉->插入

    蠕虫复制
    一分为二,成倍增加,从已有的数据中获取数据,并且将获取到的数据插入到数据表中
    #insert into 表名[(字段列表)] select */字段列表 from 表;
    注意:
    1. 蠕虫复制的确通常是重复数据,没有太大业务意义,可以在短期内快速增加表的数据量,从而可以测试表的
    压力,还可以通过大量数据来测试表的效率(索引)
    2. 蠕虫复制虽好,但时要注意主键冲突


    ---------高级查询---------
    完整的查询指令:
    #select select 选项 字段列表 from 数据源 where 条件 group by 分组 having 条件 order by 排序 limit 限制;

    Select 选项:系统该如何对待查询得到的结果
    ALL:默认的,表示保存所有的记录
    Distinct:去重,去除重复的记录,只保留一条(所有字段都相同)

    字段列表:有的时候需要从多张表获取数据,在获取数据的时候,可能存在不同表中有同名字段,需要将同名的字段命名成不同命的:
    利用别名 alias
    语法: 字段名 [as] 别名

    数据源:from后面根的数据不是一个实体表,而是一个从表中查询出来得到的二维结果表(子查询)
    基本语法:from(select 字段列表 from 表) as 别名
    eg:select * from (select int_1,int_8 from my_int) as int_my;

    where:条件筛选

    group by:根据指定字段,对数据分组,分组目标为了统计
    如果只想看数据显示,那么group by没什么含义:group by将数据按照指定的字段分组之后,只会保留每组的第一条记录
    统计函数(聚合函数):
    count():统计每组中的数量,如果统计目标是字段,那么不统计为空Null字段,如果为count(*)就代表统计记录
    avg():平均数
    sum():求和
    max():最大值
    min():最小值
    Group_concat():为了将分组中指定的字段进行合并(字符串拼接)

    group by多分组:将数据按照某个字段进行分组之后,对已经分组的数据进行再次分组
    #基本语法:group by 字段1,字段2;//先按照字段1进行排序,之后将结果在按照字段2进行排序,以此类推
    eg:select class_id,gender,count(*),group_concat(stu_name) from my_student group by class_id,gender;
    分组排序:
    在MySQL中,分组默认有排序的功能:按照分组字段进行排序,默认是升序
    基本语法:group by 字段[asc|desc],
    eg:select class_id,gender,count(*),group_concat(stu_name) from my_student group by class_id asc,gender desc;
    回溯统计:当分组进行多分组之后,往上统计的过程中,需要进行层层上报,将这种层层上报统计的 过程称之为回溯统计:每一次分组向上统计
    的过程都会产生一次新的数据,而且当前数据对应的分组字段为NULL
    基本语法:group by 字段[asc|desc] with rollup;//向上滚动
    大致就是将每次向上回滚的数据进行统计展示 字段是null

    Having子句:本质和where一样,是用来进行数据条件筛选
    1. Having是在group by子句之后:可以针对分组数据进行筛选,但是where不行(顺序)
    2. having在group by 分组之后,可以使用聚合函数或者字段别名
    eg:select class_id,count(*) as number from my_student group by class_id having number >=4;
    eg:select class_id,count(*) as number from my_student group by class_id having count(*) >=4;
    五子句都可以存在,但是必须要按照顺序,Where能做的Having都可以做,但是having是在group by之后进行操作的
    强调:having是在group by之后,group by是在where之后:where的时候表示将数据从磁盘拿到内存,where之后的所有操作都是内存操作

    Order by子句:
    根据校对规则对数据进行排序
    基本语法:order by字段 [asc|desc]
    -- 班级学生按照身高排序
    select * from my_student order by stu_height asc;
    order by 也可以像group by一样进行多字段排序,先按照第一个字段进行排序,然后再按照第二个字段进行排序
    order by 字段1 规则,字段2 规则;

    limit子句:
    limit限制子句:主要是用来限制记录数量获取
    记录数限制:纯粹限制获取的数量,从第一条到指定的数量
    基本语法:limit 数量;
    分页:
    利用limit来限制获取指定区间的数据
    基本语法:limit offset,length;//offset偏移量:从哪开始,length就是具体获取多少条记录
    MySQL中记录的数量从0开始
    limit 0,2;//表示获取前两条记录
    --分页获取数据
    select * from my_student limit 0,2;
    select * from my_student limit 2,2;//这个取到的是第三条和第四条记录
    注意:limit后面的length表示最多获取对应数量,但是如果数量不够,系统不会强求(记录不够就有多少拿多少,不报错)

  • 相关阅读:
    非常抱歉,全站内容审核中...
    jS代码总结(2)
    timestamp(数据库中的数据类型)
    jS代码总结(1)
    TextWriterTraceListener 和设计时属性支持文件xmta
    validating和validated的区别
    IoC和控制反转
    wince BindingSource
    简单网络传递加密数据
    C#不对称加密
  • 原文地址:https://www.cnblogs.com/lszbk/p/12312639.html
Copyright © 2020-2023  润新知