多条插入
基本语法:insert into 表名 [(字段列表)] values(值列表),(值列表);
insert into my_table values('张三'),('李四'),('王五');
主键冲突
在有的表中,使用的是业务主键,但是在插入数据的时候,不确定表中已经存在对应的主键
主键冲突的解决方案:
-
主键冲突更新
insert into 表名 [(字段列表)] values(值列表) on duplicate key update 字段=新值
-
主键冲突替换
Replace into[字段列表] values(值列表);
蠕虫复制
一分为二,成倍增加,从已有数据中获取数据,并且将获取到的数据插入到数据表中
基本语法:insert into 表名 [(字段列表)] select */字段列表 from 表
作用:
1、快速扩充数据进行数据表压力及效率测试
2、复制表内容:第一步复制表结构,第二步通过蠕虫复制数据
从生产环境复制到开发环境中进行测试
更新数据
1、在更新数据的时候,特别注意:通常一定是跟随条件更新
Update 表名set 字段名=新值 where 判断条件
2、如果没有条件,是全表更新数据。但是可以使用limit来显示更新的数量
Update 表名 set 字段名=新值[where 判断条件] limit 数量;
Update my_table set name='e' where name='a' limit 4;
删除数据
1、删除数据的时候尽量不要全删,带条件
2、删除数据的时候可以使用limit来限制数量
注意:Delete 删除的数据无法重置auto_increment
Mysql 有一个能够重置表选项中的自增长的语法
Truncate 表名; ==drop=》create
查询数据
来看看完整的查询指令:
Select select选项 字段列表 from 数据源 where 条件 group by分组 having条件 order by排序 limit限制;
- Select选项:系统该如何对待查询得到的结果
All:默认的,表示保存所有的记录
Distinct:去重,去除重复的记录,只保留一条(所有字段相同才叫重复)
-
字段列表
有的时候需要从多张表获取数据,可能存在不同表中有同名的字段
,需要将同名的字段命名成不同名的:别名 alias基本语法:字段名[as] 别名
- 数据源
From 是为前面的查询提供数据,数据源只要是一个符合二维表结构的数据即可 - 单表数据
from 表名 - 多表数据
from 表1 ,表2,…
结果:两表记录数相乘,字段数拼接,所谓的笛卡尔积,对数据库造成压力,需要避免 - 动态数据
from后面跟的数据不是一个实体表,而是一个从表中查询出来得到的二维结果表(子查询)
基本语法:from (select 字段列表 from 表)as 别名
- Group by子句
group by 表示分组的含义:根据指定的字段,将数据进行分组,目的是为了统计
基本语法: group by 字段名
Group by是为了分组后进行数据统计的,如果只是想看数据显示,那么没有什么意义
Group by将数据按照指定的字段分组之后,只会保留每组的第一条记录
利用一些统计函数:
count():统计每组中的数量,如果统计目标是字段,那么不统计为空NULL字段
avg():求平均值
sum():求和
max():求最大值
min():求最小值
select class_id , count(*),max(stu_age),min(stu_height),avg(stu_age) from my_student group by class_id
- 多分组