您现在的位置是:网站首页> 编程资料编程资料
深入学习MySQL表数据操作_Mysql_
                    
                
                2023-05-26
                393人已围观
            
简介 深入学习MySQL表数据操作_Mysql_
前言
这一节我们基于表来做数据方面的操作,同样的,无非就是C(创建)R(读取)U(修改)D(删除)四种操作,但是在R上总能玩出多种花样
正式开始操作之前,我们先来聊一聊它们的关键字:
- INSERT
 - SELECT
 - UPDATE
 - DELETE
 
大家可以先通过help命令来查看一下相关的语法,提前预习一下,方便更深的理解
正式上菜
先来看看之前的表结构:
create table if not exists tb_user( id bigint primary key auto_increment comment '主键', login_name varchar(48) comment '登录账户', login_pwd char(36) comment '登录密码', account decimal(20, 8) comment '账户余额', login_ip int comment '登录IP' ) charset=utf8mb4 engine=InnoDB comment '用户表';
插入数据
在插入之前,我们先来看看平常怎么使用的
insert into table_name[(column_name[,column_name] ...)] value|values (value_list) [, (value_list)]
其实最常用的就这么多,下面我们来举个例子就明白了
全部字段插入单条数据
insert into tb_user value(1, 'admiun', 'abc123456', 2000, inet_aton('127.0.0.1'));这样就插入了一条数据:
auto_increment:自增键,在插入数据的时候可以不给当前列指定数据,而且默认情况下我们推荐给主键设置自增inet_aton:ip转换函数,相对应的还有inet_ntoa()
而且还需要注意一点,如果存在相同的主键,那么在插入的时候会出现错误
# 主键已重复 Duplicate entry '4' for key 'tb_user.PRIMARY'
指定字段插入多条数据
insert into tb_user(login_name, login_pwd) values('admin1', 'abc123456'),('admin2', 'abc123456')
可以看到数据已经插入进来,没有填充数据的列已NULL填充,关于这一点,我们可以在创建表的时候通过DEFAULT来指定默认值,就是在这个时候使用的
alter table tb_user add column email varchar(50) default 'test@sina.com' comment '邮箱'

没有什么比实际动手有说服力的了
ON DUPLICATE KEY UPDATE
这里还有一个点,用到的不是很多,但是相当实用:ON DUPLICATE KEY UPDATE
也就是说如果数据表中存在重复的主键,那么就进行更新操作,来看:
insert into tb_user(id, login_name, email) value(4, 'test', 'super@sina.com') on duplicate key update login_name = values(login_name), email = values(email);

对比上面的数据,很容易就会发现数据不一样了
values(列名): 会取出前面插入的字段的数据
insert into tb_user(id, login_name, email) values(4, 'test', 'super@sina.com'),(5, 'test5', 'test5@sinacom') on duplicate key update login_name = values(login_name), email = values(email);
插入多条数据也是一样的,就不贴图了,大家自己动手试一下
修改数据
插入数据相对而言比较简单,下面我们来看看修改数据
首先从update语法上来讲,这个更简单:
update table_name set column_name=value_list (,column_name=value_list) where condition
举个栗子:
update tb_user set login_name = 'super@sina.com' where id = 1
这样就修改了tb_user下编号为1的loign_name的数据
where后条件也可以多个,按照,分割
当然,如果没有设置查询条件的话,那么默认是会修改整张表的数据
update tb_user set login_name = 'super@sina.com',account = 2000
好了,修改数据到这里就结束了,很简单
删除数据
删除数据分为:
- 删除指定数据
 - 清空整张表
 
如果只是想删除某些数据,可以通过delete来删除,还是来举个栗子:
delete from tb_user where login_ip is null;

这样就删除了指定条件的数据
那么,如果我们执行删除条件,但是不设置条件呢?下面我们来看一看
先执行
insert操作插入几条数据
delete from tb_user ;

可以看到,删除了全部的数据
但其实还有一种方式可以清空整张表,就是通过truncate的方式,这种方式的效率更高
truncate tb_user;
最后就不贴图了,肯定没问题的
查询数据
查询数据分为多种情况,组合使用可以有N中存在,所以说这是最复杂的一种方式,下面我们一一来介绍
其实如果从语法上来看:查询语法关键点只会包含如下几点:
SELECT [DISTINCT] select_expr [, select_expr] FROM table_name WHERE where_condition GROUP BY col_name HAVING where_condition ORDER BY col_name ASC | DESC LIMIT offset[, row_count]
记住这些关键点,查询就相当简单了,下面我们先来看个简单的操作
简单查询
select * from tb_user; -- 按照指定字段排序 asc: 正序 desc: 倒序 select * from tb_user order by id desc;
一共插入了44条数据,没有全部截图

当前SQL会查询出表中全部数据,而跟在select后面的*表示:列出全部的字段,如果我们只是想列出某些列的话,那么将它换成指定的字段名就好:
select id, login_name, login_pwd from tb_user;

就是这么简单
当然了,还记得这个关键字么:DISTINCT,我们来实验一下:
select distinct login_name from tb_user;

意思已经很明显了,没错,就是去重操作。
但是我要告诉大家的是,distinct关键字如果作用在多个字段的话,那么只有在多个字段组合的情况下重复才会进行生效,举个栗子:
select distinct id,login_name from tb_user;
只有在 id + login_name有重复的时候会生效
聚合函数
在MySQL中内置的聚合函数,对一组数据执行计算,并返回单条值,在特殊场景下有特殊的作用
可以加where条件
-- 查询当前表中的数据条数 select count(*) from tb_user; -- 查询当前表中指定列最大的一条 select max(id) from tb_user; -- 查询当前表中指定列最小的一条 select min(id) from tb_user; -- 查询当前表中指定列的平均值 select avg(account) from tb_user; -- 查询当前表中指定列的总和 select sum(account) from tb_user;
除了聚合函数之外,还包含很多普通函数,这里就不一一列举了,给出 官方文档,用的时候具体查
条件查询
看到了第一个例子是不是感觉其实查询没有那么难。上面的例子都是查询出全部数据,下面我们要加一些条件进行筛选,这里就用到了我们的where语句,记住一点:
- 条件筛选是可以有多个的
 
等值查询
我们可以通过如下方式进行条件判断
select * from tb_user where login_name = 'admin1' and login_pwd = 'abc123456';
很多情况下,column_name = column_value是我们用到更多的查询方式,这种方式我们可以称为等值查询,
而且注意到,在条件之前我是通过and来进行关联的,Java基础不错的小伙伴肯定也记得&&,都是表示并且的意
既然有and,那么与之相反的肯定就是or了,表示只要两者满足其中一条就好
select * from tb_user where login_name = 'admin1' or login_pwd = 'abc123456';
除了=匹配的方式,还有其他更多的方式,<,<=,>,>=
- 和我们认知中不一样的是:
<>表示不等于 
不过这些使用方式都是一样的
批量查询
在某些特定的情况下,如果想要查询出一批数据,可以通过in来进行查询
select * from tb_user where id in(1,2,3,4,5,6);
                                
                                                        
                                
                                                        
                                
                                                        
    