当前位置: 首页 > news >正文

MySQL表的基础操作(crud)

1. 新增(Create)

insert into 表名 values (值, 值…);
此处列出的这些值,的数目和类型要和表的列相匹配。

-- 在student 表中插入学号1,姓名zhangsan的数据
insert into student values(1, 'zhangsan');
-- 指定列插入
insert into student (name) values('王五');
-- 插入多个数据
insert into student values('2','李四'),('3','赵六'),('4','刘七');

2. 查询(Retrieve)

查询语句让我们能看到表中包含的数据内容。

1) 全列查询

这个操作,就是查询出当前数据库中所有的行,和所有的列。

select * from 表名

符号 * 是通配符。 * 就能够代指任意的列。

-- 全列查询 student 表  
select * from student;

MySQL 是一个 客户端 服务器 结构的程序。
客户端 发送 select * from student请求。服务器解析 sql 并执行就会读取硬盘中 student 表的每一条记录把所有的记录都通过网络返回给客户端。然后客户端再把收到的服务器返回的数据显示到界面上。

select * 是一个非常危险的操作。如果,当前 select*查询的这个表,里面的数据非常非常多(比如,几十亿条)。这就会使服务器无法给外面的普通用户提供服务了,此时服务器就像"卡死”了一样,导致这个服务器一瞬间硬盘的带宽和网卡的带宽就都被吃满了。

2) 指定列查询

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

select 列名,列名… from 表名;

-- 创建一个成绩表
create table  exam_result(id int,name varchar(20),chinese decimal(3,1),math decimal(3,1),english decimal(3,1)
);
-- 插入测试数据
INSERT INTO exam_result (id,name, chinese, math, english) VALUES
(1,'唐三藏', 67, 98, 56),
(2,'孙悟空', 87.5, 78, 77),
(3,'猪悟能', 88, 98.5, 90),
(4,'曹孟德', 82, 84, 67),
(5,'刘玄德', 55.5, 85, 45),
(6,'孙权', 70, 73, 78.5),
(7,'宋公明', 75, 65, 30),
(8,'诸葛孔明',80.0,80.0,80.0),
(9,'孙行者',null,null,null),
(10,'者行孙',null,null,null),
(11,'行者孙',null,null,null);
 -- 查询语文成绩select name,chinese from exam_result;

未来实际开发中,一张表有十几列都是很正常的. 通常就得按需查询。数据库的增删改查,都是比较慢的,也是比较吃硬件资源的能省点尽量省点)。

3) 查询字段为表达式

查询的同时,可以进行计算.

-- 查询所有同学,数学成绩加10分后的效果
select name ,math + 10 from  exam_result;

MySQL 是一个 客户端 服务器 结构的程序。查询字段为表达式的时候,看到的客户端中显示的结果其实是一个“临时表select 操作不管怎么写,都不会影响到数据库服务器硬盘上存储的原始数据。

也可以使用两个列/多个列进行运算:

-- 查询总成绩
select name,chinese + math + english from exam_result;

查询结果临时表的列名和咱们当前表达式是一致的。万一查询的表达式非常复杂,就会导致列名也同样复杂不利于用户来阅读。

为了解决上面的问题,可以指定别名

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

select 列名 as 别名 from 表名

  • 别名会最终显示在查询结果的临时表中
  • as 关键字,可以省略.但是不建议省略
-- 查询总成绩起total别名
select name,chinese + math + english as total  from exam_result;

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

5) 查询时去重

把重复的行去掉,只保留一份。
select distinct 列名 from 表名;

-- 查询数学成绩去重
select distinct math from exam_result;

distinct 后面的列名,也可以是多个则要求必须所有的列的值都相同,才算“重复“。

6) 排序查询

针对查询到的结果进行排序.
mysql 是一个客户端-服务器结构的程序。因此这里的排序,也只是针对临时表进行的对于数据库服务器上原始的数据没有任何的顺序上的影响。

select 列名 from 表名 order by 列名 [asc | desc];

列名:排序的时候,依据什么来进行排的。这个是我们在排序的时候要明确的

-- 对英语成绩进行排序(默认升序排序)
select * from exam_result order by english;
-- 对英语成绩进行降序排序
select * from exam_result order by english desc;

desc 表名; 描述一个表

order by desc; 表示降序 descend

如果 SQL 中,没有指定 order by, 此时我们的代码中就不应该依赖结果集合(临时表)的顺序。mysql 并不承诺,这个不带order by 的查询结果是带有一定顺序的。

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

-- 优先数学升序,次之英语
select * from exam_result order by math, english;

7) 指定一个筛选条件

把符合条件的结果保留下来.不符合的就剔除掉。

条件查询需要有运算符来表述。

比较运算符:

运算符说明
>, >=, <, <=大于,大于等于,小于,小于等于
=等于,NULL 不安全,例如 NULL = NULL 的结果是 NULL
<=>等于,NULL 安全,例如 NULL <=> NULL 的结果是 TRUE(1)
!=, <>不等于(两个运算符是等价的)
BETWEEN a0 AND a1范围匹配,[a0, a1],如果 a0 <= value <= a1,返回 TRUE(1)
IN (option, …)如果是 option 中的任意一个,返回 TRUE(1)
IS NULL是 NULL
IS NOT NULL不是 NULL
LIKE模糊匹配。% 表示任意多个(包括 0 个)任意字符;_ 表示任意一个字 符

最开始,= 在数学上就是表示相等。咱们开始学编程了之后,费了老大劲,把 = 的含义纠正过来,= 表示赋值
现在在 SQL 里 = 又是表示比较相等了。
= 和 <=> 的差别:有些列是可以不填的(不填就相当于是 NULL),NULL 参与各种运算,的结果还是 NULL。

  • NULL = NULL => NULL(相当于 false,条件不成立了)
  • NULL <=> NULL => true(条件成立)

逻辑运算符:

运算符说明
AND多个条件必须都为 TRUE(1),结果才是 TRUE(1)
OR任意一个条件为 TRUE(1), 结果为 TRUE(1)
NOT条件为 TRUE(1),结果为 FALSE(0)

条件比较的时候,并不只是使用列名和常量比较也可以使用列名和其他列名比较。也可以结合一些更复杂的表达式。

  • 基本查询
-- 查询英语不及格的同学及英语成绩 ( < 60 )select name,english from exam_result where english < 60;-- 查询语文成绩好于英语成绩的同学select * from exam_result where chinese > english;-- 查询总分在 200 分以下的同学
select name,chinese + english + math as total from exam_result where  chinese + english + math < 200;
-- 条件里的内容,和查询的这个列,没啥关系

注意理解查询语句执行的过程:
1.服务器需要先遍历表中的每一个记录
2.针对当前记录,带入条件,看是否成立
3.如果条件成立,则这一条记录加入结果集,并返回给客户端如果条件不成立,则这一条记录跳过.

-- 下面的查询总分在 200 分以下的同学语句是错误的
select name,chinese + english + math as total from exam_result where total < 200;
-- 当我们在条件中,尝试使用别名的时候,这个别名不能被正确识别出来。
-- mysql的 where 条件中,无法使用列的别名。

站在 sql 的执行顺序上,也能一定程度的解释上述现象
select 语句执行顺序:

  1. 遍历到某个指定的行
  2. 带入条件筛选
  3. 条件为 true,被筛选成功之后, 再计算 select 列务这里的表达式

这种说法是比较牵强的,实现 SQL 解析是完全可以做到,先把别名定义出来,再执行条件的。

  • AND与OR:
-- 查询语文成绩大于80分,且英语成绩大于80分的同学
select name,chinese,english from exam_result where chinese > 80 and english > 80;
-- 查询语文成绩大于80分,或英语成绩大于80分的同学
select name,chinese,english from exam_result where chinese > 80 or english > 80;

在 SQL 中,and 的优先级比 or 更高。但是没啥卵用建议大家忘记这个规则,而是使用()手动的明确优先级。

  • 范围查询:

计算机中谈到区间,大部分都是前闭后开。但是也有例外: between and 是闭区间:

  1. between … and …
-- 查询语文成绩在 [80, 90] 分的同学及语文成绩select * from exam_result where chinese >= 80 and chinese <= 90;
-- 用 between ... and ... 
select * from exam_result where chinese between 80 and 90;
  1. IN
-- 查询数学成绩是 58 或者 80 或者 98 或者 99 分的同学及数学成绩
select * from exam_result where math = 58 or math = 80 or math = 98 or math = 99;
-- 用 in 
select * from exam_result where math in(58,80,98,99);
  • 模糊查询:LIKE

mysql 提供的模糊查询,相对比较简单的

  • % 匹配 0个或者任意个任意字符
  • _ 匹配 1个任意字符
-- 查询姓孙并且名为1个字的同学
select * from exam_result where name like '孙_';
-- 查询姓孙并且名为2个字的同学
select * from exam_result where name like '孙__';
-- 查询姓孙的同学
select * from exam_result where name like '孙%';
-- %孙 匹配以 孙 结尾的
select * from exam_result where name like '%孙';
-- %孙% 则是只要包含孙即可
select * from exam_result where name like '%孙%';

mysql 进行 like 模糊查询是一个比较低效的操作。尤其是针对一些比较长的字符串,实际工作中使用模糊查询还是要慎重。

  • NULL 的查询:IS [NOT] NULL

用 = 进行比较将会一个数据也没有所以得需要用其他运算符。

-- 查询语文成绩为null的同学
-- 用 <=>
select * from exam_result where  chinese <=> null;
-- 用 IS NULL  
select * from exam_result where  chinese is null;

<=> 和 is null 的区别是什么:

  • <=> 可以拿两个列进行比较的
  • is null 只能是一个列和 null 比较

8) 分页查询limit

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

语法:

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

练习:

-- 从 0 开始,筛选 4 条结果
select * from exam_result limit 4;
-- 从 4 开始,筛选 4 条结果
select * from exam_result limit 4 offset 4;
-- offset 4 描述了当前的结果,从哪一条开始算这里的 
-- offset 4 就可以当做从下标为4的记录开始获取.(下标从 0 开始算)
-- limit 4  约束了结果中最多包含几个记录-- 从 8 开始,筛选 4 条结果
select * from exam_result limit 4 offset 8;

上述这 8 种 select 的写法,都是 select 最基础的写法也是工作中最常用的写法。

3. 删除 (Delete)

delete from 表名 where 条件;直接删除符合条件的行

-- 删除数学成绩为null的数据
delete from exam_result where math is null;
-- 删除孙悟空同学的考试成绩
delete from exam_result where name = '孙悟空';

删除,是按照行来删除的.无法删除某些列(要想按照列来删除,可以通过 update,把指定条件的行的指定列,设为 null)
alter table 可以修改列,针对所有的行进行的。不能针对有些行进行删除列 (关系型数据库,所有的行的列都得是一致的)
如果在 delete 的时候,没有指定条件,就会把整个表的所有数据都删除掉,效果和删除表就差不多了,这个操作就是一个危险操作 。

4. 修改 (update)

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

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

  • 改哪个表?
  • 改这个表里的哪个列/哪些列,改成什么?
  • 改这个表的哪些行?
-- 将孙悟空同学的数学成绩变更为 80 分
update exam_result set math = 80 where name = '孙悟空';
-- update 也可以一次操作修改多个列
-- 将曹孟德同学的数学成绩变更为 60 分,语文成绩变更为 70 分
update exam_result set chinese = 70,math = 60 where name = '曹孟德';
-- 修改操作,也可以搭配 order by 这样的排操作
-- 将总成绩倒数前三的 3 位同学的数学成绩加上 30 分
update exam_result set math = math + 10 order by chinese + math + english limit 3;

select 中支持的 条件,排序, 分页,对于 update 来说同样生效的,update 可以理解成先查询,再修改。

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

数据库中的危险操作:
drop database
drop table
select *
update
delete

基础增删查改总结

1.insert into 表名 values (,....);
2. select1) select * from 表名2) select 列名,列名... from 表名;3) select 表达式 from 表名4) select 表达式 as 别名 from 表名;5) select distinct 列名 from 表名6) select 列名 from 表名 order by 列名 asc/desc;7) select 列名 from 表名 where 条件;8) select 列名 from 表名 limit N offset M;
3.update 表名 set 列名 =where 条件/order by/limit;
4. delete from 表名 where 条件/order by/limit;

相关文章:

MySQL表的基础操作(crud)

1. 新增&#xff08;Create&#xff09; insert into 表名 values (值, 值…); 此处列出的这些值,的数目和类型要和表的列相匹配。 -- 在student 表中插入学号1&#xff0c;姓名zhangsan的数据 insert into student values(1, zhangsan); -- 指定列插入 insert into student …...

vue中的activated和deactivated

目录 一、简介二、使用 一、简介 当页面被keep-alive缓存下来的时候&#xff0c;vue提供两个钩子函数 activated被 keep-alive 缓存的组件激活时调用。deactivated被 keep-alive 缓存的组件失活时调用。 当keepalive页面缓存&#xff0c;有activated钩子和created钩子函数时 …...

unity 发布报错 The type or namespace name `UnityEditor‘ could not be found.

引用了UnityEditor的内容&#xff0c;发布当然会报错啦 加上宏判断就好啦...

在ubuntu中将dict.txt导入到数据库sqlite3

将dict.txt导入到数据库 #include <head.h> #include <sqlite3.h> int do_insert(int i,char *str,sqlite3 *db); int main(int argc, const char *argv[]) {//创建泵打开一个数据库sqlite3 *db NULL;if(sqlite3_open("./my.db",&db) ! SQLITE_OK){…...

nginx 代理postgresql

首先&#xff0c;Nginx为我们的数据库增加了额外的安全层。Nginx提供了一整套的选项&#xff0c;这使得管理访问和保护数据库变得很容易。例如&#xff0c;我们可以配置为只有一小部分IP地址可以访问数据库。 PostgreSQL不使用HTTP或HTTPS&#xff0c;而是使用一个新块儿strea…...

小程序 CSS-in-JS 和原子化的另一种选择

小程序 CSS-in-JS 和原子化的另一种选择 小程序 CSS-in-JS 和原子化的另一种选择 介绍快速开始 pandacss 安装和配置 0. 安装和初始化 pandacss1. 配置 postcss2. 检查你的 panda.config.ts3. 修改 package.json 脚本4. 全局 css 注册 pandacss5. 配置的优化与别名 weapp-pand…...

flutter项目 环境搭建

开发flutter项目 搭建工具环境 flutter项目本身 所需开发工具环境 flutter 谷歌公司开发 系统支持库 镜像库 搭建流程&#xff1a; flutter 官网&#xff1a; https://flutter.dev/community/china //步骤1 .bash_profile touch .bash_profile pwd /Users/haijunyan open ~ e…...

PG-DBA培训12:PostgreSQL物理备份与恢复实战

一、风哥PG-DBA培训12&#xff1a;PostgreSQL物理备份与恢复实战 课程目标&#xff1a; 本课程由风哥发布的基于PostgreSQL数据库的系列课程&#xff0c;本课程属于PostgreSQL备份恢复与迁移升级阶段之PostgreSQL物理备份与恢复实战&#xff0c;学完本课程可以掌握&#xff1…...

饿了么大数据开发凉经

1 一个mapreduce进程会启动多少map进程多少reduce进程* 1&#xff09;map数量由处理的数据分成的block数量决定default_num total_size / split_size; 2&#xff09;reduce数量为job.setNumReduceTasks(x)中x 的大小。不设置的话默认为 1。 2 讲下shuffle的过程 shuffle分为…...

前端安全:XSS 与 CSRF 安全防御

在当今数字化的时代&#xff0c;前端安全性变得愈发重要。跨站脚本攻击&#xff08;XSS&#xff09;和跨站请求伪造&#xff08;CSRF&#xff09;是常见的前端安全威胁&#xff0c;但通过一些简单的防御策略&#xff0c;我们可以有效地保护我们的应用程序和用户信息。本文将为您…...

应用层读取wfp防火墙阻断记录

前言 之前的文档中&#xff0c;描写了如何对WFP防火墙进行操作[链接在此]&#xff0c;这篇文档中&#xff0c;描述如何获取WFP防火墙进行阻断的操作记录。 需要注意的坑点 使用FWPM_NET_EVENT_TYPE获取防火墙日志时&#xff0c;需要注意&#xff0c;只有丢弃和内核丢弃&…...

web基础和tomcat的安装,部署jpress应用

目录 1. 简述静态网页和动态网页的区别。 2. 简述 Webl.0 和 Web2.0 的区别。 3. 安装tomcat8&#xff0c;配置服务启动脚本&#xff0c;部署jpress应用。 1. 简述静态网页和动态网页的区别。 【1】定义区别 请求响应信息&#xff0c;发给客户端进行处理&#xff0c;由浏览…...

idea git命令使用

这个标签标识单签分支&#xff1a;&#xff08;标签图标&#xff09; 标识关联分支&#xff1a;&#xff08;五角星&#xff09; 本地切换分支&#xff1a;如当前分支是dev ,git branch 显示的是dev ,然后通过 git checkout -b release 切换到release分支 git checkout re…...

软件测试技术之单元测试—工程师 Style 的测试方法

什么是单元测试&#xff1f; Wikipedia 对单元测试的定义&#xff1a; 在计算机编程中&#xff0c;单元测试&#xff08;Unit Testing&#xff09;又称为模块测试&#xff0c;是针对程序模块&#xff08;软件设计的最小单位&#xff09;来进行正确性检验的测试工作。 在实际…...

C#学习....

1.基础 //引用命名空间using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;//项目名或者命名空间 namespace _01_MY_First_Demo {//Program类class Program{//程序的主入口或者Main函数static void Main(S…...

C语言暑假刷题冲刺篇——day2

目录 一、选择题 二、编程题 &#x1f388;个人主页&#xff1a;库库的里昂 &#x1f390;CSDN新晋作者 &#x1f389;欢迎 &#x1f44d;点赞✍评论⭐收藏✨收录专栏&#xff1a;C语言每日一练 ✨其他专栏&#xff1a;代码小游戏C语言初阶&#x1f91d;希望作者的文章能对你…...

springcloud3 hystrix实现服务降级的案例配置2

一 服务降级的说明 1.1 服务降级说明 "服务器忙&#xff0c;请稍后在试"不让客户达等待&#xff0c;立即返回一个友好的提示。 1.2 服务降级的触发情况 1.程序运行异常&#xff1b; 2.超时&#xff1b; 3.服务熔断触发服务降级&#xff1b;4 .线程池/信号量打…...

第 3 章 稀疏数组和队列(1)

3.1 稀疏 sparsearray 数组 3.1.1先看一个实际的需求 编写的五子棋程序中&#xff0c;有存盘退出和续上盘的功能。 分析问题: 因为该二维数组的很多值是默认值 0.因此记录了很多没有意义的数据.->稀疏数组 3.1.2基本介绍 当一个数组中大部分元素为 0&#xff0c;或者为同…...

7-10 奇偶分家

分数 10 全屏浏览题目 切换布局 作者 陈越 单位 浙江大学 给定N个正整数&#xff0c;请统计奇数和偶数各有多少个&#xff1f; 输入格式&#xff1a; 输入第一行给出一个正整N&#xff08;≤1000&#xff09;&#xff1b;第2行给出N个非负整数&#xff0c;以空格分隔。 输…...

使用词向量以数学方式查找具有相似含义的单词

摄影&#xff1a;Nika Charakova 一、说明 简而言之&#xff0c;词向量只不过是表示自然语言词含义的一系列实数。这项技术是有用的NLP功能的重要推动力&#xff0c;使机器能够“理解”人类语言。本文讨论如何使用词向量以编程方式计算文本的语义相似性&#xff0c;例如&#x…...

opencv实现以图搜图

这里写目录标题 1. 步骤1.1 导入OpenCV库&#xff1a;1.2 加载图像1.3 提取特征1.4 匹配特征1.5 显示结果 2. 完整代码3. 测试图片及效果 1. 步骤 1.1 导入OpenCV库&#xff1a; 在您的C代码中&#xff0c;首先需要导入OpenCV库。您可以使用以下语句导入核心模块&#xff1a;…...

爬虫工作中代理失效了怎么处理?

Hey&#xff01;亲爱的爬虫小伙伴们&#xff0c;是不是经常在爬虫的工作中遇到代理IP失效的问题&#xff1f;别着急&#xff0c;今天我来分享一些应对代理失效的妙招&#xff01;这些方法简单易行&#xff0c;让你爬虫顺利进行. 一、为什么代理会失效&#xff1f; 在爬虫过程…...

使用虚拟环境conda安装不同版本的cuda,cudnn,pytorch

背景&#xff1a;在学习深度学习时&#xff0c;我们不可避免的需要跑多个神经网络&#xff0c;而不同的神经网络环境都不一样&#xff0c;所以必须要使用到虚拟环境(如conda)去做环境隔离&#xff0c;安装属于自己的环境。在这环境中&#xff0c;大多神经网络都必须要用到cuda&…...

【24择校指南】华东师范大学计算机考研考情分析

华东师范大学(B) 考研难度&#xff08;☆☆☆☆&#xff09; 内容&#xff1a;23考情概况&#xff08;拟录取和复试分数人数统计&#xff09;、院校概况、23考试科目、23复试详情、各科目及专业考情分析。 正文2563字&#xff0c;预计阅读&#xff1a;3分钟。 2023考情概况…...

什么是LAXCUS分布式操作系统?

相较Linux、Windows&#xff0c;Laxcus是同时在多台计算机上运行的操作系统&#xff0c;处理大规模、高并发、高性能业务&#xff0c;其特点是资源共享和任务并行&#xff0c;并实现【数存算管】超融合一体化。环境中的资源&#xff1a;CPU、GPU、内存、硬盘、网络&#xff0c;…...

Redis数据结构——链表list

链表是一种常用的数据结构&#xff0c;提供了顺序访问的方式&#xff0c;而且高效地增删操作。 Redis中广泛使用了链表&#xff0c;例如&#xff1a;列表的底层实现之一就是链表。 在Redis中&#xff0c;链表分为两部分&#xff1a;链表信息 链表节点。 链表节点用来表示链表…...

[自学记录06|*百人计划]Gamma矫正与线性工作流

一、前言 Gamma矫正其实也属于我前面落下的一块内容&#xff0c;打算把它补上&#xff0c;其它的没补是因为我之前写的GAMES101笔记里已经涵盖了&#xff0c;而Gamma矫正在101里面确实没提到&#xff0c;于是打算把它补上&#xff0c;这块内容并不难&#xff0c;但是想通透的理…...

【数据结构】二叉树链式结构的实现及其常见操作

目录 1.手搓二叉树 2.二叉树的遍历 2.1前序、中序以及后序遍历 2.2二叉树的层序遍历 3.二叉树的常见操作 3.1求二叉树节点数量 3.2求二叉树叶子节点数量 3.3求二叉树第k层节点个数 3.3求二叉树的深度 3.4二叉树查找值为x的节点 4.二叉树的销毁 1.手搓二叉树 在学习…...

从零实战SLAM-第九课(后端优化)

在七月算法报的班&#xff0c;老师讲的蛮好。好记性不如烂笔头&#xff0c;关键内容还是记录一下吧&#xff0c;课程入口&#xff0c;感兴趣的同学可以学习一下。 --------------------------------------------------------------------------------------------------------…...

Python Opencv实践 - 图像金字塔

import cv2 as cv import numpy as np import matplotlib.pyplot as pltimg cv.imread("../SampleImages/pomeranian.png", cv.IMREAD_COLOR) print(img.shape)#图像上采样 #cv.pyrUp(src, dstNone, dstsizeNone, borderTypeNone) #参考资料&#xff1a;https://blo…...