MySQL表的增删改查(基础)

目录

[1. CRUD](#1. CRUD)

[2. 新增(Create)](#2. 新增(Create))

[2.1 往数据表中插入一条记录](#2.1 往数据表中插入一条记录)

[2.2 指定列插入](#2.2 指定列插入)

[2.3 一次插入多个记录](#2.3 一次插入多个记录)

[3. 查询(Retrieve)](#3. 查询(Retrieve))

[3.1 全列查询](#3.1 全列查询)

[3.2 指定列查询](#3.2 指定列查询)

[3.3 查询字段为表达式](#3.3 查询字段为表达式)

[3.4 查询的时候给列/表达式指定别名](#3.4 查询的时候给列/表达式指定别名)

[3.5 查询时去重](#3.5 查询时去重)

[3.6 排序查询](#3.6 排序查询)

[3.7 条件查询](#3.7 条件查询)

[3.8 范围查询](#3.8 范围查询)

[3.9 模糊查询 like](#3.9 模糊查询 like)

[3.10 NULL 的查询:IS NOT NULL](#3.10 NULL 的查询:IS [NOT] NULL)

[3.11 分页查询 limit](#3.11 分页查询 limit)

[4 修改 (Retrieve)](#4 修改 (Retrieve))

[5. 删除(Delete)](#5. 删除(Delete))


1. CRUD

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

2. 新增(Create)

2.1 往数据表中插入一条记录

insert into 表名 values (值, 值, ......)

into 可加可不加, 但是最好是带上

括号中的值, 它们的类型和数目要和表中的列相匹配

可以插入中文的原因是, 创建数据库时, 使用了支持中文的字符集.

2.2 指定列插入

2.3 一次插入多个记录

在values后面,可以有多个(),多个()之间使用,分割.每一组()就是一条记录(也就是一行)

下面举一个一次插入三条记录的例子

那么一次插入三条记录和分三次, 每次插入一条记录有什么区别呢?

MySQL是一个客户端, 服务器的结构性程序!

3. 查询(Retrieve)

查询语句可以让我们看待表中包含的数据内容

3.1 全列查询

select * from 表名;

* 是通配符, 可以代指任意的列

但是这是一种很危险的操作, 我所查询的表数据很少, 那么如果那个表当中的数据很多呢?就会导致MySQL的服务器一瞬间硬盘的带宽和网络的带宽给吃满了, 那这样别的用户就访问不了MySQL服务器了.

3.2 指定列查询

手动指定要查询的某一列或者某几列~~服务器返回的结果,就只包含想要的数据~~

select 列名, 列名... from 表名;

3.3 查询字段为表达式

查询的同时,也可以进行运算

比如,查询所有同学数学成绩加10分后的效果

加10分的这张表是一张临时表,select操作不管怎么写, 都不会影响到数据库服务器硬盘上存储的原始数据

也可两个列/多个列进行运算

可以看出, 查询结果临时表的列名和当前表达式是一致的. 万一查询的表达式非常复杂,就会导致列名也非常复杂,不利于用户来阅读.

3.4 查询的时候给列/表达式指定别名

select 列名 as 别名 from 表名;

as 是关键字, 可以省略但不建议省略

别名会最终显示在查询结果的临时表中

SQL中,列名和表名都时可以起别名的.也都是使用 as.

3.5 查询时去重

把重复的行,去掉,只保留一份~~

select distinct 列名 from 表名;

distinct后面的列名,也可以是多个.

则要求必须所有的列的值都相同,才算"重复"

3.6 排序查询

针对查询到的结果进行排序

这里的排序,也只是针对临时表进行的, 对于数据库上的原始的数据没有任何顺序上的影响

select 列名 from 表名 order by 列名;

排序的时候, 根据什么来排序, 是由我们自己指定的. 默认的是按照升序排列, 如果是降序, 则要用到desc.

order by还能指定多个列排序~~(order by后面可以写多个列~)

此处是先拿math 这一列进行排序.如果math 相同了,再拿english这一列排序~~

3.7 条件查询

指定一个筛选条件,把符合条件的结果保留下来.不符合的就剔除掉~~

-- 查询英语不及格的同学及英语成绩 ( < 60 )

-- 查询语文成绩好于英语成绩的同学

条件比较的时候,并不只是使用列名和常量比较.也可以使用列名和其他列名比较~~

-- 查询总分在 200 分以下的同学

条件查询, 也可以结合一些复杂的表达式

当我们在条件中,尝试使用别名的时候,这个别名不能被正确识别出来.mysql的 where条件中,无法使用列的别名!!!

-- 查询语文成绩大于80分,且英语成绩大于80分的同学

-- 查询语文成绩大于80分,或英语成绩大于80分的同学

还有一点

3.8 范围查询

between...and...

-- 查询语文成绩在80, 90之间的同学及其语文成绩.

in

-- 查询数学成绩是58或者80或者98或者99分的同学及数学成绩

这里添加了一名诸葛孔明童鞋

3.9 模糊查询 like

% 匹配任意多个(包括 0 个)字符

_ 匹配严格的一个任意字符

查找姓孙的同学

这是全部的同学

孙%是以孙开头的.

%孙匹配以孙结尾的

%孙%则是只要包含孙即可~~

3.10 NULL 的查询:IS NOT NULL

查询语文成绩已知的同学的姓名及成绩

3.11 分页查询 limit

针对查询出来的结果,进行截取,取出其中的一个部分~~

一次查询,最多获取到4条记录~~

limit 4

约束了结果中最多包含几条记录

offset 4

描述了当前的结果,从哪一条开始算.这里的offset 4就可以当做从下标为4的记录开始获取.(下标从0开始算)

4 修改 (Retrieve)

update 表名 set 列名=值 where 条件...;

进行修改,要明确一些重要的信息.

1)改哪个表~~

  1. 改这个表里的哪个列/哪些列,改成什么~~

3)改这个表的哪些行~~
-- 将孙悟空同学的数学成绩变更为 80 分

此处的修改,是修改mysql服务器,保存在硬盘上的数据.(持久生效的)

update 也可以一次操作修改多个列~~

-- 将曹孟德同学的数学成绩变更为 60 分,语文成绩变更为 70 分

修改操作,也可以搭配 order by这样的排序操作~~

-- 将总成绩倒数前三的 3 位同学的数学成绩加上 10 分

将之前的三个为NULL的数据都删除了

倒数前三的3位同学的成绩

原来的各科成绩

数学加10分后的成绩

update 操作,也是一个危险操作!这个操作的危害,和删库相比,不遑多让~~甚至还犹有过之.删库,所有的数据都没了,能做的操作就是把之前备份的给导入过来~~update修改的条件,没设定好,你也不知道,当前哪些行被改了,哪些没被改, 恢复的成本可能是更高的~~

5. 删除(Delete)

-- 删除孙悟空同学的考试成绩

删除,是按照行来删除的.无法删除某些列~~(要想按照列来删除,可以通过update,把指定条件的行的指定列,设为null)

相关推荐
这个DBA有点耶18 分钟前
连拿六年第一后宣布出海:国产数据库凭什么敢撕掉“平替”的标签?
数据库·人工智能·架构
云和恩墨1 小时前
数据库监控简史:从会回答到能交付——AI-DBA如何成为真正的数字同事
数据库·人工智能·dba
paopaokaka_luck1 小时前
灾害应急物资管理系统(AI应急助手、Echarts可视化数据看板、捐赠入库联动、 物资全流程管理、库存变动追溯、灾情资讯与互动反馈、物资发放公示)
java·前端·javascript·spring boot·mysql·tomcat·echarts
这个DBA有点耶2 小时前
为什么删掉索引后,查询瞬间变快了?探讨MySQL的随机I/O与顺序I/O博弈
数据库·mysql·代码规范
kingx32 小时前
BugKu 渗透测试 4 实战:文件上传打点,5 Flag 全通
数据库·渗透测试·web·内网渗透
我命由我123453 小时前
Python 实用操作 - 文件操作(打开与关闭文件、读取文件、文件写入)
java·开发语言·前端·javascript·数据库·python·java-ee
SelectDB3 小时前
Apache Doris 与 SelectDB 是什么关系?从开源技术到面向 Agent 的极速分析数据库
大数据·数据库·数据分析
VimorphTech3 小时前
文本已经改了,旧的音频生成结果还能回写吗?
java·数据库·mybatis
SelectDB3 小时前
存算分离冷查询提速 7.5 倍!Apache Doris 4.2 Peer Read 实现跨计算组缓存复用
大数据·数据库·数据分析
盛世宏博智慧档案3 小时前
一站式智慧档案解决方案,如何实现防火防盗漏水多维度安全监测实践
服务器·网络·数据库