MySQL数据库基础:增删查改

news2024/9/28 5:29:38

 💎所属专栏: MySQL

在这里插入图片描述

 

💎1. 常用数据类型

💎1.1 数值类型

数值类型可以指定无符号类型,默认为有符号类型,例如身高体重这种,只可能是正数的,可以指定为无符号

CREATE TABLE example (  
    height INT UNSIGNED,  
    weight BIGINT UNSIGNED  
);

 以下是这些类型在Java中对应的类型

数据类型对应Java中的类型
TINYINTByte
SMALLINTShort
INTInteger
BIGINTLong
FLOAT(M,D)Float
DOUBLE(M,D)Double
DECIMAL(M,D)BigDecimal
NUMERIC(M,D)BigDecimal

 float和double类型,在表示小数的时候不是很精准,所以一般用decimal表示

💎1.2 字符串类型

 指定大小的时候,指定的是字符串的长度,例如varchar(10),表示可以存放10个以内的字符,根据编码格式来判断一个字符多少个字节

一般情况下,不直接在数据库中存放文件,而是把文件存放在磁盘中,再去根据文件路径在磁盘上加载或是返回具体的真实文件

💎1.3 日期类型

 💎2. 创建表

 需要操作数据库中的表时,需要先使用该数据库,例如选择text1数据库

use text1;

之后来看创建表的语法

-- 图书表 图书名称,图书作者、图书价格、图书分类
drop table if exists book;
create table if not exists book(
    name varchar(20),
    author varchar(20),
    price decimal(10,2),
    category varchar(20)
);

查看表的结构

语法是:

 查看刚刚创建的book表

desc book;

一般情况下,创建表的代码比较多,再去在命令行中执行就比较麻烦,所以可以使用一些可视化工具,还可以在命令行中执行sql文件,例如把刚才创建表的代码导出为sql文件,直接通过source命令来执行也可以

 通过show tables 命令可以查看当前选择的数据库中都有哪些表

show tables;

💎3. 删除表

和删除数据库类似,这里把之前的book删除一下 

drop table book;

💎4. 插入数据

 要注意的是:

插入数据时,指定的字段顺序要和需要的值的顺序一致

字符串和日期型数据应该用引号引起来

插入字段的数据大小应该在规定范围内

在表名后指定要插入的列字段

insert into student(id, name) values (1,'张三');

还可以不指定列进行插入

insert into student values(2,'李四');

同理,也可以只指定插入一列的值,id那一列没有指定的话会自动补充,默认为null

insert into student(name) values('王五');

 还可以插入多行

insert into student values (4,'赵六'),(5,'钱七');

通过  select * from student; 可以查看字段的信息

💎5. 查询

💎5.1 全列查询和指定列查询

全列查询:

select * from exam;

在实际开发中不要使用 * 来进行查询,因为数据库会很大,影响效率 

指定列查询:

select id,name,math from exam;

查询的结果是一个表达式,例如,在查询命令中添加一个数值,每一列都会有这个数值

select id ,name ,10 from exam;

 之后,可以通过as关键字来为查询结果中的列指定别名,as和引号可以省略,但如果别名中存在空格就不能省略引号了

select id as '编号' ,name as '姓名' from exam;

列与列之间还可以进行运算:

select chinese + math + english as '总分' from exam;

 还可以直接加上指定的数字

select math + 10 from exam;

💎5.2 去重查询

去重查询是通过关键字 distinct 来实现的,在之前的math中,是存在一个重复的98的,我们来试验一下去重查询操作:

select distinct math from exam;

有一点需要注意的是,在查询结果中,每一列都相同才认为是重复数据,刚刚只查询的是math这一列,这次加上id试试:

可以看到,这一次重复的98并没有被去掉,因为id不同

💎5.3 排序查询

 对于多字段,按照字段的前后顺序,如果第一个字段相同,按照第二个字段进行排序

select math from exam order by math desc ;

 

 如果数据为 null 就认为是最小的,升序排最前面,降序排最后面

还可以加上之前的表达式和别名进行排序

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

 前面已经定义了别名,所以后面可以直接用

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

 关于null的特殊情况:

1.不论和任何值相加,结果都是null

2.始终被看作false

3.null 并不等同于 0

 所以说,如果想上面的按照总分排序,如果其中一门为Null,那么他的总分就是null

最后还可以通过多个字段进行排序,排序的优先级就按照书写的顺序进行排列

例如:先按数学降序排列,再按语文升序排列,再按英语顺序排列

select id, name, math, chinese,english
from exam
order by math desc, chinese asc, english asc;

💎5.4 条件查询

 💎5.4.1 比较运算符

 先来看比较运算符

 前面的大于等于这些符号和java中一样,就不多说了,而java中相等是用 "==" 表示的,mysql中是 "=" ,判断不等于的这两个写法都可以

这里有一些小细节需要注意:

-- 查询英语不及格的
select name ,english from exam where english < 60;

 如果表中有null,不参与筛选,所以最终的结果不会包括null

-- 查询英语比语文好的
select * from exam where english > chinese;

 在上面的比较方式中,同一行的数据是可以比较的,但是不能跨行比较

select name, english + math + chinese as total
from exam
where english + math + chinese < 250
order by total desc ;

如果where 后面使用了表达式的话要写完整的表达式,不能写别名 

原因:和SQL的执行顺序有关

1.如果要在数据库中查找某些数据,首先要确定表,先执行from

2.在查询过程中,要根据指定的查询条件把符合条件的数据过滤出来,这时执行的是where字句

3.执行select后面的指定的列,这些列最终要加到结果的展示集里

4.根据order by 子句的列名和排序规则进行最后的排序

根据以上顺序可以推断出,在执行where语句时,还没到select里的total,所以用不了

<=>表示等于,是专门针对null判断的,例如null <=> null 的结果为1

 null的判断是不能用 "=" 判断的

接下来的 between...and...和 in (...) 都是字面意思,分别用来判断是否在一个区间和是否在括号中的列表中

select 1 in (1,2,3);
select 2 between 1 and 4;

而like表示模糊匹配的意思是,按照单个字符和任意个字符进行匹配,来看一个例子:

 当用 '%' 表示的是找出姓张的人,任意字符也就是张后面可以跟任意个字符,'_' 表示单个字符,也就是张后面只能跟一个字符

最后还有一个判断是否为null的命令

💎5.4.2 逻辑运算符

 接下来看逻辑运算符

运算符说明对应Java中的逻辑运算符
AND多个条件必须都为 TRUE(1),结果才是 TRUE(1)&&
OR任意一个条件为 TRUE(1), 结果为 TRUE(1)||
NOT条件为 TRUE(1),结果为 FALSE(0)!
-- 语文大于80或英语大于80
select name, english, chinese
from exam
where english > 80
   or chinese > 80;

  or 的话是任意一个条件为true 就符合,哪怕另一个条件为null不参与比较

-- 语文英语都大于80分
select name, english, chinese
from exam
where english > 80
  and chinese > 80;

下面来分析一下and 和 or 的优先级:

-- 比较and 和 or 的运算优先级
select name, chinese, math, english
from exam
where chinese > 80
   or math > 70 and english > 70;

select name, chinese, math, english
from exam
where (chinese > 80 or math > 70)
  and english > 70

通过对比发现,and 和 or 和 java 中的优先级是一样的,都是and > or ,不过还是建议根据需求加括号 

 💎5.5 分页查询

在实现已经提到过,如果直接通过select * from不加限制来查询全部的数据是不安全的,通过分页查询可以有效的控制一次查询出来的结果集中的记录条数,可以有效的减少数据库服务器的压力,也有利于用户查看,例如我们经常见到的这种就是用到了分页查询

 例如从第0条开始,往后读取2条数据有一下这几种写法:

-- 从第0条开始往后读取2条数据
select *
from exam
order by id
limit 2;

select *
from exam
order by id
limit 0,2;

select * from exam
order by id
limit 2 offset 0;

 可以通过下面这个公式来计算第 s 页所需要的偏移量 n:

n = (s - 1) * 每页显示的记录数

 如果说指定的起始位置超出了整个表的范围就会返回一个空的结果集

💎6. 修改

-- 修改张小明的数学为85分
update exam
set math = 85
where name = '张小明';

 如果再插入一个‘张小明’,并且数学为85,再次执行上面的更新操作,虽然匹配到了两个,但是只会执行一个的修改操作

 如果说把数学修改为86,那么这两个都会被修改,只要找到了符合条件的数据行,就会一次性把这些数据都修改掉,如果不加where条件,所有的内容都会被修改

修改时,set中是可以包含表达式的,下面做一个小练习:

-- 把总成绩倒数前三的三位同学的数学成绩减5
update exam
set math = math - 5
where math is not null
order by (chinese + math + english) asc
limit 3;

 其中 math = math - 5 不能写成 math -= 5;

还有就是,如果修改的时候需要用到乘法的运算,如果匹配到的数据中包含0,那么就不会被修改掉

💎7. 删除

 

-- 删除 第10条数据 
delete from exam where id = 10;

和修改一样,只要匹配到符合条件的数据就会删除,所以如果不加条件,全部数据都会被删除, 一般情况下会在表中加上一个deleteState字段,用来标记是否被删除

-- 删除总分后三名的同学
delete from exam order by math asc limit 3;

在这里插入图片描述

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

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

相关文章

Linux PCI和PCIe总线

1 PCIe中断 - PCI/PCIe设备中断都是level触发&#xff0c;并且请求信号为低电平有效 - PCI总线一般只有INTA#到INTD#的4个中断引脚&#xff0c;所以PCI多功能设备的func一般不会超过4个&#xff0c;但是共享中断除外 2 IOMMU 2.1 ARM SMMU v2 Refer to my blog ARM SMMU v2. 2.…

糟糕界面集锦-控件篇 01

iarchitect 整理&#xff0c;bucher 译 在图形界面中&#xff0c;控件就是程序与用户之间沟通的桥梁&#xff0c;而这座桥梁的好坏则取决于如下两个方面&#xff1a; 控件是否符合需求控件之间是否风格一致 《Visual Basic Programmers Journal 101 Tech Tips for VB Develop…

网络工具(Netcat、iPerf)

目录 1. Netcat2. iPerf 1. Netcat Netcat 是一款简单的 Unix 工具&#xff0c;常用于测试 UDP 和 TCP 连接。 https://www.cnblogs.com/yywf/p/18154209 https://eternallybored.org/misc/netcat/ https://nmap.org/download.html 创建UDP监听端 nc -u -l localPort 创建UDP…

并行程序设计基础——Hello world

目录 一、Fortran 90 MPI实现 二、C MPI实现 三、MPI程序的一些惯例 四、小结 相信许多编程初学者的入门程序都是“Hello World”&#xff0c;我们同样来编写MPI的第一个程序“Hello World”。 一、Fortran 90 MPI实现 我们先给出代码&#xff0c;然后进行代码分析。 pro…

零基础入门汇编语言(第四版王爽)~第1章基础知识

文章目录 前言1.1 机器语言1.2 汇编语言的产生1.3 汇编语言的组成1.4 存储器1.5 指令和数据1.6 存储单元1.7 CPU对存储器的读写1.8 地址总线1.9 数据总线1.10 控制总线1.1~1.10小结检测点1.11.11 内存地址空间概述1.12 主板1.13接口卡1.14 各类存储器芯片1.15 内存地址空间 前言…

9.C基础_指针与数组

数组指针&#xff08;一维数组&#xff09; 数组指针就是" 数组的指针 "&#xff0c;它是一个指向数组首地址的指针变量。 1、数组名的含义 对于一维数组&#xff0c;数组名就是一个指针&#xff0c;指向数组的首地址。 基于如下代码进行分析&#xff1a; int a…

el-form-item,label在上方显示,输入框在下方展示

本来是两排展示去写&#xff0c;设计要求一排展示&#xff0c;label再上方&#xff0c;输入框、勾选框在下方&#xff1b;只能调整样式去修改&#xff1b;参考label-position这个属性 代码如下&#xff1a; <el-form ref"form" :model"formData" clas…

【好书推荐-第二十期】《程序员进阶之路:缓存、网络、内存与案例》:讲解计算机系统中的核心知识分享实际工作中的技术难题及解决方案

&#x1f60e; 作者介绍&#xff1a;我是程序员洲洲&#xff0c;一个热爱写作的非著名程序员。CSDN全栈优质领域创作者、华为云博客社区云享专家、阿里云博客社区专家博主、前后端开发、人工智能研究生。公众号&#xff1a;洲与AI。 &#x1f388; 本文专栏&#xff1a;本文收录…

认识Creator热更新

Creator热更新 1、什么是热更新 当你下载一个游戏&#xff0c;比如王者荣耀&#xff0c;打开时发现提示有新的资源包要让你更新&#xff0c;那就是使用了热更新。 热更新主要是用于原生环境的andriod和ios&#xff0c;对于小游戏不用&#xff0c;小游戏是审核过后&#xff0c…

同声传译用什么软件?亲测好用的同传翻译器分享

巴黎奥运会的到来&#xff0c;让全球的目光再次聚焦于这座浪漫之都。作为国际盛事&#xff0c;语言沟通无疑成为连接各国运动员、观众与媒体的桥梁。 面对多语言环境的挑战&#xff0c;一款高效、准确的同声传译软件显得尤为重要。它不仅能即时传递赛场激情&#xff0c;还能让…

加密软件有什么功能

加密软件是一种用于保护数据安全的工具&#xff0c;它通过对数据进行加密处理&#xff0c;使得未经授权的用户无法访问或篡改这些数据。加密软件使用各种加密算法&#xff0c;如对称加密、非对称加密等&#xff0c;确保数据在传输和存储过程中的安全性。 一、加密软件的功能 数…

【leetcode】相同的树、另一棵树的子树、翻转二叉树(利用深度优先遍历)

Hi~&#xff01;这里是奋斗的明志&#xff0c;很荣幸您能阅读我的文章&#xff0c;诚请评论指点&#xff0c;欢迎欢迎 ~~ &#x1f331;&#x1f331;个人主页&#xff1a;奋斗的明志 &#x1f331;&#x1f331;所属专栏&#xff1a;数据结构、LeetCode专栏 &#x1f4da;本系…

【mars3d】LayerType 的arcgis_feature类型的图层配置聚合属性,达到聚合效果

相关api文档&#xff1a; Global - V3.7.23 - Mars3D API文档 Global - V3.7.23 - Mars3D API文档 ArcGisWfsLayer - V3.7.23 - Mars3D API文档 实现代码&#xff1a; export function onMounted(mapInstance) {map mapInstance // 记录首次创建的map// 添加参考三维模型co…

html+css+js网页设计原神8个页面带js

htmlcssjs网页设计原神8个页面带js 有轮播图&#xff0c;一键置顶等多种效果 网页作品代码简单&#xff0c;可使用任意HTML编辑软件&#xff08;如&#xff1a;Dreamweaver、HBuilder、Vscode 、Sublime 、Webstorm、Text 、Notepad 等任意html编辑软件进行运行及修改编辑等操…

​​​​​​​ 《大学新生编程入门指南:从新手到大神的蜕变之路》

编程小白如何成为大神&#xff1f;大学新生的最佳入门攻略 编程已成为当代大学生的必备技能&#xff0c;但面对众多编程语言和学习资源&#xff0c;新生们常常感到迷茫。如何选择适合自己的编程语言&#xff1f;如何制定有效的学习计划&#xff1f;如何避免常见的学习陷阱&…

PD暗电流的测试小技巧

随着新基建概念的提出&#xff0c;5G和数据中心的建设在2020年进入快车道&#xff0c;海量的光模块需求引领着行业的更新换代&#xff0c;对光器件提出了更高的要求。在光通信测试领域&#xff0c;也将迎来很多挑战。 共同面对未来挑战&#xff0c;泰克将推出一系列关于光通信…

计算机网络复习总结

第一章 计算机网络体系结构 1、计算机网络的概念组成和功能 &#xff08;1&#xff09;什么是计算机网络&#xff1f; 计算机网络是将一个分散的、具有独立功能的计算机系统&#xff0c;通过通信设备与线路连接起来&#xff0c;由功能完善的软件实现资源共享和信息传递的系统。…

网页离线缓存 Service Worke

随着 Web 技术的飞速发展&#xff0c;用户对网站的要求越来越高&#xff0c;为了达到用户期望&#xff0c;开发者使出了浑身解数来做性能优化&#xff0c;包括 CDN 内容分发、图片合并、资源文件压缩、异步加载等等手段&#xff0c;这些手段绝大部分都是在干一件事情&#xff0…

真人拍摄,还是技术生成?会走路的数字人物到底是谁?

近日&#xff0c;一段数字人视频引发了全网热议&#xff0c;画面中&#xff0c;一个外观与真人无异的女子在说话的同时缓缓走动。这也让不少网友质疑&#xff0c;视频中所出现的会走路的数字人物并非是由技术生成&#xff0c;而是真人拍摄。“数字人不都是固定不动的吗&#xf…

【Linux学习】文件系统 - 揭秘磁盘存储结构与存储原理

&#x1f351;个人主页&#xff1a;Jupiter. &#x1f680; 所属专栏&#xff1a;Linux从入门到进阶 欢迎大家点赞收藏评论&#x1f60a; 目录 &#x1f351;磁盘文件管理&#x1f680;磁盘的机械构成&#x1f30c;磁盘的物理存储&#x1f351;存储原理&#x1f4d5;磁盘的逻辑…