Mysql:数据库
Mysql
- 一、数据库概念?
- 二、MySQL架构
- 三、SQL语句分类
- 四、数据库操作
- 4.1 数据库创建
- 4.2 数据库字符集和校验规则
- 4.3 数据库修改
- 4.4 数据库删除
- 4.4 数据库备份和恢复
- 其他
- 五、表操作
- 5.1 创建表
- 5.2 修改表
- 5.3 删除表
- 六、表的增删改查
- 6.1 Create(创建):数据新增
- 1)普通插入
- 2)插入否则更新
- 3) 替换方式二:replace
- 6.2 Retrieve(读取)
- 1)WHERE条件
- 2) 筛选分页结果
- 6.3 Update(更新)
- 6.4 Delete(删除)
- 6.5 插入查询结果
- 七、mysql聚合函数
- 八、查询分类
- 1)多表查询
- 2)自连接
- 3) 子查询
- 4)合并查询
一、数据库概念?
mysql是一套基于CS模式,给我们一个提供数据存取服务的网络程序。日常口语中的数据库其实是指在磁盘或内存中存储的特定组织结构的数据。
存储数据最常见的方式就是直接用文件存储。但文件存储存在诸多缺陷:
- 安全性问题!普通文件没有权限约制,数据可以随意被访问,存在数据安全问题。
- 文件不利于海量数据的查询和管理。比如需要在100万数据中查找主机ip为198.1.1.0的ip地址的个数。对于文件而言需要程序员将文件打开,然后按行遍历、判断、统计等工作。非常麻烦,效率低下。 但对于数据库而言,数据库本质其实就是一套对数据内容存取的一套解决方案。程序员将相关字段和要求传给数据库即可,数据库会将结果直接反馈呈现给程序员!
- 文件在程序中不方便控制。文件系统缺乏事务管理、并发控制等机制,难以保证数据的一致性和完整性。MySQL架构
宏观上数据库是指:数据库客户端、服务端以及数据库文件。而口语中思的数据库指数据在磁盘上存取的一套解决方案(create databases创建出来的数据库)
在Linux中,数据库本质就是/var/lib/mysql目录下的一个目录文件,而建表本质就是该该目录下的一些普通文件。
二、MySQL架构
第一层主要解决连接和安全问题。第二层类似于编译器主要进行词法分析、语法分析、以及mysql语句优化。第三次为各种存储引擎,是真正和OS系统进行交换,实现功能的。
存储引擎是:数据库管理系统如何存储数据、如何为存储的数据建立索引和如何更新、查询数据等技术的实现方法(show engines;查看)

三、SQL语句分类
sql语言分为以下3类:
- 数据定义语言(DDL),用于维护存储数据的结构。代表指令:
create、drop。 - 数据操纵语言(DML),用来对数据进行操作。代表指令:
insert、delete、update。 - 数据控制语言(DCL),主要负责权限管理和事务。代表指令:
grant、revoke、commit。
四、数据库操作
4.1 数据库创建
指令:create database [if not exists] db_name [charset = xxx] [collate = xxx];
- charset (或character set):数据库字符集,数据库存储数据的编码格式!
- collate :数据库校验集,数据库将数据读取出来时所采用的编码格式!
4.2 数据库字符集和校验规则
| 作用 | 指令 |
|---|---|
| 查看系统默认字符集 | show variables like 'character_set_database'; |
| 查看系统默校验规则 | show variables like 'collation_database'; |
| 查看数据库支持的字符集 | show charset; |
| 查看数据库支持的校验规则 | show collation; |
4.3 数据库修改
指令:alter database db_name [charset = xxx] [collate = xxx];
- 数据库的修改主要是对数据库的字符集和校验规则进行修改,但需要保证修改后的字符集和校验规则匹配,否则数据的存储或读取可能出现乱码。
4.4 数据库删除
指令:drop database db_name [if not exists];
- 数据库的创建本质就是在
/var/lib/mysql下创建的目录文件,而数据库删除的本质就是该目录文件被删除。 - 数据库删除后,对应的数据库文件夹被删除,级联删除,里面的数据表全部被删。
4.4 数据库备份和恢复
| 作用 | 指令 | 样例 |
|---|---|---|
| 数据库备份 | mysqldump -P3306 -u root -p -B 数据库名 > 文件路径 | mysqldump -P3306 -u root -p123456 -B mytest > mytest.sql |
| 数据库恢复 | source 文件路径; | source D:/mysql-5.7.22/mytest.sql; |
| 备份表 | mysqldump -u root -p 数据库名 表名1 表名2 > mytest.sql; | |
| 备份多个数据库 | mysqldump -u root -p -B 数据库名1 数据库名2 ... > 数据库存放路径 |
- 如果备份一个数据库时,没有带上-B参数, 在恢复数据库时,需要先创建空数据库,然后使用数据
库,再使用source来还原。
其他
- 查看连接情况指令:
show processlist;
五、表操作
5.1 创建表
CREATE TABLE table_name (
field1 datatype,
field2 datatype,
field3 datatype
) character set 字符集 collate 校验规则 engine 存储引擎;
- field指明表结构的列名,datatype指明列名类型。
- 对于字符集、校验规则、存储引擎如果没有显示指定,默认采用表所在的数据库相关属性。
5.2 修改表
修改表的结构有,比如字段名字,字段大小,字段类型,表的字符集类型,表的存储引擎等等。我以及添加字段,删除字段等等。
| 作用 | 指令 | 样例 |
|---|---|---|
| 添加字段 | alter table tablename add [field datatype] [,field datatype]....; | 在原有表结构基础上,即birthday列之后添加assets 列:alter table users add assets varchar(100) comment '图片路径' after birthday; |
| 删除字段 | alter table tablename drop (column); | 删除name列: alter table users dropname ; |
| 修改字段类型 | alter table tablename modify [field datatype] [,field datatype]....; | 将name属性修改为60: alter table users modify name varchar(60); |
| 修改表名 | alter table 旧命 rename to 新名 | |
| 对某列进行重命名 | alter table tablename xxx name xxx | alter table employee change name xingming varchar(60); --新字段需要完整定义 |
5.3 删除表
DROP [TEMPORARY] TABLE [IF EXISTS] tbl_name [, tbl_name] ...
六、表的增删改查
6.1 Create(创建):数据新增
1)普通插入
insert into table (需要插入数据的类名) values (插入数据);
多行数据 + 指定列插入:
INSERT INTO students (id, sn, name) VALUES
(102, 20001, '曹孟德'),
(103, 20002, '孙仲谋');
2)插入否则更新
由于 主键 或者 唯一键 对应的值已经存在而导致插入失败。所以可以选择性的进行同步更新操作语法:
指令:INSERT ... ON DUPLICATE KEY UPDATE column = value [, column = value] ...
实例:
// 向students表中插入数据,不存在直接插入。如果发送冲突,则执行UPDATE 之后的语句进行数据更新
INSERT INTO students (id, sn, name) VALUES (100, 10010, '唐大师')
ON DUPLICATE KEY UPDATE sn = 10010, name = '唐大师';Query OK, 2 rows affected (0.47 sec)
-- 0 row affected: 表中有冲突数据,但冲突数据的值和 update 的值相等
-- 1 row affected: 表中没有冲突数据,数据被插入
-- 2 row affected: 表中有冲突数据,并且数据已经被更新
3) 替换方式二:replace
指令:REPLACE INTO students ...
实例:
-- 主键 或者 唯一键 没有冲突,则直接插入;
-- 主键 或者 唯一键 如果冲突,则删除后再插入REPLACE INTO students (sn, name) VALUES (20001, '曹阿瞒');
Query OK, 2 rows affected (0.00 sec)-- 1 row affected: 表中没有冲突数据,数据被插入
-- 2 row affected: 表中有冲突数据,删除后重新插入
6.2 Retrieve(读取)
SELECT
[DISTINCT] {* | {column [, column] ...}
[FROM table_name]
[WHERE ...]
[ORDER BY column [ASC | DESC], ...]
LIMIT ...
DISTINCT关键字用于对结果去重。WHERE后接筛选条件ORDER BY:按照指定列进行排序,ASC升序,DESC降序。LIMIT:输出结果显示限制
1)WHERE条件


2) 筛选分页结果
-- 起始下标为 0-- 从 s 开始,筛选 n 条结果
SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT s, n;-- 从 0 开始,筛选 n 条结果
SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT n;-- 从 s 开始,筛选 n 条结果,比第二种用法更明确,建议使用
SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT n OFFSET s;
6.3 Update(更新)
UPDATE table_name SET column = expr [, column = expr ...]
[WHERE ...] [ORDER BY ...] [LIMIT ...]
- 将查询到的结果进行更新。如果后面没有筛选条件,则表面对整表进行操作。
6.4 Delete(删除)
删除查到的数据: DELETE FROM table_name [WHERE ...] [ORDER BY ...] [LIMIT ...]
截断表:TRUNCATE [TABLE] table_name;
- delete只是对数据进行删除,表结构依然存在。
truncate截断不走事物,不会对日志进行操作(记录删除操作),所以速度更快。但由于不经过事物,所以无法归滚。truncate会重置AUTO_INCREMENT项,而delete不会!
6.5 插入查询结果
INSERT INTO table_name [(column [, column ...])] SELECT ..
实例:对表进行重命名
// 创建表和新增数据
CREATE TABLE duplicate_table (id int, name varchar(20));
INSERT INTO duplicate_table VALUES (100, 'aaa'), (100, 'aaa');//创建一张空表 no_duplicate_table,结构和 duplicate_table 一样
CREATE TABLE no_duplicate_table LIKE duplicate_table;//将 duplicate_table 的去重数据插入到 no_duplicate_table
INSERT INTO no_duplicate_table SELECT DISTINCT * FROM duplicate_table// 通过重命名表,实现原子的去重操作
RENAME TABLE duplicate_table TO old_duplicate_table, no_duplicate_table TO duplicate_table;
- 最后通过rename进行,目的在于该操作是原子的,等一切都做好后,进行统一放入、更新、生效。
七、mysql聚合函数
聚合函数是先将数据查询到后,在进行聚合。聚合时必须保证数据是可以被聚合的。

执行顺序样例:

八、查询分类
1)多表查询
多表查询是指对多张表进行笛卡儿积,然后通过内链接on或where筛选出我们需要的表。
在mysql中,不仅仅物理磁盘上存在的表结构叫表,中间筛选出来的,以及最终结果也是逻辑上的表。也可以直接将其重命名后直接当作单独的表使用,即Mysql下一切皆表!

2)自连接
自连接是指在同一张表连接查询!
自连接的典型使用场景就是:一张表中保存公司所有人员的id以及上级id。现在需要查找某个员工的上级领导名字,那我们会使用自连接。
3) 子查询
子查询是指嵌入在其他sql语句中的select语句,也叫嵌套查询。子查询可以跟在where和from后面。
4)合并查询
union:该操作符用于取得两个结果集的并集。当使用该操作符时,会自动去掉结果集中的重复行。但需要保证两个结果的字段必须一样。
实例:将工资大于2500或职位是MANAGER的人找出来

union all: 该操作符用于取得两个结果集的并集。当使用该操作符时,不会去掉结果集中的重复行。

相关文章:
Mysql:数据库
Mysql 一、数据库概念?二、MySQL架构三、SQL语句分类四、数据库操作4.1 数据库创建4.2 数据库字符集和校验规则4.3 数据库修改4.4 数据库删除4.4 数据库备份和恢复其他 五、表操作5.1 创建表5.2 修改表5.3 删除表 六、表的增删改查6.1 Create(创建):数据新增1&#…...
深度学习系列--01.入门
一.深度学习概念 深度学习(Deep Learning)是机器学习的分支,是指使用多层的神经网络进行机器学习的一种手法抖音百科。它学习样本数据的内在规律和表示层次,最终目标是让机器能够像人一样具有分析学习能力,能够识别文字…...
【Elasticsearch】`auto_date_histogram`聚合功能详解
1.功能概述 auto_date_histogram是 Elasticsearch 提供的一种时间分桶聚合功能,它可以根据数据分布自动调整分桶的间隔,以生成指定数量的分桶。与传统的date_histogram不同,auto_date_histogram不需要用户手动指定时间间隔,而是根…...
php7.3安装php7.3-gmp扩展踩坑总结
环境: 容器里面为php7.3.3版本 服务器也为php7.3.3-14版本,但是因为业务量太大需要在服务器里面跑脚本 容器里面为 alpine 系统,安装各种扩展 服务器里面开发服为 ubuntu 16.04.7 LTS (Xenial Xerus) 系统 服务器线上为 ubuntu 20.04.6 LTS (…...
7. k8s二进制集群之Kube ApiServer部署
创建kube工作目录(仅在主节点上创建即可)同样在我们的部署主机上创建apiserver证书请求文件根据证书文件生成apiserver证书仅接着创建TLS所需要的TOKEN创建apiserver服务的配置文件(仅在主节点上创建即可)创建apiserver服务管理配置文件对所有master节点分发证书 & TOK…...
QT笔记——多语言翻译
文章目录 1、概要2、多语言切换2.1、结果展示2.2、创建项目2.2、绘制UI2.2、生成“.st”文件2.4、生成“.qm”文件2.5、工程demo 1、概要 借助QT自带的翻译功能,实现实际应用用进行 “多语言切换” 2、多语言切换 2.1、结果展示 多语言切换 2.2、创建项目 1、文件…...
【2025】camunda API接口介绍以及REST接口使用(3)
前言 在前面的两篇文章我们介绍了Camunda的web端和camunda-modeler的使用。这篇文章主要介绍camunda结合springboot进行使用,以及相关api介绍。 该专栏主要为介绍camunda的学习和使用 🍅【2024】Camunda常用功能基本详细介绍和使用-下(1&…...
js面试some和every的区别
1.基础使用 some和every 都是数组的一个方法let num [1,2,3,4,5,6] let flag1 num.some((item,index,array)> item > 2)let flag2 num.every((item,index, array)> item > 2)1.some 遍历判断中是符合条件的值 一旦找到则不会继续迭代下去 直接返回 2.every 遍历…...
Vue 中如何嵌入可浮动的第三方网页窗口(附Demo)
目录 前言1. 思路Demo2. 实战Demo 前言 🤟 找工作,来万码优才:👉 #小程序://万码优才/r6rqmzDaXpYkJZF 1. 思路Demo 以下Demo提供思路参考,需要结合实际自身应用代码 下述URL的链接使用百度替代! 方式 1…...
【大数据技术】词频统计样例(hadoop+mapreduce+yarn)
词频统计(hadoop+mapreduce+yarn) 搭建完全分布式高可用大数据集群(VMware+CentOS+FinalShell) 搭建完全分布式高可用大数据集群(Hadoop+MapReduce+Yarn) 在阅读本文前,请确保已经阅读过以上两篇文章,成功搭建了Hadoop+MapReduce+Yarn的大数据集群环境。 写在前面 Wo…...
java进阶知识点
java回收机制 浅谈java中的反射 依赖注入的简单理解 通过接口的引用和构造方法的表达,将一些事情整好了反过来传给需要用到的地方~ 这样做得好处:做到了单一职责,并且提高了复用性,解耦了之后,任你如何实现…...
深度学习系列--02.损失函数
一.定义 损失函数(Loss Function)是机器学习和深度学习中用于衡量模型预测结果与真实标签之间差异的函数,它在模型训练和评估过程中起着至关重要的作用 二.作用 1.指导模型训练 提供优化方向:在训练模型时,我们的目…...
构建一个数据分析Agent:提升分析效率的实践
在上一篇文章中,我们讨论了如何构建一个智能客服Agent。今天,我想分享另一个实际项目:如何构建一个数据分析Agent。这个项目源于我们一个金融客户的真实需求 - 提升数据分析效率,加快决策速度。 从分析师的痛点说起 记得和分析师团队交流时的场景: 小张ÿ…...
在K8S中,如何把某个worker节点设置为不可调度?
在Kubernetes中,如果你想要把一个worker节点设置为不可调度,意味着你不想让Kubernetes调度器在这个节点上调度新的Pod。这通常用于维护或升级节点,或者当节点遇到硬件故障或性能问题时,要将某个worker节点设置为不可调度。 方法1…...
硬件电路基础
目录 1. 电学基础 1.1 原子 1.2 电压 1.3 电流 1.电流方向: 正极->负极,正电荷定向移动方向为电流方向,与电子定向移动方向相反。 2.电荷(这里表示负电荷)运动方向: 与电流方向相反 1.4 测电压的时候 2. 地线…...
5 前端系统开发:Vue2、Vue3框架(上):Vue入门式开发和Ajax技术
文章目录 前言一、Vue框架(简化DOM操作的一个前端框架):基础入门1 Vue基本概念2 快速入门:创建Vue实例,初始化渲染(1)创建一个入门Vue实例(2)插值表达式:{{表…...
阿里 Java 岗个人面经分享(技术三面 + 技术 HR 面):Java 基础 +Spring+JVM+ 并发编程 + 算法 + 缓存
技术一面 20 分钟 1、自我介绍 说了很多遍了,很流畅捡重点介绍完。 2、问我数据结构算法好不好 挺好的(其实心还是有点虚,不过最近刷了很多题也只能壮着胆子充胖子了) 3、找到单链表的三等分点,如果单链表是有环的…...
vue2-给data动态添加属性
vue2-给data动态添加属性 1. 问题的来源 在VUe2中(VUE3中使用了proxy,及时动态添加也能实现响应式),如果我们动态给data添加一个属性,会发现视图没有同步更新举个例子我们通过v-for遍历data中的一个属性list…...
Linux 文件和目录
Linux 文件和目录 文章目录 Linux 文件和目录Linux 目录Linux 目录配置的依据 --FHS目录树文件属性文件的分类一般权限 UGO特殊权限 suid\sgid\sticky隐藏属性 ATTR文件访问控制列表 ACL文件相关的命令权限的修改 chmod chown chgrp umaskchmodchgrpumask相关文档 /etc/profile…...
【大数据技术】本机DataGrip远程连接虚拟机MySQL/Hive
本机DataGrip远程连接虚拟机MySQL/Hive datagrip-2024.3.4VMware Workstation Pro 16CentOS-Stream-10-latest-x86_64-dvd1.iso写在前面 本文主要介绍如何使用本机的DataGrip连接虚拟机的MySQL数据库和Hive数据库,提高编程效率。 安装DataGrip 请按照以下步骤安装DataGrip软…...
Python制作简易PDF查看工具——PDFViewerV1.0
PDFViewer PDF浏览工具,是使用Python语言(使用PyQt5开发界面,PDF解析使用PyMuPDF开源模块)开发的PDF查看工具,已经实现基本翻页浏览、OCR文字识别(基于开源主流文字识别模型实现)、内容查找高亮…...
OpenClaw安全指南:百川2-13B模型权限管控与敏感操作防护
OpenClaw安全指南:百川2-13B模型权限管控与敏感操作防护 1. 为什么需要安全防护机制 去年冬天的一个深夜,我的OpenClaw经历了一次"惊魂时刻"。当时我让AI助手整理财务表格,结果它误将包含个人银行账号的临时文件上传到了云存储。…...
Thorium浏览器:重新定义现代网页浏览性能标准
Thorium浏览器:重新定义现代网页浏览性能标准 【免费下载链接】thorium Chromium fork named after radioactive element No. 90. Windows and MacOS/Raspi/Android/Special builds are in different repositories, links are towards the top of the README.md. …...
从‘距离’理解生成对抗:Wasserstein距离如何拯救你的GAN项目?通俗图解+代码验证
从Wasserstein距离到实战:如何用数学直觉拯救你的GAN训练? 想象你正在训练一个生成对抗网络(GAN),却发现生成器要么完全崩溃,要么反复输出几乎相同的图像——这就是典型的模式坍塌(Mode Collaps…...
用MobaXterm替代传统终端的完整指南
Windows远程运维革命:用MobaXterm替代传统终端的完整指南 每次打开 PuTTY 时,你是否会对着那个灰暗的界面叹气?当需要在Xshell中频繁切换标签时,是否感到效率低下?作为Windows系统管理员或开发者,我们长期忍…...
深度学习道路提取代码更换数据集后 PyCharm 闪退问题全面解决指南
深度学习道路提取代码更换数据集后 PyCharm 闪退问题全面解决指南 摘要 在基于深度学习的道路提取任务中,更换数据集后常出现 PyCharm 闪退现象。这类问题涉及环境配置、数据加载、内存管理、模型适配等多个层面,往往难以快速定位。本文从 Ubuntu 操作系统、PyCharm IDE、C…...
5个技巧让你彻底掌握caj2pdf:从开源工具到格式转换的精通指南
5个技巧让你彻底掌握caj2pdf:从开源工具到格式转换的精通指南 【免费下载链接】caj2pdf Convert CAJ (China Academic Journals) files to PDF. 转换中国知网 CAJ 格式文献为 PDF。佛系转换,成功与否,皆是玄学。 项目地址: https://gitcode…...
CosyVoice Docker Compose 中 model_id 的高效配置与优化实践
最近在部署 CosyVoice 语音服务时,我发现 docker-compose.yml 文件里的 model_id 配置项,虽然看起来只是简单的一行,但配置得当与否,直接关系到整个服务的部署效率、启动速度和资源开销。如果随便填一个值,或者不理解其…...
TrafficMonitor插件系统终极指南:3步打造个性化系统监控中心
TrafficMonitor插件系统终极指南:3步打造个性化系统监控中心 【免费下载链接】TrafficMonitorPlugins 用于TrafficMonitor的插件 项目地址: https://gitcode.com/gh_mirrors/tr/TrafficMonitorPlugins TrafficMonitor插件系统是一款强大的扩展框架࿰…...
sklearn分类指标实战:如何用precision_recall_curve优化你的模型效果
sklearn分类指标实战:如何用precision_recall_curve优化模型效果 在机器学习项目中,分类模型的评估往往比训练过程更考验数据科学家的专业素养。当你的模型在测试集上达到95%的准确率时,是否就意味着可以高枕无忧?现实情况往往复杂…...
