MySQL技能树学习——数据库组成
数据库组成:
数据库是一个组织和存储数据的系统,它由多个组件组成,这些组件共同工作以确保数据的安全、可靠和高效的存储和访问。数据库的主要组成部分包括:
数据库管理系统(DBMS): 数据库管理系统是数据库的核心组件,负责管理数据库的创建、维护、访问和控制。常见的数据库管理系统包括MySQL、Oracle、SQL Server、PostgreSQL等。
数据模型: 数据模型是描述数据在数据库中的组织方式的一种抽象表示。常见的数据模型包括层次模型、网络模型、关系模型和面向对象模型。关系模型是最常用的数据模型,它使用表、行和列来组织和表示数据。
数据库对象: 数据库对象是数据库中存储数据的基本单元。常见的数据库对象包括表、视图、索引、存储过程、触发器等。
表(Table): 表是数据库中存储数据的基本结构,它由行和列组成,每一列代表一个数据属性,每一行代表一个数据记录。
列(Column): 列是表的组成部分,每一列代表表中的一个数据属性,它定义了数据的类型、长度和约束条件。
行(Row): 行是表中的数据记录,每一行代表一个数据实体,它包含了一组相关的数据值,每个值对应表中的一个列。
索引(Index): 索引是一种数据结构,用于提高数据的检索速度。它可以加快数据库的查询操作,常见的索引类型包括单列索引、复合索引、唯一索引等。
视图(View): 视图是基于一个或多个表的查询结果集,它可以像表一样被查询,但实际上并不存储数据,而是通过查询动态生成。
存储过程(Stored Procedure): 存储过程是一组预定义的 SQL 语句集合,它们经过编译并存储在数据库中,可以被多次调用。
触发器(Trigger): 触发器是一种特殊的存储过程,它会在数据库中的特定事件发生时自动执行,常见的事件包括插入、更新和删除操作。
约束(Constraint): 约束是对表中数据进行限制和规范的规则,常见的约束类型包括主键约束、外键约束、唯一约束、检查约束等。
这些组件共同构成了数据库系统的基本架构,它们协同工作以实现数据的高效管理、存储、检索和保护。
表:
MySQL技能树学习-CSDN博客 MySQL技能树学习_mysql text长度是可变的吗-CSDN博客
视图:
概念:
视图可以由数据库中的一张表或者多张表生成,在结构上与数据表类似,但是视图本质上是一张虚拟表,视图中的数据也是由一张表或多张表中的数据组合而成。可以对视图中的数据进行增加、删除、修改、查看等操作,也可以对视图的结构进行修改。
在数据库中,视图不会保存数据,数据真正保存在数据表中。当对视图中的数据进行增加、删除和修改操作时,数据表中的数据会相应地发生变化;反之亦然。也就是说,不管是视图中的数据发生变化,还是数据表中的数据发生变化,另一方的数据也会相应地变化。
优点:
1.操作简单
将经常使用的查询操作定义为视图,可以使开发人员不需要关心视图对应的数据表的结构、表与表之间的关联关系,也不需要关心数据表之间的业务逻辑和查询条件,而只需要简单地操作视图即可,极大简化了开发人员对数据库的操作。
2.数据安全
MySQL根据权限将用户对数据的访问限制在某些数据的结果集上,而这些数据的结果集可以使用视图来实现。因此,可以根据权限将用户对数据的访问限制在某些视图上,而不必直接查询或操作数据表,这在一定程度上保障了数据表中数据的安全性。
3.数据独立
视图创建完成后,视图的结构就被确定了,当数据表的结构发生变化时不会影响视图的结构。当数据表的字段名称发生变化时,只需要简单地修改视图的查询语句即可,而不会影响用户对数据的查询操作。
4.适应灵活多变的需求
当业务系统的需求发生变化后,如果需要改动数据表的结构,则工作量相对较大,可以使用视图来减少改动的工作量。这种方式在实际工作中使用得比较多。
5.能够分解复杂的查询逻辑
数据库中如果存在复杂的查询逻辑,则可以将问题进行分解,创建多个视图获取数据,再将创建的多个视图结合起来,完成复杂的查询逻辑。
语法:
创建:
CREATE[OR REPLACE][ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}][DEFINER = user][SQL SECURITY { DEFINER | INVOKER }]VIEW view_name [(column_list)]AS select_statement[WITH [CASCADED | LOCAL] CHECK OPTION]·CREATE:新建视图。
·REPLACE:替换已经存在的视图。
·ALGORITHM:标识视图使用的算法。
·{UNDEFINED | MERGE | TEMPTABLE}:视图使用的算法。其中,UNDEFINED表示MySQL会自动选择算法;MERGE表示将引用视图的语句与视图定义进行合并;TEMPTABLE表示将视图的结果放置到临时表中,接下来使用临时表执行相应的SQL语句。
·DEFINER:定义视图的用户。
·SQL SECURITY:安全级别。DEFINER表示只有创建视图的用户才能访问视图;INVOKER表示具有相应权限的用户能够访问视图。
·view_name:创建的视图名称。
·column_list:视图中包含的字段名称列表。
·select_statement:SELECT语句。
·[WITH [CASCADED | LOCAL] CHECK OPTION]:保证在视图的权限范围内更新视图。
查看:
- SHOW TABLE语句同时显示出了当前数据库中数据表的名称和视图的名称
- DESCRIBE/DESC view_name
- SHOW TABLE STATUS LIKE ‘view_name’
- SHOW CREATE VIEW 'view_name'
- SELECT * FROM information_schema.view
视图的信息存储到information_schema数据库下的views数据表中
更新:
结构:
- CREATE OR REPLACE VIEW
- ALTER
数据:
直接修改:
- 向视图中插入数据 INSERT INTO view_category(id, t_category) VALUES (5, '水果')
- 更新视图中的数据 UPDATE view_category SET t_category = '图书' WHERE id = 5
- 删除视图数据 DELETE FROM view_category WHERE id = 5
间接修改:(更新数据库表中的数据)
删除:
案例:
单表:


多表:
存储过程和函数:
存储过程和函数不仅能够简化开发人员开发应用程序的工作量,而且对于存储过程和函数中SQL语句的变动,无须修改上层应用程序的代码,这也大大简化了后期对于应用程序维护的复杂度。
概念:
存储过程和存储函数都是一系列SQL语句的集合,这些SQL语句被封装到一起组成一个存储过程或者存储函数保存到数据库中。应用程序调用存储过程只需要通过CALL关键字并指定存储过程的名称和参数即可;同样,应用程序调用存储函数只需要通过SELECT关键字并指定存储函数的名称和参数即可。
返回值(存储函数有,存储过程没有)
参数类型可以是IN(存储函数仅)、OUT和INOUT(存储过程都)
应用场景(复杂业务):
如果将用户下单时系统包含的这些行为单独编写每条SQL语句,之后根据SQL语句执行的先后顺序和结果条件,依次执行其他SQL语句,不仅增加了开发应用程序的业务逻辑复杂性,而且在每个需要处理订单逻辑的地方都需要编写这些SQL语句,SQL语句的变动也会导致应用程序中业务逻辑的变动,这无疑增加了系统后期维护与升级的复杂度。
此时,可以编写存储过程和函数,按照特定的执行顺序和结果条件,将相应的SQL语句封装成特定的业务逻辑,应用程序只需要调用编写的存储过程和函数进行相应的处理,而无须关注SQL语句实现的细节。同时,在后期应用程序的维护过程中修改了存储过程和函数内部的SQL语句,无须修改上层应用程序的业务逻辑。
优点:
1.具有良好的封装性
存储过程和函数将一系列的SQL语句进行封装,经过编译后保存到MySQL数据库中,可以供应用程序反复调用,而无须关注SQL逻辑的实现细节。
2.应用程序与SQL逻辑分离
存储过程和函数中的SQL语句发生变动时,在一定程度上无须修改上层应用程序的业务逻辑,大大简化了应用程序开发和维护的复杂度。
3.让SQL具备处理能力
存储过程和函数支持流程控制处理,能够增强SQL语句的灵活性,而且使用流程控制能够完成复杂的逻辑判断和相关的运算处理。
语法:
创建存储过程:
·CREATE PROCEDURE:创建存储过程必须使用的关键字;
·sp_name:创建存储过程时指定的存储过程名称;
·proc_parameter:创建存储过程时指定的参数列表,参数列表可以省略;
- [ IN | OUT | INOUT ] param_name type
·characteristic:创建存储过程时指定的对存储过程的约束;
·LANGUAGE SQL:存储过程的SQL执行体部分(存储过程语法格式中的routine_body部分)是由SQL语句组成的。
·[NOT] DETERMINISTIC:执行当前存储过程后,得出的结果数据是否确定。其中,DETERMINISTIC表示执行当前存储过程后得出的结果数据是确定的,即对于当前存储过程来说,每次输入相同的数据时,都会得到相同的输出结果。NOT DETERMINISTIC表示执行当前存储过程后,得出的结果数据是不确定的,即对于当前存储过程来说,每次输入相同的数据时,得出的输出结果可能不同。如果没有设置执行值,则MySQL默认为NOT DETERMINISTIC。
·{CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA}:存储过程中的子程序使用SQL语句的约束限制。其中,CONTAINS SQL表示当前存储过程的子程序包含SQL语句,但是并不包含读写数据的SQL语句;NO SQL表示当前存储过程的子程序中不包含任何SQL语句;READS SQL DATA表示当前存储过程的子程序中包含读数据的SQL语句;MODIFIES SQL DATA表示当前存储过程的子程序中包含写数据的SQL语句。如果没有设置相关的值,则MySQL默认指定值为CONTAINS SQL。
·SQL SECURITY {DEFINER | INVOKER}:执行当前存储过程的权限,即指明哪些用户能够执行当前存储过程。DEFINER表示只有当前存储过程的创建者或者定义者才能执行当前存储过程;INVOKER表示拥有当前存储过程的访问权限的用户能够执行当前存储过程。如果没有设置相关的值,则MySQL默认指定值为DEFINER。
·COMMENT 'string':表示当前存储过程的注释信息,解释说明当前存储过程的含义。
·routine_body:存储过程的SQL执行体,使用BEGIN…END来封装存储过程需要执行的SQL语句。
案例

当用MySQL的命令行创建存储过程时,首先需要使用“DELIMITER $$”语句将MySQL数据库的语句结束符设置为“$$”。因为MySQL数据库默认的语句结束符为分号(;),如果不设置MySQL数据库的语句结束符,则存储过程中的SQL语句的结束符会与MySQL数据库默认的语句结束符相冲突。在创建存储过程的结尾使用“END $$”来结束存储过程。当整个存储过程创建完毕后,再使用“DELIMITER ;”语句将MySQL数据库的语句结束符恢复成默认的分号(;)。用MySQL命令行创建存储过程时,也可以使用DELIMITER语句指定其他符号为语句结束符,而不一定是“$$”符号。
索引和约束:
触发器:
认真学习MySQL 中的触发器_mysql触发器-CSDN博客
概念:
事先为某张表绑定好一段代码。当表中的某些内容发生改变的时候(增删改),系统自动触发代码执行。 即,触发器是基于(依赖于)表的。所有的触发器(针对数据库服务器而不是数据库)都会保存到数据库information_schema的triggers表中
类型:
三种类型:增删改–insert,delete和update(触发事件)
两种类型:前后–before 和 after(触发时间)
语法:
创建:
查看:
- show triggers;
- show create trigger 触发器名字;
删除:
drop trigger [数据库.]trigger_name;
局部变量:
声明:DECLARE var_name[,…] type [DEFAULT value]
赋值:SET var_name = expr
存储引擎:
存储引擎在MySQL底层以组件的形式提供,不同的存储引擎提供的存储机制、索引的存放方式和锁粒度等不同。
查看:SHOW ENGINES
相关文章:
MySQL技能树学习——数据库组成
数据库组成: 数据库是一个组织和存储数据的系统,它由多个组件组成,这些组件共同工作以确保数据的安全、可靠和高效的存储和访问。数据库的主要组成部分包括: 数据库管理系统(DBMS): 数据库管理系…...
OpenCV入门1:Python基础编程
目录 环境配置 Python基础语法 import 与 from...import If ... Else 语句 While 循环 For 循环 集合数据类型 列表 函数 类和对象 环境配置 详情请参考:Pycharm环境配置完整教程 Python基础语法 import 与 from...import 在 python 用 import 或者 f…...
C++ Builder XE EnumWindowsProc遍历所有窗口的名称
BOOL CALLBACK EnumWindowsProc(HWND hwnd, LPARAM lParam) { // 这里可以添加你的处理逻辑 // 例如,将句柄添加到列表中或者其他操作 // 这里我们仅仅输出到调试窗口 OutputDebugString(L"枚举窗口句柄: "); char windowHandle[10];…...
Qt QInputDialog详解
1.简介 QInputDialog是一个对话框类,用于从用户那里获取一个单一的值。这个值可以是字符串、数字、或者一个列表中的选项。QInputDialog提供了一个方便的方式来快速创建一个输入对话框,无需自己从头开始构建。 QInputDialog支持多种输入类型࿱…...
最新盘点!2024年20大好用的项目管理软件(后续持续更新)
项目管理软件,作为一种高效的项目管理工具,正逐渐成为企业运营中不可或缺的一环。它包括任务分配、进度跟踪、团队协作、风险预测等多个方面,为企业提供了全方位的项目管理解决方案。 在如今竞争激烈的市场环境下,企业要想在有限…...
Linux:配置客户端默认autofs服务
Linux:配置客户端autofs服务 安装autofs软件 [rootserver200 ~]# dnf install autofs -y开启并设置开机自启autofs服务 [rootserver200 ~]# systemctl enable --now autofs访问默认autofs挂载机制 当autofs启动后系统默认会在/net目录中访问nfs服务器 [rootser…...
Kotlin版本的Gradle全局配置init.gradle.kts及参考文档
工欲善其事, 必先利其器。 文章目录 init.gradle.ktsGroovy版本的init.gradle其他有用的settings.gradle.ktskotlin 与 compose 版本对应关系agp 与 gradle 版本对应关系gradle下载器 直接在.gradle文件夹下添加文件init.gradle / init.gradle.kt for kotlin dsl. …...
react18【实战】tab切换,纯前端列表排序(含 lodash 和 classnames 的安装和使用)
技术要点 动态样式 className{tabItem ${currentType item.value && "active"}}安装 lodash npm i --save lodash使用 lodash 对对象数组排序(不会改变源数组) _.orderBy(dataList, "readNum", "desc")src\De…...
C++学习第二十七课:C++ 输入输出流详解:从基础到高级应用
在 C 中,流(stream)是一种用于实现输入输出操作的抽象概念。流可以看作是字节的流动,这些字节可以从一个地方流向另一个地方,例如从键盘输入到程序中,或者从程序输出到屏幕。C 提供了一套完整的流库来处理各…...
【Unity AR开发系列】介绍如何使用这个支持热更的AR开发插件,快速地开发AR应用
预告 Unity开发AR系列 本专栏将介绍如何使用这个支持热更的AR开发插件,快速地开发AR应用。 更新 二、使用插件一键安装HybridCLR和ARCore 三、配置带HybridCLR的ARCore开发环境...
Nginx - 配置文件结构(一)
安装Nginx 以 Ubuntu 为例,安装命令为 sudo apt install nginx常用指令 # 检查配置文件是否有问题 nginx -t# 热加载配置文件 nginx -s reload# 等待处理完当前请求并退出 nginx -s quit# 快速退出 nginx -s stop目录结构 nginx 默认安装位置一般在 /etc/nginx …...
暗区突围进不去/游戏无法启动/掉帧卡顿/报错的解决方法
暗区突围是一款高拟真硬核射击手游,打造了全新的沉浸式暗区战局体验,发行商是腾讯公司。这个游戏名词虽然看起来有些陌生,但其本身的玩法内核毫无疑问的是,这款游戏在画面质量和枪械操作方面,都是手游市场上同类游戏中…...
基于FPGA的视频矩阵 视频拼接 无缝切换解决方案
视频矩阵 视频矩阵 视频拼接 无缝切换 1. 最大支持144路HDMI视频输入,最大支持144路路HDMI输出,完全交叉切换。 2. 与包括1080p/60的所有HDTV分辨率和高达1920*1200的PC的分辨率兼容; 3. 支持HDMI 1.3a、HDCP 1.3、HDCP 1.4、以及DVI 1.0协…...
LeetCode 513.找树左下角的值
LeetCode 513.找树左下角的值 1、题目 题目链接:513. 找树左下角的值 给定一个二叉树的 根节点 root,请找出该二叉树的 最底层 最左边 节点的值。 假设二叉树中至少有一个节点。 示例 1: 输入: root [2,1,3] 输出: 1示例 2: 输入: [1,2,3,4,null…...
redis分片java实践、redis哨兵机制实现、redis集群搭建
redis分片java实践 linux安装redishttps://mp.csdn.net/mp_blog/creation/editor/134864302复制redis.conf配置文件成redis1.conf、redis2.conf、redis3.conf 修改redis的端口信息和存pid文件的路径。存pid文件的路径只要不同就行了,没什么特别要求。 指定配置文件…...
2024年四千价位段最具统治力的投影仪,坚果N1S 4K: 4K+三色激光=下一代4K
更高的亮度与分辨率、更强的对比度、更广的色域、更低的价格,家用智能投影企业在性能和价格上加速内卷。作为该领域的龙头和“卷王之王”,坚果投影率先将激光投影仪的价格拉入万元内,近期其又祭出一把杀手锏——坚果N1S 4K。该产品是首款4000…...
MySQL8.3升级踩坑记录
之前用的mysql5.7,目前被省公司发现有漏洞,需要升级mysql8.3,无奈只好升级,记录下踩坑经过 1、安装完以后设置环境变量,网上操作一大堆,以便于方便使用client 2、双击client 登录,开启远程访问…...
你写的每条SQL都是全表扫描吗
你写的每条SQL都是全表扫描吗?如果是,那MySQL可太感谢你了,每一次SQL执行都是在给MySQL上压力、上对抗。MySQL有苦难言:你不知道索引吗?你写的SQL索引都失效了不知道吗?慢查询不懂啊?建那么多索…...
每日两题 / 24. 两两交换链表中的节点 25. K 个一组翻转链表(LeetCode热题100)
24. 两两交换链表中的节点 - 力扣(LeetCode) 定义三个指针,交换前先保存ntnt指针为next->next,cur和next两个节点,然后将pre->next指向next 若pre为空,说明当前交换的节点为头两个节点,…...
【Linux】模拟实现bash(简易版)
👦个人主页:Weraphael ✍🏻作者简介:目前正在学习c和算法 ✈️专栏:Linux 🐋 希望大家多多支持,咱一起进步!😁 如果文章有啥瑕疵,希望大佬指点一二 如果文章对…...
XCTF-web-easyupload
试了试php,php7,pht,phtml等,都没有用 尝试.user.ini 抓包修改将.user.ini修改为jpg图片 在上传一个123.jpg 用蚁剑连接,得到flag...
【Python】 -- 趣味代码 - 小恐龙游戏
文章目录 文章目录 00 小恐龙游戏程序设计框架代码结构和功能游戏流程总结01 小恐龙游戏程序设计02 百度网盘地址00 小恐龙游戏程序设计框架 这段代码是一个基于 Pygame 的简易跑酷游戏的完整实现,玩家控制一个角色(龙)躲避障碍物(仙人掌和乌鸦)。以下是代码的详细介绍:…...
【kafka】Golang实现分布式Masscan任务调度系统
要求: 输出两个程序,一个命令行程序(命令行参数用flag)和一个服务端程序。 命令行程序支持通过命令行参数配置下发IP或IP段、端口、扫描带宽,然后将消息推送到kafka里面。 服务端程序: 从kafka消费者接收…...
React Native 开发环境搭建(全平台详解)
React Native 开发环境搭建(全平台详解) 在开始使用 React Native 开发移动应用之前,正确设置开发环境是至关重要的一步。本文将为你提供一份全面的指南,涵盖 macOS 和 Windows 平台的配置步骤,如何在 Android 和 iOS…...
el-switch文字内置
el-switch文字内置 效果 vue <div style"color:#ffffff;font-size:14px;float:left;margin-bottom:5px;margin-right:5px;">自动加载</div> <el-switch v-model"value" active-color"#3E99FB" inactive-color"#DCDFE6"…...
页面渲染流程与性能优化
页面渲染流程与性能优化详解(完整版) 一、现代浏览器渲染流程(详细说明) 1. 构建DOM树 浏览器接收到HTML文档后,会逐步解析并构建DOM(Document Object Model)树。具体过程如下: (…...
解决本地部署 SmolVLM2 大语言模型运行 flash-attn 报错
出现的问题 安装 flash-attn 会一直卡在 build 那一步或者运行报错 解决办法 是因为你安装的 flash-attn 版本没有对应上,所以报错,到 https://github.com/Dao-AILab/flash-attention/releases 下载对应版本,cu、torch、cp 的版本一定要对…...
Spring是如何解决Bean的循环依赖:三级缓存机制
1、什么是 Bean 的循环依赖 在 Spring框架中,Bean 的循环依赖是指多个 Bean 之间互相持有对方引用,形成闭环依赖关系的现象。 多个 Bean 的依赖关系构成环形链路,例如: 双向依赖:Bean A 依赖 Bean B,同时 Bean B 也依赖 Bean A(A↔B)。链条循环: Bean A → Bean…...
Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习)
Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习) 一、Aspose.PDF 简介二、说明(⚠️仅供学习与研究使用)三、技术流程总览四、准备工作1. 下载 Jar 包2. Maven 项目依赖配置 五、字节码修改实现代码&#…...
Git常用命令完全指南:从入门到精通
Git常用命令完全指南:从入门到精通 一、基础配置命令 1. 用户信息配置 # 设置全局用户名 git config --global user.name "你的名字"# 设置全局邮箱 git config --global user.email "你的邮箱example.com"# 查看所有配置 git config --list…...






