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模式,给我们一个提供数据存取服务的网络程序。日常口语中的数据库其实是指在磁盘或内存中存储的特定组织结构的数据。
 存储数据最常见的方式就是直接用文件存储。但文件存储存在诸多缺陷:

  1. 安全性问题!普通文件没有权限约制,数据可以随意被访问,存在数据安全问题。
  2. 文件不利于海量数据的查询和管理。比如需要在100万数据中查找主机ip为198.1.1.0的ip地址的个数。对于文件而言需要程序员将文件打开,然后按行遍历、判断、统计等工作。非常麻烦,效率低下。 但对于数据库而言,数据库本质其实就是一套对数据内容存取的一套解决方案。程序员将相关字段和要求传给数据库即可,数据库会将结果直接反馈呈现给程序员!
  3. 文件在程序中不方便控制。文件系统缺乏事务管理、并发控制等机制,难以保证数据的一致性和完整性。MySQL架构

 宏观上数据库是指:数据库客户端、服务端以及数据库文件。而口语中思的数据库指数据在磁盘上存取的一套解决方案(create databases创建出来的数据库)
在Linux中,数据库本质就是/var/lib/mysql目录下的一个目录文件,而建表本质就是该该目录下的一些普通文件。

二、MySQL架构

 第一层主要解决连接和安全问题。第二层类似于编译器主要进行词法分析、语法分析、以及mysql语句优化。第三次为各种存储引擎,是真正和OS系统进行交换,实现功能的。
 存储引擎是:数据库管理系统如何存储数据、如何为存储的数据建立索引和如何更新、查询数据等技术的实现方法(show engines;查看)

在这里插入图片描述

三、SQL语句分类

 sql语言分为以下3类:

  1. 数据定义语言(DDL),用于维护存储数据的结构。代表指令:createdrop
  2. 数据操纵语言(DML),用来对数据进行操作。代表指令:insertdeleteupdate
  3. 数据控制语言(DCL),主要负责权限管理和事务。代表指令: grantrevokecommit

四、数据库操作

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 ...
  1. DISTINCT关键字用于对结果去重。
  2. WHERE 后接筛选条件
  3. ORDER BY:按照指定列进行排序,ASC升序, DESC降序。
  4. 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;
  1. 最后通过rename进行,目的在于该操作是原子的,等一切都做好后,进行统一放入、更新、生效。

七、mysql聚合函数

 聚合函数是先将数据查询到后,在进行聚合。聚合时必须保证数据是可以被聚合的。
在这里插入图片描述
执行顺序样例:
在这里插入图片描述

八、查询分类

1)多表查询

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

2)自连接

自连接是指在同一张表连接查询!

 自连接的典型使用场景就是:一张表中保存公司所有人员的id以及上级id。现在需要查找某个员工的上级领导名字,那我们会使用自连接。

3) 子查询

子查询是指嵌入在其他sql语句中的select语句,也叫嵌套查询。子查询可以跟在where和from后面。

4)合并查询

  • union:该操作符用于取得两个结果集的并集。当使用该操作符时,会自动去掉结果集中的重复行。但需要保证两个结果的字段必须一样。

实例:将工资大于2500或职位是MANAGER的人找出来
在这里插入图片描述

  • union all: 该操作符用于取得两个结果集的并集。当使用该操作符时,不会去掉结果集中的重复行。
    在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ChatGPT怎么回事?

纯属发现,调侃一下~ 这段时间deepseek不是特别火吗,尤其是它的推理功能,突发奇想,想用deepseek回答一些问题,回答一个问题之后就回复服务器繁忙(估计还在被攻击吧~_~) 然后就转向了GPT&#xf…

Vue 中如何嵌入可浮动的第三方网页窗口(附Demo)

目录 前言1. 思路Demo2. 实战Demo 前言 🤟 找工作,来万码优才:👉 #小程序://万码优才/r6rqmzDaXpYkJZF 1. 思路Demo 以下Demo提供思路参考,需要结合实际自身应用代码 下述URL的链接使用百度替代! 方式 1…

【Linux】23.进程间通信(2)

文章目录 3. 进程间通信3.1 进程间通信介绍3.1.1 进程间通信目的3.1.2 进程间通信发展 3.2 什么是进程间通信3.3 管道3.4 匿名管道pipe()3.4.1 站在文件描述符角度-深度理解管道3.4.2 站在内核角度-管道本质3.4.3 用fork来共享管道原理3.4.5 管道相关知识3.4.6 代码一&#xff…

AI大模型开发原理篇-8:Transformer模型

近几年人工智能之所以能迅猛发展,主要是靠2个核心思想:注意力机制Attention Mechanism 和 Transformer模型。本次来浅谈下Transformer模型。 重要性 Transformer模型在自然语言处理领域具有极其重要的地位,为NLP带来了革命性的突破‌。可以…

html2canvas绘制页面并生成图像 下载

1. 简介 html2canvas是一个开源的JavaScript库,它允许开发者在用户的浏览器中直接将HTML元素渲染为画布(Canvas),并生成图像。以下是对html2canvas的详细介绍: 2. 主要功能 html2canvas的主要功能是将网页中的HTML元…

基于RK3588/RK3576+MCU STM32+AI的储能电站电池簇管理系统设计与实现

伴随近年来新型储能技术的高质量规模化发展,储能电站作为新能源领域的重要载体, 旨在配合逐步迈进智能电网时代,满足电力系统能源结构与分布的创新升级,给予相应规模 电池管理系统的设计与实现以新的挑战。同时,电子系…

机器学习-线性回归(参数估计之结构风险最小化)

前面我们已经了解过关于机器学习中的结构风险最小化准则,包括L1 正则化(Lasso)、L2 正则化(Ridge)、Elastic Net,现在我们结合线性回归的场景,来了解一下线性回归的结构风险最小化,通…

【数据分析】豆瓣电影Top250的数据分析与Web网页可视化(numpy+pandas+matplotlib+flask)

豆瓣电影Top250的数据分析与Web网页可视化(numpy+pandas+matplotlib+flask) 豆瓣电影Top250官网:https://movie.douban.com/top250写在前面 实验目的:实现豆瓣电影Top250详情的数据分析与Web网页可视化。电脑系统:Windows使用软件:PyCharm、NavicatPython版本:Python 3.…

备考蓝桥杯8——EEPROM读写

目录 看手册时间 关于IIC 附录 IIC代码 看手册时间 我们主要是搞编程,所以,我们一般会非常关心我们如何对EEPROM进行编程。特别的,EEPROM要做读写,首先是看它的IIC设备地址。 有趣的是——我们的EEPROM的IIC地址是根据地址进行…

深入浅出:旋转变位编码(RoPE)在现代大语言模型中的应用

在现代大语言模型(LLMs)中,位置编码是一个至关重要的组件。无论是 Meta 的 LLaMA 还是 Google 的 PaLM,这些模型都依赖于位置编码来捕捉序列中元素的顺序信息。而旋转变位编码(RoPE) 作为一种创新的位置编码…

“message“: “类型注释只能在 TypeScript 文件中使用

VScode中使用CtrlShiftP打开搜素框,输入Preferences: Open User Settings或Preferences: Open Workspace Settings。 找到settings.json文件 "typescript.validate.enable": false

VSCode中使用EmmyLua插件对Unity的tolua断点调试

一.VSCode中搜索安装EmmyLua插件 二.创建和编辑launch.json文件 初始的launch.json是这样的 手动编辑加上一段内容如下图所示: 三.启动调试模式,并选择附加的进程

SQL 秒变三线表 sql导出三线表

🎯SQL 秒变三线表,校园小助手超神啦 宝子们,搞数据分析、写论文的时候,从 SQL 里导出数据做成三线表是不是特别让人头疼😩 手动调整格式,不仅繁琐,还容易出错,分分钟把人逼疯&#…

学习threejs,pvr格式图片文件贴图

👨‍⚕️ 主页: gis分享者 👨‍⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍⚕️ 收录于专栏:threejs gis工程师 文章目录 一、🍀前言1.1 ☘️PVR贴图1.2 ☘️THREE.Mesh…

力扣1022. 从根到叶的二进制数之和(二叉树的遍历思想解决)

Problem: 1022. 从根到叶的二进制数之和 文章目录 题目描述思路复杂度Code 题目描述 思路 遍历思想(利用二叉树的先序遍历) 1.在先序遍历的过程中,用一个变量path记录并更新其经过的路径上的值,当遇到根节点时再将其加到结果值res上; 2.该题…

.NET 中实现生产者-消费者模型,BlockingCollection<T> 和 Channel<T>使用示例

一、方案对比&#xff1a;不同线程安全集合的适用场景 二、推荐方案及示例代码 方案 1&#xff1a;使用 BlockingCollection&#xff08;同步模型&#xff09; public class QueueDemo {private readonly BlockingCollection<int> _blockingCollection new BlockingCo…

C_位运算符及其在单片机寄存器的操作

C语言的位运算符用于直接操作二进制位&#xff0c;本篇简单结束各个位运算符的作业及其在操作寄存器的应用场景。 一、位运算符的简单说明 1、按位与运算符&#xff08;&&#xff09; 功能&#xff1a;按位与运算符对两个操作数的每一位执行与操作。如果两个对应的二进制…

Redis入门概述

1.1、Redis是什么 Redis&#xff1a;官网 高性能带有数据结构的Key-Value内存数据库 Remote Dictionary Server&#xff08;远程字典服务器&#xff09;是完全开源的&#xff0c;使用ANSIC语言编写遵守BSD协议&#xff0c;例如String、Hash、List、Set、SortedSet等等。数据…

个人毕业设计--基于HarmonyOS的旅行助手APP的设计与实现(挖坑)

在行业混了短短几年&#xff0c;却总感觉越混越迷茫&#xff0c;趁着还有心情学习&#xff0c;把当初API9 的毕业设计项目改成API13的项目。先占个坑&#xff0c;把当初毕业设计的文案搬过来 摘要&#xff1a;HarmonyOS&#xff08;鸿蒙系统&#xff09;是华为公司推出的面向全…

C++11详解(二) -- 引用折叠和完美转发

文章目录 2. 右值引用和移动语义2.6 类型分类&#xff08;实践中没什么用&#xff09;2.7 引用折叠2.8 完美转发2.9 引用折叠和完美转发的实例 2. 右值引用和移动语义 2.6 类型分类&#xff08;实践中没什么用&#xff09; C11以后&#xff0c;进一步对类型进行了划分&#x…