数据库的常用操作

news2025/7/6 22:17:52

数据库的分类

数据库大体可以分为 关系型数据库 和 非关系型数据库

关系型数据库:是指采用了关系模型来组织数据的数据库,关系模型指的就是二维表格模型,关系型数据库都基于标准的SQL,只是内部一些实现有区别

常见关系型数据库有:Oracle、 MySQL、SQL Server、SQLite

非关系型数据库:不规定基于SQL实现,现在更多是指NoSQL数据库

常见非关系型数据库有:redis、mongodb

关系型数据库的概念

数据库有客户端和服务端两端,客户端和服务端是通过网络进行数据交互的(不一定要用外部网络)

我们自己电脑的客户端和服务端都是在主机上的,在硬盘上存储着数据

我们数据库中所有的数据都是存储在服务端上的

使用数据库的数据时,数据库一般都是把数据放在外存(硬盘)上,但也有少数数据库把数据放在内存中(例如redis)

数据库这个词既可以指各种的数据库软件(MySQL、Oracle),也可以指逻辑上的数据集合(也就是一个数据库软件中的每一个子数据库)

关系型数据库服务器中包含了许多的数据库(此处数据库表示逻辑上的数据集合),每一个数据库中包含了很多的数据表,数据表中包含了很多的行(记录),行(记录)中包含了很多的列(字段)

非关系型数据库一般是按照"文档"或"键值对"方式存储的

MySQL的安装

1、安装MySQL安装包

2、配置环境变量Path:在里面添加MySQL文件夹下bin目录的路径

登录MySQL

命令:mysql -u root -p密码

MySQL的客户端和服务端都在主机上

SQL命令行输入技巧

1、使用上下方向键,可以快速找到上一条/下一条SQL语句

2、如果某个SQL语句输入了一半,不想执行了,可以按ctrl+c来中止

常用数据类型

数值类型

数据类型大小说明对应的java类型
bit[(M)]M指定位数,默认为1二进制数,M范围从1到64,存储数值范围从0到2^M-1常用Boolean对应BIT,此时默认是1位,即只能存0和1
tinyint1字节Byte
smallint2字节Short
int4字节Integer
bigint8字节Long
float(M,D)4字节单精度,M指定几位数字(包括小数),D指定小数位数,会发生精度丢失Float
double(M,D)8字节双精度,M指定几位数字(包括小数),D指定小数位数,会发生精度丢失Double
decimal(M,D)M/D的最大值+2双精度,M指定几位数字(包括小数),D表示小数点位数,精确数值BigDecimal
numeric(M,D)M/D的最大值+2和decimal一样BigDecimal

上述的数值类型可以指定为无符号(unsigned关键字),表示不取负数,能表示更大范围的数字,但是unsigned比较坑,官方都快废弃了,不推荐使用

1、有符号范围:-2^(类型字节数*8-1)到2^(类型字节数*8-1)-1,如int是4字节,就是-2^31到2^31-1

2、无符号范围:0到2^(类型字节数*8)-1,如int就是2^32-1

字符串类型(SQL中字符串使用单引号或双引号均可)

数据类型大小说明对应的java类型
varchar(size)0-65535字节可变长度字符串,size表示字符串最多能包含多少个字符(不是字节)String
text0-65535字节长文本数据String
mediumtext0-1677 7215字节中等长度文本数据,它比长文本数据还长String
blob0-65535字节二进制形式的长文本数据byte[]

文本文件和二进制文件区别:文件中存储的是二进制形式的数据的就是二进制文件,文件中存储的是文字形式(我们能看懂的)的数据的就是文本文件,简而言之就是文件中存储的是我们能看的懂的真实数据就是文本文件,存储的是我们看不懂的二进制/加密数据的就是二进制文件

日期类型

数据类型大小说明对应的java类型
datetime8字节范围从1000到9999年,不会进行时区的检索及转换java.util.Date、java.sql.Timestamp
timestamp4字节范围从1970到2038年,自动检索当前时区并进行转换java.util.Date、java.sql.Timestamp

一般常用的类型:int、bigint、double、decimal、varchar、datetime

now函数:获取当前时间可以使用 now() 这个函数进行获取

标准时间格式:'YYYY-MM-DD HH:mm:ss' //例如 '2022-08-02 00:00:00',可以使用<>=等运算符对其进行比较,它是一个时间类型,只不过是按照字符串形式插入的

数据库的操作(SQL语言)

SQL语言的每个单词之间至少有一个空格,末尾要带有英文;分号,SQL不区分大小写,数据库的操作是相对低效的,SQL语言是数据库的客户端和服务端交互的语言

SQL语言不能使用关键字(例如create)来作为数据库名/表名/字段名,如果非要用关键字命名,可以使用`关键字`这种语法来使用(`就是反引号,是tab上面那个键),数据库中不可以定义名字相同的表,命名可以使用驼峰命名和下划线命名的方式

SQL删除数据都是逻辑删除,也就是要删除数据的时候,并不是把这些盘块上的数据给涂抹掉~~而是简单的标记成"无效"~~,标记成"无效之后",这个盘块就会被系统后续分配给其他程序来保存数据~~但是在盘块被分出去之前,上面原来的数据其实还是存在的~~还是有机会找回的(不一定能找回全部)~~

数据库默认的字符编码集是拉丁文的(latin1),不支持汉字,如果想要输入汉字需要更改数据库的字符编码集为utf-8,utf-8是变长编码,能表示全世界所有语言的文字,它是当下最主流的字符编码方式

SQL语言中,因为没有字符类型,因此使用单引号' '和双引号“ ”都可以用来表示字符串

以下所有的[]都是可选的意思

数据库(逻辑上的数据集合)的操作

显示当前所有的数据库:show databases;

创建数据库:create database 数据库名 [character set 字符编码集名];

选中数据库/使用数据库:use 数据库名;

删除数据库:drop database 数据库名;

数据表的操作(表操作之前要选中/使用指定的数据库)

创建表:create table 表名 (列名 类型,列名 类型.....); //可以在列名与类型的后面加上 comment ‘内容’ 表示注释,也可以用 -- ‘内容’ 表示注释

查看当前数据库有哪些表:show tables;

查看表结构:desc 表名;

删除表:drop table 表名;

数据的增删改查

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

插入数据:insert into 表名 values (值,值.....); //这里值的类型和个数要与表的列的类型和个数匹配

指定列插入数据:insert into 表名 (列名,列名...) values (值,值.....);

一条语句插入多个数据:insert into 表名 values (值,值.....) , (值,值.....); //一条语句插入三行记录,效率比一行一行插入高(因为插入时有额外的工作)

将查询结果插入到表中:insert into 表名 [(列名,列名...)] 查询语句; //要求查询结果的列和插入表的列相匹配

查(这些查询方式都是可以结合在一起使用的)

这些查询方式都可以结合在一起使用,达到复杂SQL语句的效果

全列查询(查询出当前表所有的行和列):select * from 表名; //*表示所有的列,此语句在数据量非常大的情况下,是一个危险操作

指定列查询:select 列名,列名... from 表名;

查询带表达式(列和列运算):select 列名+10,列名+列名 from 表名; //所有的查询都是临时表,它只会影响到数据展示,对于数据库服务器中的原有数据没有任何影响

列名起别名:setect 列名 as 别名 , 表达式 as 别名 from 表名;

查询去重:select distinct 列名,列名... from 表名; //如果去重的列只有一列则是把这列数据去重,如果去重的列是多列则是多个列对照去重(自己的列中不去重)

查询结果排序:select 列名,列名 from 表名 order by 列名1[desc],列名2 [desc]; //按照order by后面指定列来排序,默认是升序排序,desc则是降序排序,先按列名1排序,列名1相同再按列名2排序

条件查询:select 列名 from 表名 where 条件语句; //条件查询语句先执行条件语句where,再执行查询语句,因此where不能使用查询语句中的别名,条件查询是需要遍历表的,在表很大的时候,条件查询还是比较低效的

比较运算符说明(运算符优先级问题建议多加括号)
>, >=, <, <=大于,大于等于,小于,小于等于
=等于,NULL 不安全,例如 NULL = NULL 的结果是 NULL
<=>等于,NULL 安全,例如 NULL <=> NULL 的结果是 TRUE
!=,<>不等于
between a0 and a1范围匹配[a0, a1]闭区间,如果 a0 <= value <= a1,返回 TRUE(1)
in(值,值.....)如果当前值是()括号中的任意一个,返回 TRUE(1)
is null是 NULL 返回 TRUE(1)
is not null不是 NULL 返回 TRUE(1)
like模糊匹配,即只要是符合通配符的匹配规则的就可以,% 表示任意多个(包括 0 个)任意字符;_ 表示任意一个字符,它比较低效
逻辑运算符说明(运算符优先级问题建议多加括号)
and多个条件必须都为 TRUE(1),结果才是 TRUE(1),and优先级比or高
or任意一个条件为 TRUE(1), 结果为 TRUE(1)
not条件为 TRUE(1),结果为 FALSE(0)

分页查询:

select 列名 from 表名 limit N; //查询前N条记录

select 列名 from 表名 limit N offset M; //从第M条记录开始,查询N条记录(M从0开始算)

select 列名 from 表名 limit M,N; //从第M条记录开始,查询N条记录(M从0开始算),和上面一样

聚合查询(行和行运算):

SQL中提供了一些函数,通过这些函数就可以进行行和行的运算

聚合查询写法:select 函数(参数) from 表名; //聚合函数可以用在任意位置(只要语法合理即可)

函数说明
count返回查询到的数据的数量
sum返回查询到的数据的总和,不是数字没有意义
avg返回查询到的数据的平均值,不是数字没有意义
max返回查询到的数据的最大值,不是数字没有意义
min返回查询到的数据的最小值,不是数字没有意义

分组查询:

select中使用group by子句可以对指定列进行分组查询,分组就是值相同的列(字段)为一组,分组需要满足:使用group by进行分组查询时,select指定的字段(列)必须是“分组依据字段”,其他字段若想出现在select中则必须包含在聚合函数中,分组后进行运算是以每组的数据进行运算的

如果直接使用select * from 表名 group by 列名; 的话,显示的是分组后每组第一条数据,这是不合理的

分组查询写法:select 指定列名,函数(参数) from 表名 group by 指定列名;

分组前筛选写法:select 指定列名,函数(参数) from 表名 [where]... group by 指定列名; //先筛选,后分组

分组后筛选写法:select 指定列名,函数(参数) from 表名 group by 指定列名 having 条件语句;//先分组,后筛选

联合查询:

实际开发中往往数据来自不同的表,所以需要多表联合查询,多表查询是对多张表的数据取笛卡尔积,笛卡尔积就是两张表的记录(行)排列组合的结果

笛卡尔积的列数(字段数),就是两个表的列数之和

笛卡尔积的行数(记录数),就是两个表的行数之积

笛卡尔积就是一个简单粗暴的排列组合,把所有可能的情况列出来了,因此其中的情况必然有些是合理的,有些是不合理的,因此就需要把合理的留下,不合理的筛选掉,用来筛选笛卡尔积有效数据的条件,就称为连接条件

联合查询 = 笛卡尔积 + 连接条件(where) + 其他条件(根据其他需求)

求笛卡尔积:select * from 表名1,表名2; 或者 select * from 表名1 join 表名2;

内连接查询方式1:select * from 表名1,表名2 where 表名1.列名 = 表名2.列名;

内连接查询方式2:select * from 表名1 join 表名2 on 表名1.列名 = 表名2.列名; //显示两表都对应的记录

左外连接查询:select * from 表名1 left join 表名2 on 表名1.列名 = 表名2.列名; //左外连接就是以左表为主,把左侧表的数据都显示完整

右外连接查询:select * from 表名1 right join 表名2 on 表名1.列名 = 表名2.列名; //右外连接就是以右表为主,把右侧表的数据都显示完整

自连接查询:select * from 表名1 join 表名1 on 连接条件; 或者 select * from 表名1,表名1; //自连接用于记录与记录之间关系比较的查询

join可以看作是,的意思,on可以看作是where的意思~~

如果两张表的连接条件的列名相同的话,使用 表名.列名 的形式,如果不同可以直接写 列名 或者 表名.列名 均可

子查询:

子查询是指select语句中嵌套了select语句,也叫嵌套查询,子查询的子语句只能返回一条/多条单列的记录,子查询本质上就是把多个查询语句组合成了一个查询语句

子查询写法:select * from 表名 where 列名 = (select 列名 from 表名 where 列名 = 值); //子查询的子语句只能返回一条单列的记录(行)

in子查询写法:select * from 表名 where 列名 in (select 列名 from 表名 where 列名 = 值); //子查询的子语句可以返回多条单列的记录(行)

union子查询写法:select * from 表名1 union [all] select * from 表名2 //如果表1和表2列(字段)完全相同,可以将两张表查询的记录合并到一起,union会去掉重复数据,union all不会去掉重复数据

修改数据:update 表名 set 列名 = 值,列名 = 值... [where][order by][limit]...; //它会改变真实数据,这也是一个危险操作

删除数据:delete from 表名 [where][order by][limit]...; //它会删除数据,这也是一个危险操作

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

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

相关文章

奇舞周刊第 473 期: Rollup 与 Webpack 的 Tree-shaking

记得点击文章末尾的“ 阅读原文 ”查看哟~下面先一起看下本期周刊 摘要 吧~奇舞推荐■ ■ ■Rollup 与 Webpack 的 Tree-shakingRollup 和 Webpack 是目前项目中使用较为广泛的两种打包工具&#xff0c;去年发布的 Vite 中打包所依赖的也是 Rollup&#xff1b;在对界面加载效率…

Java项目:JSP手机商城管理系统包含前台

作者主页&#xff1a;源码空间站2022 简介&#xff1a;Java领域优质创作者、Java项目、学习资料、技术互助 文末获取源码 项目介绍 本项目分为前后台&#xff0c;分为管理员与普通用户两种角色&#xff0c;管理员登录后台&#xff0c;普通用户登录前台&#xff1b; 管理员角色…

编译原理之词法分析器随笔和简单实现

借鉴: 编译原理之美. 极客时间上 什么是词法分析 编译原理&#xff1a;词法分析简单的来说就是在字符串中提取一系列的word单词. 编译器的眼里, 我们的一切输入都是什么? 都是一个一个的字符串. 所以编译器干的就是字符串解析工作. 词法分析&#xff1a;自然就是解析出来…

Vue中el和data的写法与 MVVM模型

目录 el和data的两种写法 el的两种写法 data的两种写法 data与el的写法小结 MVVM模型 MVVM模型小结 el和data的两种写法 el的两种写法 <body> <div id"root"> hello,{{name}}</div><script type"text/javascript">const vm ne…

iwebsec靶场 SQL注入漏洞通关笔记3- bool注入(布尔型盲注)

系列文章目录 iwebsec靶场 SQL注入漏洞通关笔记1- 数字型注入_mooyuan的博客-CSDN博客 iwebsec靶场 SQL注入漏洞通关笔记2- 字符型注入&#xff08;宽字节注入&#xff09;_mooyuan的博客-CSDN博客 目录 文章目录 前言 一、源码分析 二、sqlmap渗透 1.注入命令 2.完整交互过程…

小技巧1:如何给pip install进行换源

大家好&#xff0c;我是Kamen Black君&#xff0c;今天给大家介绍一个小技巧&#xff1a;如何给pip安装进行换源。 print("祝大家每天快乐&#xff0c;love and peace&#xff01;") 曾几何时&#xff0c;当我准备好了一段很有趣的代码准备进行运行时&#xff0c;发…

亚马逊云科技re:Invent:这些成功的数据驱动新企业背后的秘诀是什么?

北京时间11月29号&#xff0c;亚马逊云科技年度峰会re:Invent 2022将在拉斯维加斯开幕。这场年度最重磅的云计算技术大会不仅是科技盛宴&#xff0c;也是亚马逊云科技与诸多客户交流互鉴的绝佳平台&#xff0c;今天带大家认识一下几位资深云计算用户&#xff0c;以及他们和re:I…

ENVI5.6超详细教程大全-从安装包到安装流程详解

一、获取资源&#xff1a; https://www.xsoftnet.com/share/a000HzsWPCJXi.html二、安装教程&#xff1a;安装前请关闭杀毒软件&#xff0c;系统防火墙&#xff0c;断开网络连接 1.解压ENVI5.6安装包&#xff1a;ENVI5.6.zip 2.找到envi56-win.exe文件&#xff0c;双击进行安装…

Centos7 安装部署Kubernetes(k8s)集群实现过程

一.系统环境 服务器版本docker软件版本CPU架构CentOS Linux release 7.4.1708 (Core)Docker version 20.10.12x86_64二.前言 下图描述了软件部署方式的变迁&#xff1a;传统部署时代&#xff0c;虚拟化部署时代&#xff0c;容器部署时代。 传统部署时代&#xff1a; 早期&am…

制作一个简单HTML游戏网页(HTML+CSS)仿龙之谷网络游戏官网

&#x1f389;精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业…

vite+ts-3-后端准备(慢慢更新)

random recording 随心记录 What seems to us as bitter trials are often blessings in disguise. 看起来对我们痛苦的试炼&#xff0c;常常是伪装起来的好运。 应用tskoamysql构建高可维护性和扩展性架构 数据库基础 定义和特点 数据库就是按照特定格式存储数据的文件集合&…

二本Java渣渣9面字节遭虐,苦修数月深造这份宝典,终进阿里

见过真正头铁的程序员吗&#xff1f;如题所示&#xff0c;真人真事&#xff0c;这位二本的兄弟在这短短几个月内海投了638份简历&#xff0c;全挑的大厂岗位投的&#xff0c;仅字节跳动就前前后后面试了九次&#xff0c;他说&#xff1a;没有撤退可言。 九次面试经历也是奇了—…

西门子精彩触摸屏SMART V3组态用户管理的具体方法和步骤

西门子精彩触摸屏SMART V3组态用户管理的具体方法和步骤 如下图所示,新建一个项目,在连接中添加连接,触摸屏的IP地址要和 PLC的IP地址保持在同一网段, 如下图所示,在变量中添加一个变量, 如下图所示,在画面1中添加一个IO域,并连接上图中的变量, 如下图所示,设置…

python数据分析绘图

ROC-AUC曲线&#xff08;分类模型&#xff09; 混淆矩阵 混淆矩阵中所包含的信息 True negative(TN)&#xff0c;称为真阴率&#xff0c;表明实际是负样本预测成负样本的样本数&#xff08;预测是负样本&#xff0c;预测对了&#xff09;False positive(FP)&#xff0c;称为假…

HTML5期末大作业:游戏网站设计与实现——基于bootstrap响应式游戏资讯网站制作HTML+CSS+JavaScript

&#x1f389;精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业…

力扣每日一题:882. 细分图中的可到达节点【最短路径dijkstra】

给你一个无向图&#xff08;原始图&#xff09;&#xff0c;图中有 n 个节点&#xff0c;编号从 0 到 n - 1 。你决定将图中的每条边 细分 为一条节点链&#xff0c;每条边之间的新节点数各不相同。 图用由边组成的二维数组 edges 表示&#xff0c;其中 edges[i] [ui, vi, cn…

搭建集群常用脚本

rsync同步工具&#xff0c;编写xsync脚本 yum install -y rsynchostname处理&#xff1a; vim /etc/hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomai…

花房集团通过上市聆讯:5个月营收20亿 周鸿祎是大股东

雷递网 雷建平 11月25日花椒母公司花房集团今日正式通过聆讯&#xff0c;准备在港交所上市。这之前&#xff0c;360集团孵化的360数科、鲁大师也分别在美股和港股上市。360数科还将于下周在香港上市。这意味着&#xff0c;360董事长周鸿祎将在香港收获两个IPO。5个月营收20亿 经…

音视频开发之音频基础知识!

前言&#xff1a; 在音视频开发中&#xff0c;音频也是一个重要功能之一。在音频开发中有两个重要的概念&#xff0c;一个是PCM数据格式&#xff0c;另外一个是AAC数据格式。下面我们会重点介绍&#xff01;一、PCM重要音频参数&#xff1a; PCM数据也被称之为脉冲编码调制数据…

什么是coms coms设置图解

对与经常玩电脑的朋友来说&#xff0c;对与BIOS、COMS可能有点陌生&#xff0c;对于经常修电脑的朋友来说COMS可能会经常接触&#xff0c;今天我们来简单的说下coms设置图解&#xff0c;什么是COMS呢?coms主要是用于存储BIOS设置程序的设置参数和数据&#xff0c;而BIOS程序是…