【数据库】MySQL表的增删改查(基础命令详解)

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,高可用系列 2核4GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 【数据库】MySQL表的增删改查(基础命令详解)

写在前面 :

  1. 1.语法中大写字母是关键字,用[]括这的是可以省略的内容。
  2. 2.文中截图是相对应命令执行完得到的结果截图。


1.CRUD

注释:在SQL中可以使用“--空格+描述”来表示注释说明.

CRUD:即增加(Create)、查询(Retrieve)、更新(Update)、删除(Delete)四个单词的首字母缩写.


2.新增(CREATE)

语法格式:

INSERT [INTO] table_name
    [(column [, column] ...)]
    VALUES (value_list) [, (value_list)] ...
value_list: value, [, value] ...

使用这个这个命令之前,我们需要先创建好一个数据库,选中数据库后再在这个数据库中创建一个表,之后我们才可以用上述命令将数据填入到表中了。

--创建的的表结构
+---------+-------------+------+-----+---------+-------+
| Field   | Type        | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+-------+
| id      | int(11)     | YES  |     | NULL    |       |
| name    | varchar(20) | YES  |     | NULL    |       |
| math    | int(11)     | YES  |     | NULL    |       |
| english | int(11)     | YES  |     | NULL    |       |
+---------+-------------+------+-----+---------+-------+

2.1 单行数据 + 全列插入

insert into student values(1,'张三',90,87);
insert into student values(1,'李四',89,87);

单行输入时,关键字values可以不加s,这里大家应该都可以理解。在实际应用中,很少使用到添加单行数据,就像我们网购,在一家网店买的东西,都是通过一个快递邮递到站,不然太费资源,单行输入也是如此。因此下方开始展示多行输入。

2.2 多行数据 + 指定列插入

-- 插入两条记录,value_list 数量必须和指定列数量及顺序一致
insert into student (id,name,math,english) values
     (3,'钟馗',12,45),
     (4,'卢布',null,null);

通过上方代码我们可以看出在数据中,我们可以将数据赋值为空,什么时候置为空能,就拿现在这个例子,卢布同学因为出去约会了,没参加考试,那么我们就把他所有的成绩全都置为null,相当于卢布同学缺考了。


3.查询(SELECT)

语法格式:

SELECT
    [DISTINCT] {* | {column [, column] ...}
    [FROM table_name]
    [WHERE ...]
    [ORDER BY column [ASC | DESC], ...]
    LIMIT ...

查询语法才是有趣中的有趣,因为他可以套用很多不同的查询方式,让我给你一一道来。

3.1全列查询

-- 通常情况下不建议使用 * 进行全列查询
-- 1. 查询的列越多,意味着需要传输的数据量越大;
-- 2. 可能会影响到索引的使用。(索引待后面课程讲解)
SELECT * FROM exam_result;



3.2指定列查询

-- 指定列的顺序不需要按定义表的顺序来
SELECT id, name, english FROM exam_result;



3.3 查询字段为表达式

-- 表达式不包含字段
SELECT id, name, 10 FROM exam_result;
-- 表达式包含一个字段
SELECT id, name, english + 10 FROM exam_result;
-- 表达式包含多个字段
SELECT id, name, math + english FROM exam_result;



注:在我们执行english+10,english+math 这些语句时,对于我们的存入数据是不会有影响的,我们在客户端看到的所有表都是一个“临时表”

3.4别名

为查询结果中的列指定别名,表示返回的结果集中,以别名作为该列的名称

语法格式:

-- 结果集中,表头的列名=别名
SELECT column [AS] alias_name [...] FROM table_name;



3.5去重

使用DISTINCT关键字对某列数据进行去重

去重前:



去重后:



通过上方对比可以看出,去重是将出现大于等于两次的数据仅仅保留一项的操作。

3.6 排序:ORDER BY

语法格式:

-- ASC 为升序(从小到大)
-- DESC 为降序(从大到小)
-- 默认为 ASC
SELECT ... FROM table_name [WHERE ...]
ORDER BY column [ASC|DESC], [...];

示例:

--查询姓名和数学成绩,根据数学成绩降序排序
select name,math from student order by math desc;



我们还可以将两行相加再进行排序:

 select name,math+english  from student order by math+english  desc;



上方有刚学完as用于改别名,我们还可以将math+english改一个别名,这时上方的截图标题math+english就会被改为score中代码如下:

 select name,math+english as score from student order by math+english  desc;

除了上述的方式,我们还可以进行更复杂的排序方式,例如可以对多个字段进行排序,排序优先级随书写顺序。

-- 查询同学各门成绩,依次按 数学降序,英语升序方式显示
select name,math,english from student order by math desc, english ;


 

注意:

  1. 没有 ORDER BY 子句的查询,返回的顺序是未定义的,永远不要依赖这个顺序。
  2. NULL 数据排序,视为比任何值都小,升序出现在最上面,降序出现在最下面。

3.7条件查询

比较运算符:


1688718121033.png


逻辑运算符:


1688718130207.png


注意:

  1. WHERE条件可以使用表达式,但不能使用别名。
  2. AND的优先级高于OR,在同时使用时,需要使用小括号()包裹优先执行的部分

3.7.1基本查询

--查找姓名和英语成绩,查询出英语成绩不足60的同学
select name,english from student where english<60;



--查找姓名、英语和数学成绩成绩,查询出数学成绩高于英语成绩的同学
select name,english,math from student where english<math;



3.7.2 AND和OR

--英语、数学成绩都在60分以上的学生
select name,english,math from student where english>60 and math>60;



--英语或者数学大于60分的同学
select name,english,math from student where english>60 or math>60;



3.7.3范围查询

  • BETWEEN ... AND ...
--查询英语成绩在60-100分的同学 
select name,english,math from student where english between 60 and 100;



  • IN


--查询英语等于87、45分的同学
select name,english,math from student where english in (87,45);



  • 模糊查询
-- % 匹配任意多个(包括 0 个)字符
SELECT name FROM student WHERE name LIKE '张%';
-- _ 匹配严格的一个任意字符
SELECT name FROM student WHERE name LIKE '张_';



  • NULL查询:IS [NOT] NULL
-- 查询 id 已知的同学姓名
SELECT name, id FROM student WHERE id IS NOT NULL;
-- 查询 id 未知的同学姓名
SELECT name, id FROM student WHERE id IS NULL;

3.8分页查询

语法格式:

-- 起始下标为 0
-- 从 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;

分页查询就是将数据按照页的形式进行显示,就像我们购物时,商品会有页码数,这就是分页查询的实际应用。



示例:


 第 1 页
SELECT id, name, math, english FROM student ORDER BY id LIMIT 3
OFFSET 0;
-- 第 2 页
SELECT id, name, math, english FROM student ORDER BY id LIMIT 3
OFFSET 3;
-- 第 3 页,如果结果不足 3 个,不会有影响
SELECT id, name, math, english FROM student ORDER BY id LIMIT 3
OFFSET 6;



4.修改(UPDATAE)

语法格式:

UPDATE table_name SET column = expr [, column = expr ...]
[WHERE ...] [ORDER BY ...] [LIMIT ...]

示例:

-- 将大鹏同学的数学成绩变更为 80 分
UPDATE student SET math = 80 WHERE name = '大鹏';
-- 将张三同学的数学成绩变更为 60 分,语文成绩变更为 70 分
UPDATE student SET math = 60, english = 70 WHERE name = '张三';
-- 将总成绩倒数前三的 3 位同学的数学成绩加上 30 分
UPDATE student SET math = math + 30 ORDER BY  math + english LIMIT 3;
-- 将所有同学的语文成绩更新为原来的 2 倍
UPDATE studentt SET math = math * 2;

注意:

修改可以联合上方提到的语句(ORDER BY;WHERE等)进行修改,这样在使用方面对数据的操作就全面了许多。


5.删除(DELETE)

语法格式:

DELETE FROM table_name [WHERE ...] [ORDER BY ...] [LIMIT ...]

示例:

--删除张三的成绩
DELETE FROM student WHERE name = '张三';



--创建一个测试表
create table test_table(
    id int,
    name varchar(20)
);
--删除测试表
delete from test_table;



注意:在开发当中,删除操作是非常危险的,我们一定要再三再三考虑,如果操作失误,很有可能把自己的“饭碗”给弄丢,严重的话可能老板的饭碗也给弄没了。

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
相关文章
|
2月前
|
缓存 关系型数据库 BI
使用MYSQL Report分析数据库性能(下)
使用MYSQL Report分析数据库性能
133 3
|
2月前
|
关系型数据库 MySQL 数据库
自建数据库如何迁移至RDS MySQL实例
数据库迁移是一项复杂且耗时的工程,需考虑数据安全、完整性及业务中断影响。使用阿里云数据传输服务DTS,可快速、平滑完成迁移任务,将应用停机时间降至分钟级。您还可通过全量备份自建数据库并恢复至RDS MySQL实例,实现间接迁移上云。
|
2月前
|
关系型数据库 MySQL 分布式数据库
阿里云PolarDB云原生数据库收费价格:MySQL和PostgreSQL详细介绍
阿里云PolarDB兼容MySQL、PostgreSQL及Oracle语法,支持集中式与分布式架构。标准版2核4G年费1116元起,企业版最高性能达4核16G,支持HTAP与多级高可用,广泛应用于金融、政务、互联网等领域,TCO成本降低50%。
|
2月前
|
关系型数据库 MySQL 数据库
阿里云数据库RDS费用价格:MySQL、SQL Server、PostgreSQL和MariaDB引擎收费标准
阿里云RDS数据库支持MySQL、SQL Server、PostgreSQL、MariaDB,多种引擎优惠上线!MySQL倚天版88元/年,SQL Server 2核4G仅299元/年,PostgreSQL 227元/年起。高可用、可弹性伸缩,安全稳定。详情见官网活动页。
|
2月前
|
关系型数据库 分布式数据库 数据库
阿里云数据库收费价格:MySQL、PostgreSQL、SQL Server和MariaDB引擎费用整理
阿里云数据库提供多种类型,包括关系型与NoSQL,主流如PolarDB、RDS MySQL/PostgreSQL、Redis等。价格低至21元/月起,支持按需付费与优惠套餐,适用于各类应用场景。
|
2月前
|
SQL 关系型数据库 MySQL
Mysql数据恢复—Mysql数据库delete删除后数据恢复案例
本地服务器,操作系统为windows server。服务器上部署mysql单实例,innodb引擎,独立表空间。未进行数据库备份,未开启binlog。 人为误操作使用Delete命令删除数据时未添加where子句,导致全表数据被删除。删除后未对该表进行任何操作。需要恢复误删除的数据。 在本案例中的mysql数据库未进行备份,也未开启binlog日志,无法直接还原数据库。
|
2月前
|
Ubuntu 安全 关系型数据库
安装与配置MySQL 8 on Ubuntu,包括权限授予、数据库备份及远程连接指南
以上步骤提供了在Ubuntu上从头开始设置、配置、授权、备份及恢复一个基础但完整的MySQL环境所需知识点。
406 7
|
2月前
|
缓存 监控 关系型数据库
使用MYSQL Report分析数据库性能(上)
最终建议:当前系统是完美的读密集型负载模型,优化重点应放在减少行读取量和提高数据定位效率。通过索引优化、分区策略和内存缓存,预期可降低30%的CPU负载,同时保持100%的缓冲池命中率。建议每百万次查询后刷新统计信息以持续优化
217 6
|
2月前
|
缓存 监控 关系型数据库
使用MYSQL Report分析数据库性能(中)
使用MYSQL Report分析数据库性能
142 1
|
2月前
|
关系型数据库 MySQL 数据库
阿里云数据库RDS支持MySQL、SQL Server、PostgreSQL和MariaDB引擎
阿里云数据库RDS支持MySQL、SQL Server、PostgreSQL和MariaDB引擎,提供高性价比、稳定安全的云数据库服务,适用于多种行业与业务场景。

推荐镜像

更多