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&#…...
python的函数介绍
一.定义和调用函数 1.定义函数 在 Python 中,使用 def 关键字来定义一个函数。函数可以包含参数,也可以包含返回值 基本语法 def function_name(parameters):"""docstring"""# Function bodyreturn resultdef greet(n…...
要完成使用MLflow比较模型运行、选择模型并将其部署到REST API的教程
要完成使用MLflow比较模型运行、选择模型并将其部署到REST API的教程,请按照以下有序步骤操作: 设置环境 导出MLflow跟踪URI:设置环境变量以指向您的MLflow跟踪服务。export MLFLOW_TRACKING_URIyour-organizations-MLflow-server-url 加载数…...
Windows Docker笔记-简介摘录
Docker是一个开源的容器化平台,可以帮助开发人员将应用程序与其依赖项打包在一个独立的容器中,然后在任何安装的Docker的环境中快速、可靠地运行。 几个基本概念和优势: 容器:容器是一个轻量级、独立的运行环境,包含了…...
MVC 文件夹:架构之美与实际应用
MVC 文件夹:架构之美与实际应用 引言 MVC(Model-View-Controller)是一种设计模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。这种架构模式不仅提高了代码的可维护性和可扩展性,而且使得开发流程更加清晰。本文将深入探讨MVC文…...
AI透明化与全球政治格局的发展:如何避免AI被人为操控
在现代社会,人工智能(AI)已经逐渐渗透到我们的日常生活中,尤其是在社交平台和信息传播领域。虽然AI可以极大地推动社会发展,但也潜藏着被恶意操控的风险。最令人担忧的是,某些势力可能通过操控AI来操控公众…...
ubuntu 网络管理--wpa_supplicant、udhcpc
ubuntu 网络管理--wpa_supplicant 1 介绍wpa_supplicant 无线认证wpa_passphrase 配置工具 NetworkManager 网络管理udhcpc 与 dhclient对比dhclient概述主要功能 udhcpc概述主要功能 2 联系依赖关系配置文件 3 区别4 如何选择5 示例使用 wpa_supplicant 手动连接无线网络使用 …...
熟练掌握Http协议
目录 基本概念请求数据Get请求方式和Post请求方式 响应数据响应状态码 基本概念 Http协议全称超文本传输协议(HyperText Transfer Protocol),是网络通信中应用层的协议,规定了浏览器和web服务器数据传输的格式和规则 Http应用层协议具有以下特点&#…...
C++的 I/O 流
本文把复杂的基类和派生类的作用和关系捋出来,具体的接口请参考相关文档 C的 I/O 流相关的类,继承关系如下图所示 https://zh.cppreference.com/w/cpp/io I / O 的概念:内存和外设进行数据交互称为 I / O ,例如:把数…...
寒假刷题Day22
一、2570. 合并两个二维数组 - 求和法 class Solution { public:vector<vector<int>> mergeArrays(vector<vector<int>>& nums1, vector<vector<int>>& nums2) {int i 0, j 0, n1 nums1.size(), n2 nums2.size();int tmp 0;…...
【PDF多区域识别】如何批量PDF指定多个区域识别改名,基于Windows自带的UWP的文字识别实现方案
海关在对进口货物进行查验时,需要核对报关单上的各项信息。对报关单 PDF 批量指定区域识别改名后,海关工作人员可以更高效地从文件名中获取关键信息,如货物来源地、申报价值等。例如文件名 “[原产国]_[申报价值].pdf”,有助于海关快速筛选重点查验对象,提高查验效率和监管…...
【大数据技术】本机PyCharm远程连接虚拟机Python
本机PyCharm远程连接虚拟机Python 注意:本文需要使用PyCharm专业版。 pycharm-professional-2024.1.4VMware Workstation Pro 16CentOS-Stream-10-latest-x86_64-dvd1.iso写在前面 本文主要介绍如何使用本地PyCharm远程连接虚拟机,运行Python脚本,提高编程效率。 注意: …...
Windows图形界面(GUI)-QT-C/C++ - Qt Combo Box
公开视频 -> 链接点击跳转公开课程博客首页 -> 链接点击跳转博客主页 目录 一、概述 1.1 基本概念 1.2 应用场景对比 二、核心属性详解 2.1 行为控制 2.2 显示配置 三、数据操作与访问 3.1 基础数据管理 3.2 高级数据访问 四、用户交互处理 4.1 信号处…...
数字化转型:概念性名词浅谈(第四讲)
大家好,本篇文章是在新年之际写的,所以在这里先给大家拜个年。 今天要介绍的名词为ETL: ETL,是英文Extract-Transform-Load的缩写,用来描述将数据从来源端经过抽取(extract)、转换(transfor…...
标题:市场波动中的价格趋势分析与策略优化
在市场投资中,价格的波动不仅是常态,更是影响投资决策的关键因素。市场价格的变化受多种因素影响,包括供需关系、政策调整、国际市场动态等。如何理解价格走势,并在其中寻找合适的交易机会,是投资者需要长期研究的课题…...
【HarmonyOS之旅】基于ArkTS开发(三) -> 兼容JS的类Web开发(四) -> 常见组件(一)
目录 1 -> List 1.1 -> 创建List组件 1.2 -> 添加滚动条 1.3 -> 添加侧边索引栏 1.4 -> 实现列表折叠和展开 1.5 -> 场景示例 2 -> dialog 2.1 -> 创建Dialog组件 2.2 -> 设置弹窗响应 2.3 -> 场景示例 3 -> form 3.1 -> 创建…...
Linux:文件系统(软硬链接)
目录 inode ext2文件系统 Block Group 超级块(Super Block) GDT(Group Descriptor Table) 块位图(Block Bitmap) inode位图(Inode Bitmap) i节点表(inode Tabl…...
深度学习系列--01.入门
一.深度学习概念 深度学习(Deep Learning)是机器学习的分支,是指使用多层的神经网络进行机器学习的一种手法抖音百科。它学习样本数据的内在规律和表示层次,最终目标是让机器能够像人一样具有分析学习能力,能够识别文字…...
如何抓取酒店列表: 揭开秘密
搜索酒店列表是一种强大的工具,可以从各种在线资源中收集有关住宿、价格和可用性的综合数据。无论您是要比较价格、分析市场趋势,还是要创建个性化的旅行计划,搜索都能让您有效地汇编所需的信息。在本文中,我们将介绍如何搜索酒店…...
深度剖析 C++17 中的 std::byte:解锁字节级编程新境界
文章目录 一、引入背景二、基本定义三、特性详解不可隐式转换为整型显式转换为unsigned char位运算支持字面量支持四、使用场景内存操作数据序列化与反序列化网络通信文件读写操作五、与其他数据类型的交互与字符类型的交互与整数类型的交互与指针类型的交互六、注意事项避免混…...
【多线程】线程池核心数到底如何配置?
🥰🥰🥰来都来了,不妨点个关注叭! 👉博客主页:欢迎各位大佬!👈 文章目录 1. 前置回顾2. 动态线程池2.1 JMX 的介绍2.1.1 MBeans 介绍 2.2 使用 JMX jconsole 实现动态修改线程池2.2.…...
三维空间全局光照 | 及各种扫盲
Lecture 6 SH for diffuse transport Lecture 7关于 SH for glossy transport 三维空间全局光照 diffuse case和glossy case的区别 在Lambertian模型中,BRDF是一个常数 diffuse case 跟outgoing point无关 glossy case 跟outgoing point有关 (Gloss…...
通过C/C++编程语言实现“数据结构”课程中的链表
引言 链表(Linked List)是数据结构中最基础且最重要的线性存储结构之一。与数组的连续内存分配不同,链表通过指针将分散的内存块串联起来,具有动态扩展和高效插入/删除的特性。本文将以C/C++语言为例,从底层原理到代码实现,手把手教你构建完整的链表结构,并深入探讨其应…...
Polardb三节点集群部署安装--附虚拟机
1. 架构 PolarDB-X 采用 Shared-nothing 与存储计算分离架构进行设计,系统由4个核心组件组成。 计算节点(CN, Compute Node) 计算节点是系统的入口,采用无状态设计,包括 SQL 解析器、优化器、执行器等模块。负责数据…...
java s7接收Byte字节,接收word转16位二进制
1图: 2.图: try {List list getNameList();//接收base64S7Connector s7Connector S7ConnectorFactory.buildTCPConnector().withHost("192.168.46.52").withPort(102).withTimeout(1000) //连接超时时间.withRack(0).withSlot(3).build()…...
挑战项目 --- 微服务编程测评系统(在线OJ系统)
一、前言 1.为什么要做项目 面试官要问项目,考察你到底是理论派还是实战派? 1.希望从你的项目中看到你的真实能力和对知识的灵活运用。 2.展示你在面对问题和需求时的思考方式及解决问题的能力。 3.面试官会就你项目提出一些问题,或扩展需求…...
基于springboot的体质测试数据分析及可视化设计
作者:学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等 文末获取“源码数据库万字文档PPT”,支持远程部署调试、运行安装。 项目包含: 完整源码数据库功能演示视频万字文档PPT 项目编码࿱…...
java-重载与重写
介绍 在 Java 中,重载(Overloading) 和 重写(Overriding) 是两个重要的概念,它们都与方法有关,但它们的应用场景和行为完全不同。 通过理解重载和重写的区别,可以更好地设计类的继承…...
使用C++构建一个优先级队列
1.优先级队列的介绍 优先级队列是一种特殊的队列数据结构,它是队列,但又不完全是,因为它要将装载的数据进行优先级排序,找到一个最大或者最小优先级的元素,下一次出队列的元素就是这个元素,所以说它不完全是…...
linux驱动开发之字符设备与总线设备驱动模型的区别与联系
Linux驱动开发核心概念解析 1. 字符设备(Character Device) 定义与特点: 以字节流形式进行数据交换,适用于顺序访问的设备(如键盘、鼠标、串口)。 用户空间通过设备文件(如/dev/xxx࿰…...
