MySQL(2)—— CRUD

本文主要讨论数据库的增删改查。

一、新增(create)

1、单行数据全列插入

sql 复制代码
insert into [(字段1,字段2)] values(值,值);

insert into 表示插入一条新数据行,字段就是定义表的字段名,可以是多个也可以是一个;按照字段名的顺序,设置对应的值。例如:

sql 复制代码
insert into student (id,name) values (1,'张三');

就是往student表中的id和name字段添加数据。

如果列与值的数据不匹配就会报错,且这条记录无法写入数据表。

2、多行插入

就是在上面单行的基础上,多value一些数据,例如:

sql 复制代码
insert into student (id,name) values (1,'张三'),(2,'李四'),(3,'王五');

执行所有的SQL时都有网络开销,写入数据时还会有磁盘IO的开销,每执行一条语句都会开启一个事务,事务的开启和关闭都需要消耗系统资源。


二、查询(select)

1、全列查询

简单来讲,全列查询就是列出该表的所有数据。

sql 复制代码
select*from 表名;

select表示查询,*号表示查询表中的所有列,from为关键字。

**【注意】**全列查询是一个非常危险的操作;因为在实际工作中,数据库中的数据量会很庞大,使用该命令时就会消耗很多资源,导致服务器出现问题。

2、指定列查询

sql 复制代码
select 列名... from 表名

例如:

sql 复制代码
select id,name from student;

查询的结果也可以是一个表达式,我们可以在此基础上加减数值:

sql 复制代码
select id,name,10 from exam;
--将英语成绩全部加10分
select id,name,English + 10 from exam;
--将语文,英语和数学成绩全部相加并命名为'总分'
select id,name,Chinese+English+math as 总分 from exam;

3、起别名(as)

上面使用的as就是用于起别名的关键字,可以将字段名修改我我们想要的名字。

sql 复制代码
select 列名 [as] 别名 [, 列名 [as] 别名]... from 表名;

4、去重(distinct)

sql 复制代码
select distinct 列名 from 表名;

使用distinct关键字可以去掉重复的数据。这里我们可以输入多个列名,只有所有列名对应的数据都相同才会判定为重复。去重后,重复记录只保留一条。


5、排序(order by)

排序规则:

  • 升序:ASC
  • 降序:DESC

desc既有查看表结构的作用,也有降序排列的作用。

sql 复制代码
select 列名 from 表名 order by 列名 [ASC|DESC];

例如:

sql 复制代码
select*from exam order by Chinese DESC;

表示查看exam表中的所有数据并按照语文成绩进行降序排列。

6、运算符

|-------------------|-----------------------------------------------|
| 运算符 | 说明 |
| >,<,>=,<= | 大于,小于,大于等于,小于等于 |
| = | 等于(MySQL中一个=号就表示等于),且NULL不安全 |
| <=> | 等于,且NULL安全(专门针对NULL判断) |
| !=,<> | 不等于 |
| BETWEEN a1 AND a2 | 在[a1,a2]范围中进行匹配,如果a1<=value<=a1,返回TRUE(1) |
| IN(option,...) | 如果是option中的任意一个,返回TRUE(1) |
| IS NULL | 判断是否为NULL |
| IS NOT NULL | 判断是否不为NULL |
| LIKE | 模糊匹配,%表示任意多个(包括0个)任意字符;_表示任意一个字符 |

这里说明一下LIKE,模糊匹配的意思是我们不清楚要查询的完整信息,只记得其中一部分,那么就可以使用LIKE来进行模糊匹配,比如我们想要查看character,但是忘记怎么拼写:

sql 复制代码
show variables like '%chara%';

这样就能够查询到包含chara的数据。而_表示占位符,使用方式如下:

sql 复制代码
show variables like 'ch_ra__er';

7、条件查询(where)

使用where语句的语法如下:

sql 复制代码
select * from 表名 where 列名/表达式 运算符 条件;

条件查询时,首先要确定好给哪个列设置相应的条件。例如,需要查询英语成绩不及格的同学以及他们的英语成绩:

sql 复制代码
select name,english from exam where english < 60;

同样我们可以实现更多条件查询:

sql 复制代码
--查询语文成绩好于英语成绩的同学
select * from exam where chinese > english;
--查询总分在200以下的同学
select name,chinese + math + english where chinese + math + english < 200;
--查询语文成绩大于80分且英语成绩大于70分的同学
select * from exam where chinese > 80 AND english > 70;

在使用条件查询时如果想要使用起别名,就必须要将命令写完整,例如:

sql 复制代码
select name, chinese + math + english as total from exam where (chinese + math + english) < 200 order by total asc;

这样看起来更加麻烦,所以一般还是不使用起别名的方式。


8、分页查询(limit)

前面说到全列查询是不安全的,那么分页查询就可以限制查询结果的条数。

分页查询的起始下标为0。

sql 复制代码
--从0开始,筛选n条结果(可加条件、排序)
select ... from table_name [where...] [order by ...] limit n;
--从s开始,筛选n条结果(可加条件、排序)
select ... from table_name [where...] [order by ...] limit s,n;
--从s开始,筛选n条结果(可加条件、排序),相比与上面这种方法更加明确
select ... from table_name [where...] [order by ...] limit n OFFSET s;

如何判断任意一页的s取值?

s = (当前页号 - 1) * 每页显示的记录数量


三、修改(update)

修改的语法如下:

sql 复制代码
update table_name set column = expr [,column = expr ...] [where ...] [order by ...] [limit ...]

例如,将学生张三的数学成绩修改为80分:

sql 复制代码
--将学生张三的数学成绩修改为80分
update exam set math = 80 where name = '张三';

**【注意】**在update的时候,如果不加where条件,则修改的将会是整张表中的所有记录,是非常危险的操作!!


四、删除(delete)

删除语法如下:

sql 复制代码
delete from table_name [where...] [order by ...] [limit...];

例如:

sql 复制代码
--删除成绩表中小明的成绩
delete from exam where name = '小明';
--删除英语成绩倒数前三的同学的考试成绩
delete from exam order by english asc limit 3;

**【注意】**同样的,如果删除时不加限定,就会删除表中的所有数据,所以需要仔细。

在生产环境中一般不会使用Delete操作,一般会在表中加入一个deleteState的字段,用来表示这条记录是否删除,使用update操作去更新deleteState字段就可以实现删除功能。而该条被删除的数据并没有实质上删除掉而是始终存在于数据库中。

相关推荐
2401_894241921 小时前
机器学习与人工智能
jvm·数据库·python
GentleDevin1 小时前
Redis服务常用命令
数据库·oracle
難釋懷1 小时前
Redis分片集群手动故障转移
数据库·redis·缓存
无名-CODING1 小时前
从零开始!Vue3+SpringBoot前后端分离项目Docker部署实战(上):环境搭建与数据库容器化
数据库·spring boot·docker
chushiyunen2 小时前
python edge-tts实现tts文本转语音、音频
数据库·python·音视频
原来是猿2 小时前
MySQL【事务中 - 事务的隔离级别】
数据库·mysql
2501_945423542 小时前
游戏与图形界面(GUI)
jvm·数据库·python
大傻^2 小时前
Spring AI Alibaba Agent开发:基于ChatClient的智能体构建模式
java·数据库·人工智能·后端·spring·springaialibaba
爬山算法2 小时前
MongoDB(50)副本集中的角色有哪些?
数据库·mongodb