【MySQL】-- 数据库基础

news2024/11/30 14:33:01

目录

MySQL概述

MySQL初期概念

小结

主流数据库

连接服务器

服务器,数据库,表关系

数据逻辑存储

MySQL架构

SQL分类

存储引擎

存储引擎

查看存储引擎


MySQL概述

#问:什么是数据库?

MySQL初期概念

        这个所谓的mysql严格意义上来讲并不是数据库,他是数据库的客户端。mysqld叫做mysql的服务端,mysql其实是一套网络服务

        因为mysql是一个服务:

        状态Llisten的,可以认识到原来mysqld服务端就是一个网络服务器。因为mysqld是一个网络服务器,所以就注定了其采用的是TCP协议,在引用层。所以mysqld的本质和以前网络学习中的http / https / 网络版本计算器,任何的应用层软件本质没有差别,mysqld就是一个应用层服务,在网络的角度,mysqld就是一个应用层服务,在系统视角,它就是用户层的一个进程,这就是mysql后端服务。

  • mysql

        不是数据库,他是MySQL的客户端。

  • mysqld

        严格意义上来讲其叫数据库,但是准确上叫其数据库服务 - 数据库服务端,其实是一个应用程序,启动之后变成进程。特殊说明下(有没有将数据库起来?)其可以叫数据库 - 狭义

  • 数据存储

        特殊说明下(不做任何特殊说明 / 有没有建数据库?)的数据库是:

        以特定的格式保存好的文件,我们叫做数据库 - 狭义。 

广义上:

        三者合起来,提供较为便捷的数据的存取服务的软件集合,解决方案 - MySQL数据库。

#问:存储数据用文件就可以了,为什么还要弄个数据库?

        有一个文件,文件里有一万个IP地址。这个IP地址,每一个IP地址开头都可能不一样,而这些IP地址有一个需求:对这一万个IP地址中,120开头的IP全部改成119,并且统计一下最终一共有多少个IP被改了。如果当我们听到这个话的时候,我们如果用文件的方案来存,首先这一万个数据当然可以存,数据库也可以存。所以我们首先要有一个共识,就是文件或者数据库,其实都可以进行数据的存储。

  • 如果用文件:

        我们将文件打开之后,然后按行进行读取,读取之后。紧接着把对应的这一行的字符串进行确认,如果是120开头的IP地址,就利用字符串替换,将120替换为199,即处理完一行,然后搞一个计数器,利用计数器计数并周而复始的进行确认、替换 - 数据内容的管理工作,需要程序员自己做

  • 如果用数据库:

        不用读文件、打开文件,不用按行读取,根本不用关心。只需要直接根据SQL语句,告诉数据库需要查什么、改什么,然后就利用两条SQL,就可以按照我们的需求,把我们的数据都给处理掉了。

        数据库本质:是对文件的内容提供基本的内容操作,不用程序员(用户)手动的进行数据管理。

        也就是说程序员(用户)对磁盘中的文件(如:IP文件),进行直接的操作,问题就是成本太高(其他问题:效率太低、安全性差)。而现在变为,直接在程序员(用户)与磁盘文件之间,加了一层软件层(mysqld),于是用户不用直接访问文件了,而是交给mysqld,mysqld再去帮我们访问对应的文件列表 - 用户使用sql语句对内容的操作

        所以,拥有MySQL的原因:MySQL是一层软件层,能够对我们所对应的文件进行控制(数据管理)

融汇贯通的理解:

        计算机中的哲学:如果我们现在面临着一个软件问题,那么最简单的做法就是在两个软件层之间添加一层软件层,就可以解决软件问题。

小结

文件保存数据有以下几个缺点:

  • 文件的安全性问题 - 误操作删数据、回文、撤销……
  • 文件不利于数据查询、管理和海量数据的存储 - 需要极优的程序和算法
  • 文件在程序中控制不方便 - 如:查找还需要自行遍历
数据库存储介质:
  • 磁盘 - 为主
  • 内存 - 为辅

        为了解决上述问题,专家们设计出更加利于管理数据内容的东西 -- 数据库,它能更有效的管理数据,数据库的水平是衡量一个程序员水平的重要指标

一句话:

        数据库它是数据库专家统一给我们编写的一套数据库服务,这个数据库服务以mysqld的形式呈现,最终在磁盘上会有大量的文件来保存数据库,并且把服务端  + 一大堆的数据 = 统称为数据库

        对应的MySQL其实也是一种 "文件系统" ,只不过它这种 "文件系统" 不是针对于操作系统层面上的管理,操作系统的管理是不丢就行,而数据库的 "文件系统" 的重点是针对于文件内容。

主流数据库

  • SQL Sever: 微软的产品,.Net程序员的最爱,中大型项目。
  • Oracle: 甲骨文产品,银行用的多,适合大型项目,复杂的业务逻辑,并发一般来说不如MySQL。
  • MySQL:世界上最受欢迎的数据库,属于甲骨文,并发性好,不适合做复杂的业务。主要用在电商,SNS,论坛。对简单的SQL处理效果好。
  • PostgreSQL:加州大学伯克利分校计算机系开发的关系型数据库,不管是私用,商用,还是学术研究使用,可以免费使用,修改和分发。
  • SQLite:是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中。它的设计目标是嵌入式的(或单机应用使用),而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。
  • H2:是一个用Java开发的嵌入式数据库,它本身只是一个类库,可以直接嵌入到应用项目中。

连接服务器

  • 输入:
mysql -h 127 .0.0.1 -P 3306 -u root -p

        -h:指定主机,后面跟的就是IP地址 - 127.0.0.1 本地环回

        -P:指明连接的MYSQL对应的端口号 - 默认3306(如果想修改端口号,在配置文件内直接加上port=62344(想修改的端口号),注意:记住重启)

上述可以省略,默认不指明IP和不指明端口,默认就是本地 + 3306。

        -u:表示登陆的时候想以哪一个用户登陆。

        -p:后面可以直接跟密码(但是这样就将密码明文了,所以不好)

通过 -h  -P 更加的可以强调一点,MySQL是一套网络服务。

  • 输出:

服务器,数据库,表关系

        MySQL是一个关系型数据库,所谓的关系型数据库就是它的数据库当中的数据,行列之间,表跟表之间是有莫大的关系的。

#问:创建一个数据库本质在Linux下是做什么?

        show databases显示当前的数据库所支持的数据库列表,因为当前是root,所以数据库里的所有数据库都可以看到。

(MySQL中的命令一定要最后接 ' ;' 号)

        在MySQL中,建立一个数据库 create database XXX

        本质是在Linux下建立了一个空目录!

(db.opt先忽略后面再说)

        不要觉得建数据库很神秘,数据库是介于操作系统和磁盘之间的一种应用层软件,所以其是在我们创建数据库的时候,其实是帮我们在特定的路径当中创建了一个目录 -- 这个目录就叫做数据库。

        我们查看数据库列表所对应的操作mysql -- 是客户端。所以其实本质是我们把我们的客户端构建了一个SQL,这个SQL语句通过网络 / 本地进程间通讯,交给服务端进程mysqld,服务端进程收到了这个对应的SQL指令,然后在它的进程内部一定有对应的系统调用,帮我们创建了目录 -- 这就叫做数据库。

#问:建表本质在Linux上是在做什么?

        如果想建一个表,一定是要在某一个数据库里面建表,那就需要先进入这个数据库。所谓的进入数据库,用数据库语言就是:use 数据库;

        确认当前已经使用这个数据库:select database();

        果然,现在就在CR这个数据库里了 -- 这是数据库的观念。

        说简单一点,在Linux中可以认为其实就是cd到了这个目录里面去了 -- mysqld进入了。

然后再建表:

        输入:(不用管,看现象即可)

        建好之后,确认是否建表成功:

         在Linux中可以看到:

        可以发现其实我们所谓的建表的行为,最终在数据库里其会对应上一些文件(几个文件不重要,不同的存储引擎,所对应的文件是有差别的)。最重要的是,我们知道了原来创建一个表本质就是在Linux当中创建一个 / 多个文件 -- 一个数据库里面创建对应的表,对应的Linux语言就是:在一个目录里创建文件。

        不管是命令行,还是图形化界面,还是第三方库 -- client,最后都是使用SQL语句向服务器发出请求。

  • 所谓安装数据库服务器,只是在机器上安装了一个数据库管理系统程序(mysqld),这个管理程序可以管理多个数据库(Linux的目录),一般开发人员会针对每一个应用创建一个数据库。
  • 为保存应用中实体的数据,一般会在数据库中创建多个表,以保存程序中实体的数据。

数据逻辑存储

        逻辑存储:比如在Linux的学习中,其实有时候我们看到的真正的具体在硬件上 / 存储的时候,可能就是其具体的存储结构,但实际上在计算机里实际呈现的时候可能会有不同的呈现的方式。比如说:内存,内存对应着一些硬件,然后进程看待这个内存有程序地址空间,所以每一个进程对于内存就都可以以虚拟地址空间的方式看 -- 虚拟地址空间也就可以是一种逻辑结构。还有最经典的Linux下一切接文件,这个文件就称作为逻辑结构。

        换而言之,就是对于MySQL也一样,它实际存数据根本就可以说不是以表的形式存的,明确一点就是以二进制的方式去存数据的。

        给用户呈现的表结构就是逻辑结构。也就是说给我们看到的和它实际存的是不一样的,是因为操作系统和MySQL做了相关的转化。

#问:MySQL它的逻辑结构是什么?

        MySQL的逻辑结构是基于行和列的。

MySQL架构

        MySQL 是一个可移植的数据库,几乎能在当前所有的操作系统上运行,如 Unix/Linux Windows 、 Mac 和 Solaris 。各种系统在底层实现方面各有不同,但是 MySQL 基本上能保证在各个平台上的物理体系结构的一致性 -- MySQL最终可能底层的接口不一样,但是上层的接口一样。

MySQL在宏观上一共分三层:

        1、连接层:主要是做连接管理以及鉴权,还有一些安全策略。

                作为一个客户端连接过来,那么MySQL里面一定有while循环获取连接,MySQL底层用的是多线程。所以MySQL收到了对应的连接之后,一定要将连接拿上来,可是有的连接是好的,有的连接又是坏的,有的连接上面有非法请求……。所以MySQL在连接这里需要做一些连接管理,比如长时间连接却不访问,于是便要将连接关掉。再比如说连接连接起来之前,需要做鉴权,先认识你这个用户,看你这个用户是不是一个合法的用户(输密码……)

        2、服务层:在MySQL数据库系统处理底层数据之前的所有工作都是在这一层完成的,包括权限判断、SQL接口、SQL解析、SQL分析优化、缓存查询的处理以及部分内置函数执行等。各个存储引擎提供的功能都集中在这一层,如存储过程、触发器、试图等。

        3、存储引擎层:说直白点就是真正办事的由多种可拔插的存储引擎共同组成,真正负责MySQL中数据的存储和提取,每个存储引擎都有自己的优点和缺陷,服务层是通过存储引擎API来与它们交互的。将数据存储在裸设备的文件系统之上,完成存储引擎的交互。

        其实没有到磁盘,因为MySQL实际上是一个在Linux操作系统上跑的软件,所以其不能让MySQL直接访问磁盘,它是通过操作系统的结构实现的。

站在操作系统的角度去理解:

SQL分类

SQL语句可分为如下三类:

  • DDL【data definition language】数据定义语言,用来维护存储数据的结构 -- 对数据库和表结构更多的是属性控制
    • 代表指令:create, drop, alter
  • DML【data manipulation language】数据操纵语言,用来对数据进行操作 -- 对数据库和表结构更多的是数据内容的操作
    • 代表指令:insert,delete,update
  • DCL【Data Control Language】数据控制语言,主要负责权限管理和事务 -- 对整个MySQL的系统安全和账户管理工作 -- 保证MySQL主动和被动下都是比较可靠的。
    • 代表指令:grant,revoke,commit

        数据库有一个特点,它与一般的服务的是不一样的,一般的服务被请求,最多就是影响一下连接,恶意的无非就是消耗连接 / 利用服务器漏洞做一些非法入侵操作。数据库不一样,数据库内存储的是大量的用户数据,一旦出现了安全问题 / 泄露问题就极有可能对用户造成损失。

        所以数据库需要完成基本的功能要求(DDL 与 DML),还要一方防止数据库无意的出现问题,另一方面更要防止有意的出现问题,所以数据库还要有一个既不对数据库 / 表结构做属性操作,有不对内容做操作,而是它有时候需要对:用户的合法性、用户的权限控制(负责主动发起攻击的恶意用户)……

#: DML中又单独分了一个DQL,数据查询语言,代表指令: select

存储引擎

存储引擎

        存储引擎:数据库管理系统如何存储数据、如何为存储的数据建立索引和如何更新、查询数据等技术的实现方法。

融汇贯通的理解:

        引擎:就像一辆的汽车的动力引擎 -- 发动机,在一辆汽车的整个动力中,主要都是围绕发动机进行展开的工作。

        即,在一整个系统当中,真正给系统提供主要问题的 - 引擎

MySQL的核心就是插件式存储引擎,支持多种存储引擎。  

查看存储引擎

        输入:show engines;

此处默认支持的存储引擎:

        这是本人在/etc/my.cnf的配置文件内配置的。

        这个意义就是:MySQL有多种存储引擎,然后默认我选择innodbinnodb:MySQL被并发访问的时候的并发情况和数据的安全处理情况的工作做的比较好。

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

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

相关文章

从零开始Vue3+Element Plus后台管理系统(七)——手写一个简单的多页签组件

以前都是用别人现成的多页签组件,自己也想尝试下做个Vue3的版本,目前还只有基本功能,慢慢完善。 主要思路 使用 Pinia 记录页签数据、处理操作初始状态没有页签数据,使用默认路由数据填充右击页签,显示更多关闭操作…

移动云与启明星辰联合发布移动云|星辰安全品牌

数字中国时代,企业数字化转型不断深化,云安全市场发展持续高增,其安全更需自主可控、全程可信。基于此,移动云和启明星辰共同打造移动云|星辰安全品牌,聚力协行共筑安全云的压舱石,携手共塑中国云安全产业发…

原神服务器服务端多人联机教程

原神服务器服务端多人联机教程 大家好,我是艾西在上一篇文章中我们说了win系统服务器怎么搭建原神服务端,在最后结尾时有带一嘴怎么改为多人联机但不是很详细。哪么这篇文章艾西会给小伙伴们说清楚原神服务端怎么改为多人联机,毕竟玩游戏肯定…

MySQL高级语句(一)

一、SQL高级语句 1、 SELECT 显示表格中一个或数个栏位的所有资料 语法:SELECT "字段" FROM "表名"; select * from test1; select name from test1; select name,sex from test1;2、DISTINCT 不显示重复的内容 语法:SELECT D…

pdf怎么转换成ppt?4种方法1分钟处理

​ pdf怎么转换成ppt?在日常的办公中,经常需要进行PDF文件格式的转换。例如,我们从互联网上下载的许多资料都是以PDF格式保存的。此外,在使用Microsoft Office时,有些用户需要将Word文档转换为PDF格式&#xff0…

MySQL的概念、编译安装,以及自动补全

一.数据库的基本概念 1、数据(Data) • 描述事物的符号记录 • 包括数字,文字,图形,图像,声音,档案记录等 • 以“记录”形式按统一的格式进行存储 2、表 • 将不同的记录组织在一起 • …

JavaWeb08(MVC应用02[家居商城]连接数据库)

目录 一.绑定分类 1.1 效果预览 1.2 代码实现 ①底层代码 ②前端代码 二.绑定所有商品 2.1 效果预览 2.2.代码实现 ①底层代码 ②前端代码 三.分类查询 3.1效果预览 3.2代码实现 ①底层代码 ②前端代码 四.模糊查询 4.1 效果预览 4.2代码实现 ①底层代码 ②前…

一图看懂 zipp 模块:ZipFile 的一些兼容子类和补充接口,资料整理+笔记(大全)

本文由 大侠(AhcaoZhu)原创,转载请声明。 链接: https://blog.csdn.net/Ahcao2008 一图看懂 zipp 模块:ZipFile 的一些兼容子类和补充接口,资料整理笔记(大全) 🧊摘要🧊模块图🧊类关…

直观理解torch.gather函数(带图)

直观理解torch.gather函数 1. gather的作用 因为深度学习里面,像分类或者分割,有时候去进行loss计算或准确度计算的时候,需要挑选某个维度特定的值,所以有了这么个函数。注意不要高估这个函数的能力,这个函数只是在指…

大数据技术之Sqoop

第1章 Sqoop简介 Sqoop是一款开源的工具,主要用于在Hadoop(Hive)与传统的数据库(mysql、postgresql…)间进行数据的传递,可以将一个关系型数据库(例如 : MySQL ,Oracle ,Postgres等)中的数据导进到Hadoop的HDFS中&…

破案小说中的《人月神话》和女装

DDD领域驱动设计批评文集>> 《软件方法》强化自测题集>> 《软件方法》各章合集>> 在破案小说《谁是凶手》中,《人月神话》、《程序员修炼之道》以及女装作为素材出现了。 成功学(鸡汤学)书籍《用所有的存在与世界相会》…

如何制定一套有效的期货交易系统策略?

期货交易是一项全球性的金融交易,对于投资者来说,制定有效的期货交易系统策略是至关重要的。在制定期货交易策略时,需要考虑市场趋势、资产种类、交易成本、仓位控制等多个方面。 很多刚进入期货市场的朋友,甚至很多做了很久期货…

JS代码优化——逻辑判断

文章目录 JavaScript 语法篇嵌套层级优化多条件分支的优化处理使用数组新特性简化逻辑判断**多条件判断****判断数组中是否所有项都满足某条件****判断数组中是否有某一项满足条件** **函数默认值**使用默认参数使用解构与默认参数复杂数据解构 策略模式优化分支逻辑处理 JavaS…

Mars3d实现加载gif动图

官网有相关示例参考:功能示例(Vue版) | Mars3D三维可视化平台 | 火星科技 功能示例(Vue版) | Mars3D三维可视化平台 | 火星科技 方式1: // [终点]绘制台风当前位置gif点 const gifGraphic new mars3d.graphic.DivGraphic({ position: [endItem.lon, e…

【人力资源管理】第3集 免费开源ERP: Odoo 16 hr_holidays管理员工休假和缺勤 构建一体化企业人力资源管理

文章目录 前言一、管理员工休假二、批准或者拒绝休假申请三 、简单报表工具四 、使用功能1.管理休假申请2.报告 总结 前言 管理员工休假和缺勤。 一、管理员工休假 跟踪所有员工的假期 跟踪每位员工的休假天数。员工输入请求,经理对请求进行审批和验证&#xff0…

MYSQL-数据库管理.3(用户管理及用户权限)

一、关系型数据库 数据结构 二维表格 库 -> 表 -> 列(字段):用来描述对象的一个属性 行(记录):用来描述一个对象的信息 二、非关系型数…

能成事的表达笔记

为什么需要好的沟通? 一.让自己舒服 二.让别人乐意 愿意听听得懂听完愿意配合你 共赢 沟通是思维和视角的改变 向上沟通 (领导,客户) 是最高效的职场成长路径 痛点: 出于恐惧而挖掘不到真实的需求 一味听从权威…

spring项目里的大事务优化

编程型事务更加灵活 声明式事务只需要加在方法头加Transactional注解即可开启事务,但是还是不太灵活,意味着整个方法所进行对数据库操作都要加进事务,当然一次查询也要进入事务,这并不是我们想要的,我们在update、ins…

电容笔和触控笔哪个好用?2023平价好用的电容笔测评

其实,许多产品各有特色,有的注重外观,而有的注重功能。ipad上的那支笔也是如此的。所以,购买电容笔的时候,必须对电容笔有充分的了解。在选购前,必须了解各种类型的电容笔,以决定选购何种电容笔…

ASEMI代理LTC3309AEV#TRMPBF原装ADI车规级LTC3309AEV#TRMPBF

编辑:ll ASEMI代理LTC3309AEV#TRMPBF原装ADI车规级LTC3309AEV#TRMPBF 型号:LTC3309AEV#TRMPBF 品牌:ADI /亚德诺 封装:LQFN-12 批号:2023 安装类型:表面贴装型 引脚数量:12 工作温度:-4…