数据库的增删查改(CRUD)基础版

CRUD: create增加、retrieve查询、update更新、delete删除

注意一点:MySQL对大小写是不敏感的

目录

新增(create)

全列插入

指定列插入 

多行插入

查询(Retrieve)

列查询

全列查询

指定列查询

表达式查询

给查询结果指定别名

查询去重

查询的同时进行排序

条件查询(where)

实操

分页查询(limit)

修改(update)

删除(delete)


新增(create)

实际上sql中使用insert往表里插入数据

(前提:选定好数据库并创建好表)

全列插入

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

如果要插入中文,对于MySQL5来说,要显式地设定好字符集

诶我忘记加了怎么办?趁着现在数据库还没啥东西,删了重建就行了(手动滑稽~

⚠插入的列类型要和列头匹配

插入datetime类型的数据时,插入的数据要按照格式 YYYY-MM-DD HH:MM:SS 来填充,数据库会自动把你输入的时间转为8个字节的时间戳

sql是一种编程语言,我们可以使用自带的库函数now()把当前时间插入到里面 


指定列插入 

第二种错误换一种写法就对了

表示这一次插入只插入id这一列(可以指定多个列名,使用","分割即可)

也可以只插入名字到name那一列

现在看看表的状态

没有问题😊


多行插入

每条记录用","分割就行

这种多行插入执行效率会比一行一行插入高

MySQL是一种客户端-服务器结构的程序,通过网络互传数据

如果分多个sql进行,意味这个过程中就会有多次网络交互,服务器收到请求后也要进行多次对应处理(语法检查,数据校验,定位插入数据...),这样效率就很低

如果一次操作,虽然单次操作消耗时间长一点,但是网络开销、服务器检查开销都只用进行1次


查询(Retrieve)

列查询

全列查询

select * from 表名;

这里的*指的是通配符,可以表示任何一列

在公司中一般不要敲select * ,因为一旦数据量很大,这个操作会产生大量的硬盘IO和网络IO,可能把硬盘或网卡的带宽吃满(类似于堵车)

带宽吃满了,此时服务器就无法正常相应其他客户端的请求了

搜狗公司的解决方式:

给每个服务器配上两个网卡,一个用来传输数据,一个用来控制命令

数据网卡吃满了,不耽误另一个控制网卡来接收

阿里巴巴的解决方式:

用钱解决,直接上万兆网卡,相比于千兆网卡,这个更不容易堵死

相当于4条车道扩充到40条车道


指定列查询

指定列查询可以只查一两列,消耗的硬盘/网络带宽只有之前的几分之一

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

这种查询方式也不是万无一失,如果查的列行数巨多,也可能把路堵死


表达式查询

把查询出的每一行带入表达式进行计算

现在有这么一张表

查询每个同学英语成绩+10的情况

1.当前的表达式查询,并不会修改服务器硬盘中存储的数据本体,只是在查询结果的基础上进行计算的,得到的是一个临时表,查询操作结束,临时表里面的数据就消散了

所有的select都只是在操作临时表

2.此处查询出来的临时表,每个列的类型不再受限于原始表

原始表中,english列的数据类型是decimal(3,1),即长度限制为3,小数点后限制1位

但是在临时表中我们发现100.0这已经不符合长度为3这个限制了

=========================================================================

表达式还可以对多个列进行运算,但无法针对行和行之间进行运算

查询的表达式是啥,临时表的列名就是啥,如果列名都很长,最后临时表的列名可读性会变差

那就可以用下面的方法 

给查询结果指定别名

通俗来讲就是起绰号

select 表达式 as 别名 from 表名;

别名不一定要给列起,也可以给表起


查询去重

查询结果中如果存在重复的元素,就只保留一个

select distinct 列名 from 表名;

如果列里面有数据重复就把值相同的记录合并成一个 

如果是多个列一起查重,那只有多个列的值是相同的才算是重复

比如name和math一起去重,虽然math这一列有相同的值,但是name列两个98对应的名字不一样啊,所以就不去重


查询的同时进行排序

select 列名 from 表名 order by 列名;

如果一个查询语句没有order by,那反馈出来的临时表数据之间的顺序是不可预期的

所以一定要有一个order by确定一个顺序

这里默认是一个升序排序,在刚刚查询语句后面加个desc就是降序了

此处的desc ≠ describe 而是 = descand(降序) 

order by可以指定多个列来进行排序,此时排序的列是带有优先级

前面的列(紧跟着order by的)优先级高,后面的列优先级低,优先级高的列值相同才会比较优先级低的列

先按照数学成绩排序,如果数学成绩相同,再按照语文成绩排序


条件查询(where)

查询的时候指定筛选条件,条件满足这个数据就被保留;不满足就直接跳过

注意:

1. = 在条件查询中表示比较是否相等(和C语言的==含义一样)

这里的NULL=NULL=>NULL其实相当于FALSE的意思,表示条件不成立

NULL表示单元格没填,这里的理解是没填和没填是不同的,不具有可比性

而下面的<=>的 NULL=NULL=>TRUE,这里的理解是没填和没填是相同的,都是空嘛~

2. 模糊匹配,指的是不要求完全一样,只要满足一定的规则就算匹配了

逻辑运算符

实操

1.查询英语成绩<60分的同学

2.查询语文成绩逼英语成绩好的同学

3.查询总分200分以下的同学

起个别名能不能让列更简洁呢?

显然不行,这里定义的别名不能被where感知到

⚠SQL执行顺序:

1.取出一条记录(遍历表);

2.把记录带入条件,判定是否满足

3.如果条件满足,再把select后面指定的列取出来,并进行一些表达式运算 

而上面的过程是先执行where,后执行表达式的取别名操作


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

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

6. and的优先级大于or

第一条语句先执行math>70 and english>70,再执行or

对于曹孟德来说,and语句执行是false的,但是Chinese>80这个条件是true的,true or false = true

所以曹孟德同学在这张表里

第二条语句先执行括号里面的or语句,再执行and

曹孟德同学or语句为true,但是english >70 这个条件为false, true and false = false

所以此时曹孟德同学不会在这张表里

其实真正写代码的时候,我们不用过多在乎优先级,我们只要用括号显式表示哪个式子先执行就行了


 7. 查询语文成绩在 [80, 90] 分的同学及语文成绩 (between ... and ...)

第一种方法

第二种方法

8.查询数学成绩是 78 或者 59 或者 98 或者 99 分的同学及数学成绩(in)

9. like

%:匹配任意个任意字符,可以匹配到0个字符

_:匹配一个字符

写成%孙就是以孙为结尾;%孙%表示查询名字里有孙的名字

_用法和%差不多,只不过 '_'写在前面只能匹配一个字符

10 is (not) null;

但是不要用 = 号

这里的null = null -> null -> false -> 条件没有满足


分页查询(limit)

我们上面提到select * 这个操作很危险,可能一次查询出来的内容太多辣

分页查询就是解决上面问题的方案。 

我们常见的网站也有分页的效果

分页查询通过关键字limit来限制这一次的查询最多能查多少记录 

offset:描述当前结果从第几条开始获取

 


修改(update)

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

注意:update里面创建出来的表不是临时表!!! 

这里的set是设置的意思,此处的 = 就是赋值了

where 条件:表示要修改哪些行,定位的作用;条件不写就是修改所有了

1. 把孙悟空数学成绩改成80分

2. 把曹孟德数学改成60分,语文改成70分

3. 捞捞同学:将总成绩倒数前三的3位同学数学成绩+30分

先查出总成绩倒数前三的同学分别是何方神圣 

再查出这三位同学数学成绩分别是咋样的

期望通过update给他们数学成绩加30分

但是刘玄德同学+30分后变成115.0不符合decimal(3,1)的类型了

而且第二行一旦出错,第一行和第三行的成绩也加不上去

这个是sql的一个特性:“事务”,给定的一个sql语句就是一个整体,要么整个执行成功,要是失败就全部都不执行。我下一篇博客会讲到😊

🆗我们看到刘玄德同学数学还是挺不错的,捞给他30分怕是顶破天了,我们现在只给他们+10分

update也是蛮危险的操作,因为它撤回不了!!!


删除(delete)

delete from 表名 where 条件;

删掉孙悟空的成绩 

如果删除语句没有指定条件,就会全部删除

注意:这里的delete只是删除了表里面的数据,而drop table则是把表和表里的数据都删掉了

delete也是一个危险操作!!!


后续待更新~~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/197834.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【问题解决!】OSError: [WinError 1455] 页面文件太小,无法完成操作。Error loading “c:\Anaconda3\lib

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 问题描述问题原因二、解决方法 问题描述 在使用pytorch跑深度学习的时候报错OSError: [WinError 1455] 页面文件太小&#xff0c;无法完成操作。Error loading “c…

vivado产生报告阅读分析27

1、设计 QoR 汇总 命令行选项 -qor_summary 可用于为流程中每个步骤生成 QoR 汇总信息。该选项只能从 Tcl 控制台使用。该选项可按两种格式生成&#xff1a; 基于文本的报告或 JSON 格式。 要生成基于文本的格式 &#xff0c; 请运行以下命令 &#xff1a; report_des…

0005Java程序设计-ssm基于微信小程序的校园求职系统

文章目录 摘 要目 录系统设计开发环境 编程技术交流、源码分享、模板分享、网课分享 企鹅&#x1f427;裙&#xff1a;776871563 摘 要 随着我国经济迅速发展&#xff0c;人们对手机的需求越来越大&#xff0c;各种手机软件也都在被广泛应用&#xff0c;但是对于手机进行数据…

小白必知:AIGC 和 ChatGPT 的区别

原文 &#xff1a; https://openaigptguide.com/chatgpt-aigc-difference/ AIGC 和 ChatGPT 都是人工智能技术&#xff0c;但它们的功能和应用场景不同。 AIGC&#xff08;AI-GeneratedContent&#xff0c;人工智能自动生成内容&#xff09;是人工智能、计算机图形学和深度学…

dbvisual editor 显示中文乱码

打开如下的页面就可以选择中文相关的字体就可以正常显示中文了。

spring-boot对rabbitMQ的操作

一、安装rabbitMQ 1、直接使用docker拉取镜像 docker pull rabbitmq:3.82、启动容器 docker run \-e RABBITMQ_DEFAULT_USERadmin \-e RABBITMQ_DEFAULT_PASS123456 \-v mq-plugins:/plugins \--name rabbit01 \--hostname rabbit01 --restartalways \-p 15672:15672 \-p 5672:…

11-28渗透

用nmap扫描靶机1进行主机发现 已知靶机1的主机在172.16.17.0/24下 扫描结果如下 根据扫描结果看开启的服务怀疑172.16.17.177是靶机1 浏览器访问172.16.17.177页面得到如下 我们知道织梦cms系统默认管理路径是dede&#xff0c;登陆管理后台可以通过地址172.16.17.177/dede/i…

第六节HarmonyOS UIAbility内页面的跳转和数据传递

一、页面跳转 在一个应用包含一个UIAbility的场景下&#xff0c;可以通过新建多个页面来实现和丰富应用的内容。这会涉及到UIAbility内页面的新建以及UIAbility内页面的跳转和数据传递。 打开DevEco Studio&#xff0c;选择一个Empty Ability工程模板&#xff0c;创建一个工程&…

深入了解Java8新特性-日期时间API:OffsetDateTime类

阅读建议 嗨&#xff0c;伙计&#xff01;刷到这篇文章咱们就是有缘人&#xff0c;在阅读这篇文章前我有一些建议&#xff1a; 本篇文章大概24000多字&#xff0c;预计阅读时间长需要20分钟。本篇文章的实战性、理论性较强&#xff0c;是一篇质量分数较高的技术干货文章&…

pandas教程:US Baby Names 1880–2010 1880年至2010年美国婴儿姓名

文章目录 14.3 US Baby Names 1880–2010&#xff08;1880年至2010年美国婴儿姓名&#xff09;1 Analyzing Naming Trends&#xff08;分析命名趋势&#xff09;评价命名多样性的增长“最后一个字母”的变革变成女孩名字的男孩名字&#xff08;以及相反的情况&#xff09; 14.3…

电荷泵升压/降压电路

一、升压\降压电路原理分析 1、升压电路 电荷泵升压电路 VoutVa5V 5V_PLUS0V时&#xff0c;Va给C2充电&#xff0c;C2上节点电压比C2下节点电压高Va&#xff1b; 5V_PLUS5V时&#xff0c;C2电压不能突变&#xff0c;C2上节点电压依然比C2下节点电压高Va&#xff0c;但C2下节点…

Redis 主从架构,Redis 分区,Redis哈希槽的概念,为什么要做Redis分区

文章目录 Redis 主从架构redis replication 的核心机制redis 主从复制的核心原理过程原理Redis集群的主从复制模型是怎样的&#xff1f;生产环境中的 redis 是怎么部署的&#xff1f;机器是什么配置&#xff1f;你往内存里写的是什么数据&#xff1f;说说Redis哈希槽的概念&…

智安网络|探索云安全合规要求:等保2.0时代的新趋势解析

随着信息技术的不断发展和应用的广泛普及&#xff0c;信息安全问题日益凸显&#xff0c;特别是在云计算时代&#xff0c;企业对于云平台的安全保障需求更为迫切。等级保护&#xff08;等保&#xff09;作为我国信息安全的基本要求&#xff0c;已经进入了2.0时代&#xff0c;对于…

ArkTS-共享元素转场动画

共享元素转场动画 在不同页面间&#xff0c;有使用相同的元素&#xff08;例如同一幅图&#xff09;的场景&#xff0c;可以使用共享元素转场动画衔接。为了突出不同页面间相同元素的关联性&#xff0c;可为它们添加共享元素转场动画。如果相同元素在不同页面间的大小有明显差异…

有没有不含亚硫酸盐的葡萄酒?

没有完全不含亚硫酸盐的葡萄酒&#xff0c;有机葡萄酒和生物动力葡萄酒中也会含有少量天然 亚硫酸盐。因为它是在发酵过程中产生的一种化合物&#xff0c;所以不可能酿造无亚硫酸盐的葡萄酒。 在大多数葡萄酒国家都有葡萄酒法律规定&#xff0c;如果葡萄酒超过特定的亚硫酸盐水…

【华为OD题库-043】二维伞的雨滴效应-java

题目 普通的伞在二维平面世界中&#xff0c;左右两侧均有一条边&#xff0c;而两侧伞边最下面各有一个伞坠子&#xff0c;雨滴落到伞面&#xff0c;逐步流到伞坠处&#xff0c;会将伞坠的信息携带并落到地面&#xff0c;随着日积月累&#xff0c;地面会呈现伞坠的信息。 1、为了…

JavaScript的学习

HTML的学习-CSDN博客 从html的学习中 其实我已经用到了 JavaScript的脚本 &#xff08;GPT&#xff09; 例如 echo <script>alert("账号密码错误"); window.location"index.html";</script>; 弹窗 然后定位到 index.html 这里能够让我们更…

C++数据结构:图

目录 一. 图的基本概念 二. 图的存储结构 2.1 邻接矩阵 2.2 邻接表 三. 图的遍历 3.1 广度优先遍历 3.2 深度优先遍历 四. 最小生成树 4.1 最小生成树获取策略 4.2 Kruskal算法 4.3 Prim算法 五. 最短路径问题 5.1 Dijkstra算法 5.2 Bellman-Ford算法 5.3 Floyd-…

二十章总结

线程简介 Windows操作系统是多任务操作系统&#xff0c;它以进程为单位。一个进程是一个包含有自身地址的程序&#xff0c;每个独立执行的程序都称为进程。也就是说每个正在执行的程序都是一个进程。系统可以分配给每一个进程有一段有限的使用CPU的时间&#xff08;也可以称为C…

使用NVM管理多个Nodejs版同时本支持vue2、vue3

1.安装nvm,下载地址&#xff1a; https://github.com/coreybutler/nvm-windows/releases/tag/1.1.12 2.nvm常用命令 Usage:nvm arch : Show if node is running in 32 or 64 bit mode.nvm current : Display active version.nvm debug …