MySQL高级数据操作

多数据操作

insert into 表名 [(字段列表)] values(值列表),(值列表)…;


主键冲突

  • 插入数据的主键和已经存在的数据的主键名称一样,则会报主键冲突
  • 主键冲突更新(如果存在主键,则将主键的值更新为新的数据)
    • insert into 表名 [(字段列表)] values(值列表) on duplicate key update 字段 = ‘新值’;
  • 主键冲突替换
    • replace into [(字段列表)] values(值列表);

蠕虫复制

  • 一分为二,成倍增加,从已有的数据中获取数据,并且将获取到的数据插入到数据表中
  • insert into 表名 [(字段列表)] select *(或者字段列表) from 其他表;

更新数据

  • 有条件更新
  • update 表名 set 字段名 = 新值 where 判断条件;
  • 无条件更新
  • update 表名 set 字段名 = 新值 limit 数量;

删除数据

  • delete删除数据的时候,无法重置自增长ID,此时可以 truncate 表名;来解决问题

查询数据

  • 完整的查询指令:select 选项 字段列表 from 数据源 where 条件 group by 分组 having 条件 order by 排序 limit 限制;
    • select 选项 : 系统该如何对待查询得到的结果
      • all : 默认的,表示保存所有的记录
      • distinct : 去重,去重重复的记录,只保留一条(所有的字段都相同)
    • 字段列表 : 有时候需要从多张表中获取数据,在获取数据的时候,可能存在不同表中有同名的字段,需要将同名的字段命名成不同名的 : 别名 alias
      • 字段名 [as] 别名;
    • from数据源
      • 单表数据 : from 表名;
      • 多表数据 : from 表1,表2...;,结果是两张表的记录数相乘,字段数拼接,应该避免出现这种情况
      • 动态数据 : from 后面跟的不是一个实体表,而是从一个表中查询出来的二维结果表(子查询);语法为 : from (select 字段列表 from 表名) as 别名;
    • where 子句
      • 用来在从数据表获取数据的时候,进行条件筛选
    • group by
      • 根据指定的数据将数据分组,是为了进行分组后进行数据统计的,分组后只会显示每组的第一条记录,所以并不能用group来看数据
      • group 组名;
    • 回溯统计

      group by 字段 [asc|desc] with rollup;


having 子句

  • having 是在group by 子句之后,group by 是在where之后,where的时候表示将数据从磁盘拿到内存,where之后的所有操作都是内存操作.可以针对分组数据进行统计筛选,但是where不行.
  • where 不能用聚合函数
  • having是对统计结果进行操作的

order by

order by 字段 [asc|desc];


内连接(inner join)

  • 从一张表中取出所有的记录去另外一张表中匹配,利用匹配条件进行匹配,成功了则保留,失败了就放弃.
  • 语法: 表1 [inner] join 表2 on 匹配条件;

外连接

  • outer join : 按照某一张表作为主表(表中所有记录在最后都会保留),根据条件去连接另外一张表,从而得到目标数据.
  • 外连接分为两种:左外连接(left join),右外连接(right join)
    • 左连接:左表示主表,语法 : 主表 left join 从表 on 连接条件;
    • 右连接:右表示主表,语法 : 从表 right join 主表 on 连接条件;

using

  • 在连接查询中用来代替对应的on关键字的,进行条件匹配
  • 使用using的前提是对应的两张表连接的字段是同名的
  • 如果使用using关键字,那么对应的同名字段,最终在结果中只会保留一个
  • 语法 : 表1 [inner,left,right] join 表2 using(同名字段列表);
发布了145 篇原创文章 · 获赞 38 · 访问量 17万+

猜你喜欢

转载自blog.csdn.net/yehuaner33/article/details/100092197
今日推荐