数据操作高级操作
数据操作包括CRUD,增删改查
插入数据
基本语法:insert into 表名 [(字段列表)] values (值列表),…
蠕虫复制:将已有的数据直接插入到表中
语法:insert into 表名 [(字段列表)] select [字段列表] from 表名(可以是自己,也可以是其他表)
蠕虫复制一般用于测试使用,测试服务器的压力和执行时间。
当 主键 冲突时处理,正常情况下主键冲突则不能进行数据插入,从而报错。
当主键插入冲突时,需要执行更新操作
语法:insert into 表名 values (值列表) on duplicate key update 字段=值,…
mysql还提供了一种冲突解决方式
语法:replace into 表名 value(值列表); — 当原来的主键已经存在时则覆盖
更新数据
标准语法:update 表名 set 字段=值,… where条件
搭配order by和limit进行更新;order by对字段进行排序,limit 限制受影响的行数
语法:update 表名 set 字段=值 where条件 order by limit
删除数据
标准语法:delete from 表名 where条件
搭配order by和limit进行更新
语法:delete from 表名 [where条件] [order by 字段] [limit 数量]
采用delete并不会改变当前自增长值
有什么办法能够清空数据同时,还重置自增长值呢?
drop 表名,create表名
语法:truncate 表名,第一步:删除表,第二步:创建表
查询数据
标准语法:select *[字段列表] from 表名 [where条件]
详细语法:select [select选项] [字段列表|表达式] [from子句:表名|表名列表] [where子句] [group by子句] [having 子句] [order by 子句] [limit子句]
特别注意:五子句的顺序不能乱,可以只有部分或者全部都没有。
select 选项:all和distinct
all:表示获得全部数据,不管数据是否重复,默认的是all
distinct:去重,指的是对整个记录进行去重,如果两条记录完全一致则被认为是重复。
表达式:凡是能返回结果的语句都是表达式
select 1 + 10;
字段别名
字段 [as] 别名
不适用as
from子句
指定数据源
语法:from 表名
还可以从多张表里获取数据
语法:from 表名1,表名2,…
1.将第一张表的第一条数据与第二张表的每一条数据进行拼接,然后保存该数据
2.结果数据:字段数 = 两张表字段数之和,记录数 = 两张表记录数相乘
以上获得的内容在数学上被称之为: 笛卡尔积
笛卡尔积在数据库中没有意义,所以应当尽量避免。
虚拟表:dual,虚拟的意思
mysql为了保证语句结构的完整性而存在的,并没有真实的表和真实的数据。
from子句可以对数据源使用别名
from 表名 [as] 别名
where子句
用来筛选满足条件的数据
where本身不能筛选,而是通过一些筛选的表达式来实现。
where表达式:逻辑表达式(&&and,||or,!not),比较表达式(<,<= > >= = != <> in not in between-and is like any some all)
where 条件1 and 条件2:两个条件都必须满足
=:mysql里=表示比较,当然也可以是赋值
in:在一个集合内
语法:字段 in (条件集合)
not in刚好取相反的数据
between and:在某个范围之内,是闭区间
语法:between 条件1 and 条件2,包含条件1和条件,条件1必须 小于 条件2
is:因为null和任何数据的计算都会得到null结果,没有办法进行比较,只能通过is null或者is not null来对null属性数据进行判断。
判断数据为空
any,some和all对应的条件应该是子查询的结果。不能直接给出条件。
where子句原理:
where子句之后,所有的操作都是针对内存里的结果进行操作。
group子句
group就是对结果进行分组
语法:group by 字段名
分组是为了统计
将所有的数据按照分组字段先进行排列,所以非分组的信息基本没有用。
一系列统计函数:基本都是针对某个字段,count除外
count:统计记录数,不统计为NULL的记录
max:获取最大值
min:获取最小值
avg:获得平均值
sum:求和
group by原理
group_concat():将分组内的某个字段进行拼接显示
count:统计不为空的所有字段
多字段分组
语法:group by 字段1,字段2,。。。。。
group排序功能,group会对分组的字段进行排序。默认是升序排序
语法:group by 字段 [asc|desc]
回溯统计
将数据进行多字段分组之后,每次在向上一次统计之前,系统会对前一个字段的结果进行一次统计。
语法:with rollup