zoukankan      html  css  js  c++  java
  • 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表示最多获取对应数量,但是如果数量不够,系统不会强求(记录不够就有多少拿多少,不报错)

  • 相关阅读:
    2016"百度之星"
    codeforces 55 div2 C.Title 模拟
    codeforces 98 div2 C.History 水题
    codeforces 97 div2 C.Replacement 水题
    codeforces 200 div2 C. Rational Resistance 思路题
    bzoj 2226 LCMSum 欧拉函数
    hdu 1163 九余数定理
    51nod 1225 余数的和 数学
    bzoj 2818 gcd 线性欧拉函数
    Codeforces Round #332 (Div. 2)D. Spongebob and Squares 数学
  • 原文地址:https://www.cnblogs.com/lszbk/p/12312639.html
Copyright © 2011-2022 走看看