专栏首页白胡杨同学学会Mysql第二天

学会Mysql第二天

表数据的基本操作

数据的插入

insert into 表名 [(字段列表)] values [(对应字段列表)];
insert into 表名 values (对应表结构);
insert into teacher (name,age) values ("Jerry",21);

多数据的插入

insert into my_insert [(字段列表)] values(值列表),(值列表)...;
--在原有基础上,跟多个值列表即可实现插入多条记录

数据的查询

查询全部数据

select * from 表名;
select * from teacher; --查询teacher表中所有数据

查询部分数据

select 字段列表 from 表名;
select name,age,address from teacher --从teacher表中查找所有人的姓名,年龄和住址。

带条件的查询

select *字段列表 from 表名 [where条件];
select * from teacher where age>30;     --从teacher表中查找年龄大于30的所有人的信息
select name,adddress from teacher where age>30; --从teacher表中查找年龄大于30的人的姓名和地址

数据的删除

delete from 表名 [wehre条件];
delete from teacher where age<30; 删除teacher表中年龄小于30的所有人的信息。

如果没有where条件,则默认删除表中的所有数据

数据的更新

update 表名 set 字段名=新值 [where条件]
update teacher set age=30 where sex="男";    --将teacher表中所有的男性的年龄都改为30
update 表1,表2,... set 表1.列1,表2.列2,...where条件
--可以同时修改多个表中的数据

查询语句

完整的SQL查询指令: select select选项 字段列表 from 数据源 where条件 group by 分组 having 条件 order by 排序 limit 限制

select 选项

系统如何对待查询得到的结果

all 保留所有的结果
distinct 去除全部重复的记录

union all 不去除重复的

字段列表

有时候需要从多张表获取数据,当遇到同名字段的时候,需要用到别名。 基本语法: 字段名 as 别名

from 数据源

实体二维表

from是为前面的表提供数据源,MySQL只要求数据源是一个符合二维表结构的数据源即可。(多表获取数据) 基本语法:from 表1,表2,表3

select * from my_date,my_simple,my_auto;    --查询结果为笛卡尔积(尽量避免)

多表数据

从多张表获取数据,基本语法:

from 表1,表2....
select * from my_int,my_set;

结果:是两张表的记录相乘,字段数拼接

本质:从第一张表取出一条记录,去拼凑第二张表的所有记录,保留所有结果。得到

的结果叫笛卡尔积(尽量避免 )

动态数据

from跟的不是一个实体二维表,而是一个从其他表中查询得到的结果集(子查询) 基本语法:from (select 字段列表 from 表) as 别名 子查询的时候,作子查询的表一定要有别名

select * from (select name,id from my_simple) as int;

where子句

从数据表获取数据的时候进行条件筛选 where用运算符进行条件判断。

Group by 子句

根据指定的字段将数据进行分组,目的是为了统计

group by 将数据分组后,只会显示每组的第一条记录

select * from my_date group by sex; --将表按照性别进行分组

一些统计函数(聚合函数)

count() 统计字段数量,不统计NULL。 avg() 求平均值 sum() 求和 max() 求最大值 min() 求最小值

Group_concat():为了将分组中指定的字段进行合并(字符串拼接)

使用聚合函数统计

select id,max(age) from my_date group by class; --按照年级分组,查询每个年级年龄最大的人

group_concat() 字符串拼接,将指定字段进行拼接

多分组

将数据按照某个字段进行分组之后,对已经分组的数据进行再次分组

基本语法

group by 字段1,字段2;//先按照字段1进行排序,之后将结果再按照字段2进行排序

更新数据

1.数据更新一般是随条件更新,很少全部更新 2.在更新数据的时候,没有条件的时候,会是全表更新,可以使用limit限制更新的数量 update 表名 set 字段名=值 [where 条件] limit 数量

update my_simple set id='1' limit 4;    --只更新前四条记录

删除操作

1.删除数据时,尽量不要全部删除,应该使用where条件限定 2.使用limit限制删除记录的数量

delete from my_simple limit 4;  --删除前四条数据
  • delete删除操作无法重置自增长auto_increment

清除自增长的语法:

truncate 表名

新增数据

多数据插入

只要写一次insert指令,可以直接插入多条记录,(写上多个值列表)

insert into my_insert [(字段列表)] values(值列表),(值列表)...;
--在原有基础上,跟多个值列表即可实现插入多条记录

主键冲突

在有的表中使用了业务主键,但是插入数据时又不确定主键是否存在。

主键冲突的解决方案

1.主键冲突更新 insert into 表名 [(字段列表)] values (值列表) on duplicate key update 字段=新值(更新的是主键之外的新值)

insert into my_student values ('stu001','小婷') on duplicate key update stu_name='小婷';

2.主键冲突替换 当主键冲突之后,删除数据重新插入 replace into 表名 [(字段列表)] values (值列表);

replace into my_stu values('stu001','小婷');

replace的效率比insert的效率要低。

蠕虫复制(一般用来测试表的压力,测试表的效率或者用于数据转移)

蠕虫复制的原则:一分为二,成倍增加。 从已有数据中选择数据,插入到表中。 insert into 表名 [(字段列表)] select */字段列表 from 表

insert into my_copy select * from my_copy;  --从自己表中进行蠕虫复制

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 学会Mysql第三天

    1、having 是在 group by 子句之后:可以针对分组数据进行统计筛选。

    白胡杨同学
  • HTML简介

    白胡杨同学
  • CSS简介与语法

    白胡杨同学
  • [译]推特和脸书能否预测股票变动?

    大数据文摘
  • mongodb日志过大问题处理

    icenycmh关注0人评论 1256人阅读 2017-09-11 11:06:15

    拓荒者
  • django 之跨域访问问题解决 access-control-allow-origin

    跨域问题是浏览器同源策略限制,当前域名的 js 只能读取同域下的窗口属性。哪些场景下会发生该问题,我们可以如何解决呢?本文就给大家介绍 django 之跨域访问...

    马国俊
  • ZetCode 教程翻译计划正式启动 | ApacheCN

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 ...

    ApacheCN_飞龙
  • Ioc模式和MEF

      分离关注( Separation of Concerns : SOC)是Ioc模式和AOP产生最原始动力,通过功能分解可得到关注点,这些关注可以是 组件Co...

    aehyok
  • 设计模式之工厂模式-抽象工厂模式

    2:如果我们把对象实例化代码进行抽象,抽象成创建对象的方法跟具体的实例化(也就是其子类),这种就是工厂方法模式。工厂方法模式的意义:将对象的创建过程,由原来的在...

    凯哥Java
  • Cordova-拍照上传 原

    增加相机插件            cordova plugin add cordova-plugin-camera (如果删除add改为remove )

    tianyawhl

扫码关注云+社区

领取腾讯云代金券