目录
前言
在博主的【MySQL表的操作与数据类型】一文中介绍了,MySQL中表的一些基本操作,但是在该文中没有介绍表内容的增删查改,本文将对这一部分内容作补充。
一、表的Create操作
对于MySQL中的一个表结构,除了对改变进行结构的创建,还有对该表中内容的填写。
1.1表的创建与插入
create table [表名] ([列名] [列类型],...);//创建一个表
insert into [表名] values ([对应列内容],...);//全列插入
insert into [表名] ([对应列名],...) values ([对应列内容],...);//单列插入
insert ... on duplicate key update; //插入内容,如果冲突则更新内容,这种插入常见于有键值约束的列
replace into [表名] ([替换的列名],...) values ([替换内容],...);//如果和键值约束冲突则删除后插入
说明:
更新插入时:如果发生键值约束冲突,那么由MySQL获取变化列的数据并进行插入,如果没有发生键值约束冲突,则直接插入。
替换插入时:如果发生键值约束冲突,那么MySQL会将原表中冲突的数据进行删除,而后将数据在进行插入,如果没有发生键值约束冲突,则直接插入。
二、表的Retrieve操作
2.1select列
在实践中使用MySQL的时候,往往数据量是非常大的,我们不可能使用全列查询去查询一些部分数据,所以我们要使用相应的约束条件,来筛选我们需要的数据。
select *from [查找的表名];//全列查询
select [查找的表中对应的列名],... from [查找的表名];//指定列查询
select [表达式] from [表名]; //查询表达式的结果
select distinc [表达式或列名] from [表名]; //去除重复内容显示
2.2where条件
select提供的部分显示虽然能够解决一些问题,但是当对某些数据进行大小比较的时候就无能为力了,这个时候就需要我们的where条件来进行条件约束。
select [列名],... from [表名] where [表达式];
运算符 | 说明 |
>,>=,<,<= | 大于,大于等于,小于,小于等于 |
= | 等于,NULL不安全,例如NULL=NULL的结果时NULL |
<=> | 等于,NULL安全,例如NULL<=>NULL的结果是true(1) |
!=,<> | 不等于 |
between a and b | 范围匹配[a,b],若 a<=x<=b,则返回true(1) |
in (option,...) | 如果是option中的任意一个则返回true(1) |
is null | 是NULL |
is not null | 不是NULL |
like | 模糊匹配%表示任意字符匹配,_表示单字符匹配 |
and | 条件与 |
or | 条件或 |
not | 条件反 |
2.3结果排序
MySQL也为我们提供了对筛选出来的数据进行排序的功能。我们可以按照某一列数据的大小来对筛选后的数据进行升序或降序排列。
select ... order by [排序参考列] [desc(降序)/asc(升序)] //默认为升序
2.4分页查找
分页展示内容在我们日常使用的浏览器上非常常见,对内容进行分页展示,可以让用户更快的拉取到数据。在数据库中分页也可以让内容展示的更加规范。
//从 s 开始,筛选 n 条结果
select ... from [] [where ...] [order by ...] limit n offset s;
三、表的Update操作
与更新插入不同,update操作可以直接进行对数据的更新,但是更新后的数据不能违背现有的约束。
update [表名] set [列名]=[新的数据] where [筛选条件]
四、表的Delete操作
4.1删除一条数据
delete from [表名] [where ...] [order by ...] [limit ...]
4.2截断表
truncate table [表名];
说明:
- truncate只能对全表进行操作。
- 该操作不是对数据进行删除操作,所以比delete更快,但是该操作不是事物,所以无法撤销。所以该操作慎用。
- 该操作结束后,操作表中的自增长项(auto_increment)。
五、rename操作
当你要对一个表的数据进行去重时,(注意:是要对表进行操作,不是对显示的内容进行过滤),我们需要将该表的数据去重后的结果输出到另一个表中去。我们知道MySQL中的表结构实际上也是一个文件,在多人协作时,对文件的写入就要考虑数据一致性的问题。加入我们现在一条一条的将数据写入一个新表中,这个过程必定不是原子的。为了避免数据写入不是原子的,进而造成数据写入混乱的问题,MySQL提供了rename这个操作,rename可以将原子的重命名一个文件,当所有的数据写入完成后,将该文件名直接更改为用户想要更改的文件名,进而实现了数据向文件中原子写入的操作。
六、聚合函数
函数 | 说明 |
count([distinct(可选)] 表达式) | 返回查询到的数据总量 |
sum([distinct(可选)] 表达式) | 返回查询到的数据总和,不是整形没意义 |
avg([distinct(可选)] 表达式) | 返回查询到的数据平均值,不是整形没意义 |
max([distinct(可选)] 表达式) | 返回查询到的数据最大值,不是整形没意义 |
min([distinct(可选)] 表达式) | 返回查询到的数据最小值,不是整形没意义 |
七、group by子句
group by子句的作用是分组查询,即将包含相同数据值的内容放在一起进行展示。
select [要展示的列名],... from [表名] group by [按照分组的列名] having [条件判断];
说明:
group by是根据按照分组的列名将表中的数据进行统合,本质上是对原表上根据字段再一次进行分表的操作,此外,如果想要对group by添加筛选条件要使用having,having与where使用方法相同但是作用起效的时间略有差异。
MySQL中各关键字的执行次序如下:
from > on> join > where > group by > with > having > select > distinct > order by > limit