多数据操作
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;
- select 选项 : 系统该如何对待查询得到的结果
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(同名字段列表);