MySQL表的增删改查(CRUD1)

好兄弟们,有没有忘了咱们上节说的知识点呢?忘了也没关系,让我们开始复习吧!!!

上期我们介绍了数据类型,还有一些表的操作,我们常用的数据类型有:
1.数值类型 tinyint     int     bigint   decimal(M,D)
2.字符类型varchar(M)  text   char(N)
3.日期类型date datetime

表操作

1. show tables;查看当前数据库中所有的表

2. use 数据库 :选择你要使用的数据库

3. select database(); :查看你使用的数据库
2. create table (
字段名1数据类型  comment ' 备注名',

字段名2 数据类型  );
3.desc 表名; 查看表结构
4. drop table [if exists] 表名;

通过上面的复习,相信大家对于上一章的内容已经了如指掌了,让我们接下来开始对新内容进行学习吧!!加油,各位!!

 1.新增 (Create)


1.单行数据+全列插入


insert into 表名[(字段1,字段2)]    values (值,值 );    


插入一条新数据行    值    按照前面字段名的顺序,设置对应的值    
定义表时的字段名,可以是多个也可是一个
字符串类型的值用英文的单引号包裹
mysql>    select * from student;    前面指定的列,与后面values中的值要一一对应    

如果列与值的个数据不匹配就会报一个错误,并且这条记录无法写入数据表

2  全类插入

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


简写方式,不用在表名后指定列名,在values列表中按表中定义字段的顺序设置相应的值



如果values列表中的值与列的个数据不匹配,依然会报

3.指定列插入

insert into 表名[(字段1,字段2)]    values (值,值 );

没有指定ld这一列时,只写一个name的值,ld这一列就会用默认的值去填充,这个默认值就是NULL

4.多行插入


insert into 表名 [(指定列...)] values (值[,值..]) [,(值[,值..])][,(值[,值..])]...

一条insert语句在values部分,可以跟很个values组,每一组表示要插入的一个数据行

插入了五条数据行

5.通过以上插入方式,大家有没有什么疑惑呢?

思考:

一次插入一条数据和一次插入多条数据哪个效率高?

在 MySQL 数据库中,通常情况下一次插入多条数据的效率要比一次插入一条数据的效率高,主要原因如下:

网络开销方面

  • 当一次插入一条数据时,每次插入操作都需要与数据库服务器进行一次网络通信交互。这意味着如果要插入多条数据,就会产生多次网络往返开销,包括建立连接、传输数据、等待服务器响应等过程,而网络通信往往是相对耗时的操作。
  • 一次插入多条数据则可以将多条数据打包成一个批次,通过一次网络交互发送到数据库服务器,大大减少了网络开销,节省了频繁建立和断开网络连接以及传输小数据包所耗费的时间。

数据库事务处理方面

  • 数据库操作通常是在事务的环境下进行的。一次插入一条数据,每条数据插入都可能会开启一个单独的事务(如果没有显式控制事务范围的话),事务的开启、提交或回滚都有一定的开销,多次这样的操作累积起来会影响性能。
  • 而一次插入多条数据可以在一个事务中完成,只需开启一次事务,执行插入多条数据的操作,最后统一提交事务,减少了事务管理的总体开销。

数据库内部执行优化方面

  • MySQL 的存储引擎(如 InnoDB 等)对于批量插入操作有一定的优化机制。例如,在插入多条数据时,它可以更有效地利用缓存、批量处理数据的写入逻辑等,相比多次单条插入能够更高效地将数据存储到磁盘等存储介质上。

小编在撰写博客,在使用数据库时,发现了一个问题,

为什么我们在插入时明明是汉字,但是MYSQL所给我们展示的数据不是汉字,而是一堆乱码呢?

让我来教大家来处理这个问题吧!!

首先声明一下这是由于编码集设置错误导致的数据写入异常

我们先写入这个命令去查看我们的字符集编码:

show variables like    %character%;   



在配置文件中把数据库服务的编码集改成latin1,这个编码集也是5.7版本中默认的编码集(画横线部分)

这时我们要打开MYSQL的配置文件去配置我们的字符集编码。



修改完成后重启MYSQL服务

或者手动设置新数据库的编码集

mysql> create database test_db character set latinl;

所以如果在以后写入一条中文数据时,出现类似的提示,首先要考虑一下数据库的编码集是否设置正确
如果确定了是编码集的问题,那么就要把原来的库删了,重新创建新库并指定正确的编码集

2.查询 (Retrieve)    

1.全列查询  

语法: select * from 表名;    

 
 

这个表名----->  要查询哪个表 

注意我们一般再生产环境(日常工作)中在不清楚这个数据库的前提下不要随便查询全部的数据
非常危险的操作

因为在生产环境中,一个表中的数据量可能会很多很多,有可能达到TB级
1.当一个查询开始的时候,磁盘开销,会网络开销,
都是非常紧缺的资源
2.如果这一条语句开始执行,那么就有可能把服务器资源吃光,其他的程序或是数据库操作就要等待当前SQL执行完之后才能继续执行

因此不加任何限制的查询在生产环境不要使用。

我们在学习完插入后就可以给数据表插入数据了,这样才让我们有数据可以查,博主这里创建的例子为

2.指定列查询


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


示例: 只查询Id,name,语文成绩

select id, name,  chinese, 10  from exam; 查询的结果是一个表达式


数值类型,效果就是让所有的列中都包含一个表达式中的值    
10    他本身并不在我们的真实的表里  

把所有学生的语文成绩在原来的基础上加10分
 mysql>    select id,    name.    chinese +10    from exam;    


我们可以看到在原来的基本上语文加了10分
 列与列之间也可以参与运算

select id, name , chinese+ math + english from exam;



  这个查询的效果就是计算总分   

关键字 as表达式的别名用法   

1.为列或表达式取别名
select id, name, chinese  +math +englishas as 总分 from exam;

我们想将这三列合并显示,并为合并后的结果取一个别名。

  
2 关键字 as表达式还可以省略

表达式后面跟空格再跟别名

 即这个as 是可以省略掉的    
个人习惯用最简单的书写方式    


 3.如果别名中包含空格就必须    要用单(双)引号包裹起来    

我们的表里本来没有总分这一列,所以通过表达式查询出来的结果集是通过一个临时表返回给我们的,执行完之后临时表就删除了
在MSYQL中所有的查询结果都会通过临时表返回给用户

去重:DISTINCT


关键字
语法:select distinct 列名from 表名;


只查询数据成绩,发现有两个80.5分和两个89.5,此时有两条重复记录



使用了distinct关键字之后,发现重复的记录只保留了一条    

在查询结果中,每一列都相同MYSQL才认为他们是重复数据    
 数据行与数据行之间,也就是两条记录完全一致   
 加上ld之后,第一条记录与第三条记录,ld列不重复,distinct也就不把他们当做相当的行   

去重时,只有查询结果中所有的列都相同才会被认定为重复记录

去重后,重复记录只保留一条

3.排序: ORDER BY

用这个order by 子句,要查询结果中根据我们指定的规则去对结果排序
排序规则:    查看表结构用到了desc describe 描述    
1.升序 ASC       排序中asc  升序
2.降序 DESC    排序中desc descend 降序

在MYSQL中一个关键字,表示了两种意思,这是一个非常不好的反面案例    
我们可以吸取一下这个教训,以后在写代码的时候注意一下命名规范

StringBuilder sb = new StringBuilder();
大家以后写代码的时候,最好写一个有意义的变量名
stringBuilder
GOOGLE编码规范,阿里编码规范

 

1.按语文成绩从高到低排序(降序)


select * from exam order by chinese DESC:


指定了排序的列,返回的结果就是针对这个列进行排序后的结果集   


2.对数学成绩进行升序排序


mysql> select * from exam order by math ASC;    升序    

3.没有写排序规则的时候默认是升序排序 

   select * from exam order by math;   

   
  强烈建议明确指定排序规则    

没有order by 子句时,返回结果集是按哪个字段进行排序的?    比如说,找工作面试的时候,两个公司的hr    
没有指定order by 子句时,永远不要依赖默认排序返回结集顺序    A说: 我们公司不加班    
默认MYSQL根据哪个字段进行排序,是不确认的    B说: 我们公司没有明确要求加班    
如果依赖某个排序规则,那么就明确指定order by 子句中的排序字段

注意:

 NULL 数据排序,视为比任何值都小,升序出现在最上面,降序出现在最下面

使用表达式及别名排序


之前计算出来的总分,对总分进行排序

 select id, name, chinese + math + english '总 分'from exam order by chinese + math + english desc;

丽丽的语文是有成绩的,但是总分却是一个NULL


mysql中NULL 比较特殊
1.不论和什么值进行运算,返回的值都是NULL
2.NULL 始终被判定为FALSE
3.NULL 的值不是我们以前学习过的其他编程语言中的0,在MYSQL中他就是NULL

可以对多个字段进行排序,排序的优先级与书写顺序相关
可以为每个字段指定不同的排序规则    order by 列名 [asc|desc],列名 [asc|desc],列名 [asc|desc] ...    
先按数学降序排列,再按语文升序排列,再按英文进行升序排列

我们可以看到在数学排序的基础上,对语文成绩进行升序排列,英文成绩是在前两个排序结果的基础上进行升序

总结:

我们今天学习了如何插入数据,查询和排序的关键字使用:

1.单行数据+全列插入: insert into 表名 [(字段1,字段2)]    values (值,值 );

2.全列查询    : select * from 表名; 

3.为表达式取别名   :select 字段名 as自创名 from 表名;

4.去重  :   select distinct 列名from 表名:

5. 排序:select 列名 from 表名 order by 列名 【ASC(升序) | DESC(降序)】

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++和OpenGL实现3D游戏编程【连载17】——着色器进阶(附源码)

🔥C++和OpenGL实现3D游戏编程【目录】 1、本节要实现的内容 在前面着色器初步一节我们了解了着色器的一些初步知识,通过顶点着色器和片段着色器显示出了一个彩色的立方体。我们这节课就来了解一些在着色器中显示纹理等一系列实用操作,同时了解一些进阶的图像渲染技术,比如…

C++ | Leetcode C++题解之第520题检测大写字母

题目: 题解: class Solution { public:bool detectCapitalUse(string word) {// 若第 1 个字母为小写,则需额外判断第 2 个字母是否为小写if (word.size() > 2 && islower(word[0]) && isupper(word[1])) {return false;…

教育技术革新:SpringBoot在线试题库系统开发

2 相关技术 2.1 Spring Boot框架简介 Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。通过这种方式,Sprin…

React + Vite + TypeScript + React router项目搭建教程

一、创建项目 运行项目 二、目录结构 项目目录: ├─node_modules //第三方依赖 ├─public //静态资源(不参与打包) └─src├─assets //静态资源├─components //组件├─config //配置├─http //请求方法封装├─layout //页面…

Android笔记(三十一):FrameLayout遇到的坑

背景 当FrameLayout里面是match_parent的时候,如果FrameLayout是wrap_content,则里面的view也会被当作wrap_content处理 原因 FrameLayout内的measureChildWithMargins -> getChildMeasureSpec的子类的MeasureSpec确定规则由父类的MeasureSpec和子类的LayoutP…

【设计模式】结构型模式(一):适配器模式、装饰器模式

结构型模式(一):适配器模式、装饰器模式 1.适配器模式(Adapter)2.装饰器模式(Decorator)2.1 主要特点2.2 组成部分2.3 示例代码2.3.1 Component 组件2.3.2 ConcreteComponent 具体组件2.3.3 Dec…

认识物联网

新一代信息技术 物联网 物物相连的互联网,即物联网,又称传感器常见的传感器 • 温度传感器 • 压力传感器 • 声音传感器 • 02 • */08521 物联网概念 • 通过射频识别,红外传感器,全球定位系统GPS,激光扫描…

C语言 | Leetcode 题解之第535题TinyURL的加密与解密

题目: 题解: typedef struct {int key;char *val;UT_hash_handle hh; } HashItem;HashItem *dataBase NULL;char* encode(char* longUrl) {srand(time(0));int key;HashItem * pEntry NULL;while (true) {key rand();pEntry NULL;HASH_FIND_INT(dat…

Linux:线程安全的单例模式

设计模式 设计模式听上去是个很高贵的名词,其实就是是一套 多数人知晓、被反复使用、经过分类编目的、代码设计经验的总结,简称:对于编程比较典的场景的解决方案 单例模式 单例模式就是其中一种设计模式,是设计模式里的创建型模…

【网络安全】揭示 Web 缓存污染与欺骗漏洞

未经许可,不得转载。 文章目录 前言污染与欺骗Web 缓存污染 DoS1、HTTP 头部超大 (HHO)2、HTTP 元字符 (HMC)3、HTTP 方法覆盖攻击 (HMO)4、未键入端口5、重定向 DoS6、未键入头部7、Host 头部大小写规范化8、路径规范化9、无效头部 CP-DoS10、HTTP 请求拆分Web 缓存污染与有害…

AI打造超写实虚拟人物:是科技奇迹还是伦理挑战?

内容概要 在这个科技飞速发展的时代,超写实虚拟人物仿佛从科幻小说中走进了我们的日常生活。它们以生动的形象和细腻的动作,不仅在影视、广告和游戏中吸引了无数目光,更让我们对AI技术的未来充满了期待和疑惑。这些数字化身在逼真的外貌下&a…

第三次RHCSA作业

1、配置网络:为网卡添加一个本网段IPV4地址,x.x.x.123 2、配置yum本地仓库,并完成traceroute命令的安装 yum库配置成功过后,显示这个报错,没能写完 3、用至少两种方法查看sshd服务的进程号 4、添加一块10G大小的磁盘&…

前端用docker部署

1、环境检查 首先需要确认服务器上是否已经安装docker了。 在服务器上执行docker -v 显示对应的版本号说明已经安装好了docker 2、部署 使用Docker部署若依项目的前端服务,我们最终实现的是:启动一个镜像,我们的整个前端就启动了&#xf…

论文翻译:ICLR 2024.DETECTING PRETRAINING DATA FROM LARGE LANGUAGE MODELS

文章目录 检测大型语言模型的预训练数据摘要1 引言2 预训练数据检测问题2.1 问题定义和挑战2.2 WIKIMIA:动态评估基准 3 MIN-K% PROB:简单的无参考预训练数据检测方法4 实验4.1 数据集和指标4.2 基线检测方法4.3 实现和结果4.4 分析 5 案例研究&#xff…

使用Jest进行JavaScript单元测试

💓 博客主页:瑕疵的CSDN主页 📝 Gitee主页:瑕疵的gitee主页 ⏩ 文章专栏:《热点资讯》 使用Jest进行JavaScript单元测试 引言 Jest 简介 安装 Jest 创建基本配置 编写测试用例 运行测试 快照测试 模拟函数 代码覆盖率…

根据关键字搜索商品API返回值解析:深入解析与代码实践

在电子商务和数据集成领域,API(应用程序编程接口)扮演着至关重要的角色。通过API,开发者可以访问和利用平台的数据资源,实现自动化和智能化的数据交互。本文将探讨如何根据关键字搜索商品API的返回值进行解析&#xff…

哈尔滨华时信息技术有限公司,特色之处见怎么样

哈尔滨华时信息技术有限公司的特色之处体现在以下几个方面: 1. **技术优势**: - **无线网络技术专长**:在无线网络领域有深厚的技术积累和优势。具备高度的灵活性与移动性,能为客户提供灵活的网络解决方案,满足如移动…

【书生.浦语实战营】——入门岛

【书生.浦语实战营】——入门岛_第一关_Linux基础 任务分布1. 本地vscode远程连接并进行端口映射端口映射What——何为端口映射How——怎么进行端口映射 2. Linux基础命令touch :创建文件mkdir :创建目录cd:进入 退出 目录pwd :确定当前所在目录cat:可以…

KubeVirt 安装和配置 Windows虚拟机

本文将将介绍如何安装 KubeVirt 和使用 KubeVirt 配置 Windows 虚拟机。 前置条件 准备 Ubuntu 操作系统,一定要安装图形化界面。 安装 Docker(最新版本) 安装 libvirt 和 TigerVNC: apt install libvirt-daemon-system libvir…

RHCE——DNS域名解析服务器、selinux、防火墙

1、DNS简介 DNS ( Domain Name System )是互联网上的一项服务,它作为将域名和 IP 地址相互映射的一个分布式 数据库,能够使人更方便的访问互联网。 DNS 系统使用的是网络的查询,那么自然需要有监听的 port 。 DNS 使…