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字段就可以实现删除功能。而该条被删除的数据并没有实质上删除掉而是始终存在于数据库中。

相关推荐
阿里小阿希3 小时前
CentOS7 PostgreSQL 9.2 升级到 15 完整教程
数据库·postgresql
荒川之神3 小时前
Oracle 数据仓库雪花模型设计(完整实战方案)
数据库·数据仓库·oracle
做个文艺程序员3 小时前
MySQL安全加固十大硬核操作
数据库·mysql·安全
不吃香菜学java3 小时前
Redis简单应用
数据库·spring boot·tomcat·maven
一个天蝎座 白勺 程序猿3 小时前
Apache IoTDB(15):IoTDB查询写回(INTO子句)深度解析——从语法到实战的ETL全链路指南
数据库·apache·etl·iotdb
不知名的老吴4 小时前
Redis的延迟瓶颈:TCP栈开销无法避免
数据库·redis·缓存
YOU OU4 小时前
三大范式和E-R图
数据库
MaCa .BaKa4 小时前
47-心里健康咨询平台/心理咨询系统
java·spring boot·mysql·tomcat·maven·intellij-idea·个人开发
一江寒逸4 小时前
零基础从入门到精通MySQL(上篇):筑基篇——吃透核心概念与基础操作,打通SQL入门第一关
数据库·sql·mysql
@土豆4 小时前
Ubuntu 22.04 运行 Filebeat 7.11.2 崩溃问题分析及解决文档
linux·数据库·ubuntu