MySQL数据库入门(概念+使用)

目录

1. 数据库的概念

1.1 数据库的存储介质

1.2 主流数据库

2. MySQL的基本使用

2.1 链接数据库

2.2 服务器管理

2.3 数据库,服务器和表关系

2.4 简单MySQL语句

3. MySQL架构

4. SQL分类

5. 存储引擎

本篇完。


1. 数据库的概念

        数据库是按照数据结构来组织、存储和管理数据的仓库,是一个长期存储在计算机内的、有组织的、可共享的、统一管理的大量数据的集合。

数据库的水平是衡量一个程序员水平的重要指标

虽然使用文件也可以存储数据,但会存在如下缺点:

  • 安全性问题:数据误操作后无法进行回滚。
  • 不利于数据的查询和管理:没有将存储的数据以某种数据结构组织起来。
  • 控制不方便:数据的控制需要用户自己来完成。
  • 不利于存储海量数据:数据量越大用户操控数据的成本越高。

为了解决上述问题,于是专家们设计出了更利于管理数据的数据库。

        数据库是分为数据库服务器和数据库客户端的,以MySQL数据库为例,我们使用MySQL数据库时会先通过MySQL命令连接MySQL服务器。

        MySQL服务器本质是一个网络服务器,我们使用mysql命令连接MySQL服务器时,本质就是MySQL客户端在向MySQL服务器发起连接请求,连接建立成功后MySQL客户端就会将用户输入的SQL语句发送给MySQL服务器,之后MySQL服务器就会根据SQL语句对数据进行对应的操作。


1.1 数据库的存储介质

数据库的存储介质有以下两种:

  • 磁盘,比如MySQL就是一种磁盘数据库。
  • 内存,比如redis就是一种内存数据库。

        数据库按存储介质可以分为磁盘数据库和内存数据库,其中内存数据库又称为主存数据库(Main Memory Database)。
        磁盘数据库的数据主要存储在磁盘上,因此磁盘数据库在数据的持久化保存上有明显优势。但磁盘数据库为了提高数据的存储效率,也有自己对应的缓存机制,因此在某一个时刻之内,不一定所有数据都会被刷新到磁盘上。
        内存数据库的数据主要存储在内存中,与磁盘数据库相比,内存数据库可以大大提高读取速度,减少数据库的访问时间。但内存数据库并非完全不使用磁盘,数据库的启动信息、初始数据等还是需要存储在磁盘上的,只是数据主要在内存中进行存储和运算。
        由于内存数据库的数据存储在内存中,数据库主机掉电后数据就会丢失,因此在数据库服务关闭前通常需要把内存中的数据转储到磁盘上,甚至在内存数据库运行期间,一些数据也会持久化到磁盘存储。

1.2 主流数据库

列举几个主流的数据库:

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

MySQL是世界上最受欢迎的数据库,所以这里学习的也是MySQL。


2. MySQL的基本使用

2.1 链接数据库

安装好数据库之后在CentOS 7登录我们Linux的root用户,输出以下命令:

mysql -h 127.0.0.1 -P 3306 -u root -p

  • -h: 表示你要连接的MySQL服务器所在的主机,127.0.0.1表示本主机。
  • -P: 表示你要连接的MySQL服务器所对应的端口号,一般默认是3306。
  • -u: 表示用哪一个用户连接MySQL服务器,root表示超级用户。
  • -p: 表示该用户对应的密码,密码可以直接跟在-p后面,也可以回车后输入。

        输入密码后就能连接到MySQL服务器了,免密码的话回车即可。连接到MySQL服务器后,就可以输入各种SQL语句让服务器执行了,当要退出MySQL时直接输入quit或exit或\q即可。


2.2 服务器管理

通过systemctl stop mysqld命令或service mysqld stop命令可以停止MySQL服务器。

通过systemctl start mysqld命令或service mysqld start命令可以启动MySQL服务器。

通过systemctl restart mysqld命令或service mysqld restart命令可以重启MySQL服务器。

mysqld就是MySQL的服务器(mysql是服务端),使用mysql命令实际就是在连接mysqld服务器。


2.3 数据库,服务器和表关系

        安装数据库服务器,只是在机器上安装了一个数据库管理系统程序,这个管理程序可以管理多个数据库,一般开发人员会针对每一个应用创建一个数据库。

为保存应用中实体的数据,一般会在数据库中创建多个表,以保存程序中实体的数据。

数据库服务器、数据库和表的关系如下:

  • 图中的Client对应的就是mysql命令,MySQL对应的就是mysqld服务。
  • DB(database)表示的是mysqld管理的多个数据库,而每一个DB下会包含多张表。

        通过MySQL创建的数据库和各种表结构,最终会以文件的形式存储下来,通过查看MySQL的配置文件中的datadir可以得知数据文件的存储路径。

        比如我的MySQL配置文件的绝对路径为/etc/my.cnf,配置文件中datadir对应的值为/var/lib/mysql。输入vim /etc/my.cnf如下:

(中间小绿框那三行配置是我自己加上去的,大家也可以加上去然后:wq保存退出。第一行为端口号,可以修改,但此时已经设置成默认值3306。第二行是默认字符utf-8,第三行是存储引擎innodb)

        将来MySQL创建的数据库文件都会存储在该目录下,可以看到该目录下有很多MySQL相关的数据文件。先cd /var/lib/mysql 然后 ls:

        重新输入mysql -h 127.0.0.1 -P 3306 -u root -p连接MySQL服务器后,通过create语句创建一个名为helloworld的数据库。

2.4 简单MySQL语句

(下面简单使用一下MySQL语句演示一下数据库,服务器和表关系,后面还会讲解语句)

这时/var/lib/mysql目录下,就会多出一个名为helloworld的目录。如下:

(这里可以开两个窗口)

        目前helloworld目录下只有一个名为的db.opt的文件,该文件中指明了当前数据库的默认字符编码和字符校验规则。如下:

        因此我们创建数据库时,本质就是在MySQL的数据存储路径下新建了一个目录,而当我们将这个数据库删除后,这个目录其实也就不存在了。比如:

        此时在MySQL的数据存储路径下的helloworld目录也就不存在了,因此删除数据库本质就是删除数据存储路径下对应的目录。

        使用数据库之前,可以先通过show语句查看当前都有哪些数据库,然后再通过use语句使用指定的数据库。比如:

使用数据库可以理解成是使用cd命令进入到该数据库对应的目录当中。


对数据库表操作:

这里我们通过create语句创建一个简单的student表。比如:

通过show语句可以查看创建的student表结构:

        由于student表采用的存储引擎是InnoDB,因此在MySQL的数据存储路径下的helloworld目录下,就会多出两个文件,分别是student.frm和student.ibd。如下:

        其中student.frm是表结构文件,student.ibd是表数据和索引的文件。如果说创建数据库的本质是在数据存储路径下新建一个目录的话,那么创建表本质实际就是在特定的数据库目录下新建若干个文件(InnoDB存储引擎对应的是两个,MyISAM存储引擎对应的是三个),因此在创建表之前一定要先选择一个数据库。

通过desc语句可以查看对应的表结构:

通过insert语句可以向表中插入数据:

通过select语句可以查看表中的数据:

        表中的数据是以二维表格的形式进行呈现的,包括行和列。其中每一行我们称之为一条记录,而每一列都代表一个属性(属性列)。


3. MySQL架构

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

MySQL的架构设计如下:

MySQL架构主要可分为如下四层:

  • 连接层:主要完成一些类似连接处理,授权认证及相关的安全方案。
  • 服务层:在MySQL数据库系统处理底层数据之前的所有工作都是在这一层完成的,包括权限判断、SQL接口、SQL解析、SQL分析优化、缓存查询的处理以及部分内置函数执行等。各个存储引擎提供的功能都集中在这一层,如存储过程、触发器、试图等。
  • 引擎层:由多种可拔插的存储引擎共同组成,真正负责MySQL中数据的存储和提取,每个存储引擎都有自己的优点和缺陷,服务层是通过存储引擎API来与它们交互的。
  • 存储层:将数据存储在裸设备的文件系统之上,完成存储引擎的交互。

MySQL服务器会收到MySQL客户端发来的SQL语句,并根据SQL语句执行对应的操作。

        这里的MySQL客户端不仅仅指的是连接MySQL时使用的mysql命令,MySQL客户端还包括语言接口客户端。

        MySQL给各种语言提供的用于访问数据库的接口,用户通过调用这些接口也可以向MySQL服务器发送SQL语句。

        mysql命令本质是一个可执行程序,通过file命令可以看到该可执行程序是采用动态链接的方式生成的,通过ldd命令可以看到该可执行程序依赖的C/C++库文件。如下:

        也就是说,mysql命令本身就是C/C++编写的,因此在编写mysql程序时,一定需要调用MySQL提供给C/C++的语言接口客户端。当然,MySQL不仅仅提供了C/C++对应的语言接口,像Python、Java、PHP等都有对应的MySQL接口。


4. SQL分类

SQL(Structured Query Language,结构化查询语言)是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。

SQL语句可分为如下三类:

  • DDL(Data Definition Language)数据定义语言,用来维护存储数据的结构。比如create语句、drop语句、alter语句等。
  • DML(Data Manipulation Language)数据操作语言,用来对数据进行操作。比如insert语句、delete语句、update语句等。
  • DCL(Data Control Language)数据控制语言,主要负责权限管理和事务。比如grant语句、revoke语句、commit语句。

注: DML中又单独分了一个DQL(Data Query Language)数据查询语言,比如select语句、from语句、where语句等。


5. 存储引擎

        存储引擎就是数据库管理系统如何存储数据、如何为存储的数据建立索引、如何更新数据、如何查询数据等技术的实现方法,MySQL中的存储引擎是插件式的存储引擎,它可以支持多种存储引擎。

通过show语句可以查看MySQL支持的存储引擎。比如:

其中MySQL底层默认使用的存储引擎是InnoDB,该存储引擎支持事务、行级锁、外键等。

各个存储引擎对比如下:


本篇完。

下一篇讲讲MySQL操作库的使用,增删查改等。

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

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

相关文章

【CSS】页面自适应屏幕宽度(响应式布局媒体查询-@media、弹性布局、网格布局和相对单位-vh/em/%)

【CSS】页面自适应屏幕宽度(响应式布局媒体查询-media、弹性布局、网格布局和相对单位-vh/em/%) 一、媒体查询(media)1、媒体类型2、媒体特征3、媒体查询语法4、示例(1)示例1(2)示例…

leetcode热题100.二叉树中的最大路径和

Problem: 124. 二叉树中的最大路径和 文章目录 题目解题方法复杂度Code 题目 二叉树中的 路径 被定义为一条节点序列,序列中每对相邻节点之间都存在一条边。同一个节点在一条路径序列中 至多出现一次 。该路径 至少包含一个 节点,且不一定经过根节点。 …

pytorch_car_caring 排坑记录

pytorch_car_caring 排坑记录 任务踩坑回顾简单环境问题代码版本问题症状描述解决方法 cuda问题(异步问题)症状描述解决方法 任务 因为之前那个MPC代码跑出来的效果不理想,看了一天代码,大概看明白了,但要做改进还要有…

C语言指针学习 之 指针是什么

前言 指针是C语言中一个重要概念,也是C语言的一个重要特色,正确而灵活地运用指针可以使程序简洁、紧凑、高效。每一个学习和使用C语言的人都应当深入的学习和掌握指针,也可以说不掌握指针就没有掌握C语言的精华。 一、什么是指针 想弄清楚什…

末世智能毁灭机械

在一个遥远的星球上,AI和机器人在末世中扮演着重要角色。由于一场毁灭性的灾难,人类文明几乎被彻底毁灭,幸存者被迫在废土中艰难求生。为了重建家园,人类和机器人联手,利用智能机械技术开始了重建工作。 然而&#xff…

应用层协议 ——— HTTP协议

应用层协议 ——— HTTP协议 HTTP简介认识URL二、登录信息三、服务器地址四、服务器端口号五、带层次的文件路径六、查询字符串七、片段标识符urlencode和urldecodeHTTP协议格式HTTP请求协议格式HTTP的方法HTTP的状态码HTTP常见的HeaderHTTPS VS HTTP对称加密 VS 非对称加密 HT…

Stable diffusion使用和操作流程

Stable Diffusion是一个文本到图像的潜在扩散模型,由CompVis、Stability AI和LAION的研究人员和工程师创建。它使用来自LAION-5B数据库子集的512x512图像进行训练。使用这个模型,可以生成包括人脸在内的任何图像,因为有开源的预训练模型,所以我们也可以在自己的机器上运行它…

Java工具类库Hutool

这里写目录标题 一、简介二、包含组件三、常用功能演示2、时间工具DateUtil3、数字类工具NumberUtil4、身份认证工具IdcardUtil5、信息脱敏工具DesensitizedUtil6、字段校验工具Validator7、集合工具类CollStreamUtil 一、简介 Hutool是一个小而全的Java工具类库,通…

类与对象

面向对象的程序设计 面对对象的程序 类 类 .... 类 设计程序的过程,就是设计类的过程。 面对对象的程序设计方法: 1.将某类客观事物共同特点(属性)归纳出来,形成一个数据结构(可以用多个变量描述…

定义HarmonyOS IDL接口

HarmonyOS IDL简介 HarmonyOS Interface Definition Language(简称HarmonyOS IDL)是HarmonyOS的接口描述语言。HarmonyOS IDL与其他接口语言类似,通过HarmonyOS IDL定义客户端与服务端均认可的编程接口,可以实现在二者间的跨进程…

SpringBoot+Vue实现各种文件预览(附源码)

👨‍💻作者简介:在笑大学牲 🎟️个人主页:无所谓^_^ ps:点赞是免费的,却可以让写博客的作者开心好几天😎 项目运行效果 前言 在做项目时,文件的上传和预览必不可少。继上…

数字化转型:企业适应新常态的关键之举_光点科技

在全球商业环境不断演变和技术日新月异的背景下,数字化转型已经成为企业不可回避的课题。它不仅关乎企业的未来生存与发展,更是适应新常态、提升竞争力的关键之举。但是,数字化转型并非一夜之间可以完成的任务,它需要全面的策略规…

nosql数据库期末考试知识点总结

目录 1、什么是nosql数据库,它包括哪些 文档数据库 建数据 哪一种是最简单的 2、什么是文档数据库 3、创建mongodb时默认会建造三个数据库,是哪三个 4、mongodb支持的数据类型有哪些 5、它的常规语句有哪些 6、副本集和分片集有什么作用 复制 …

linux中vim的操作

(码字不易,关注一下吧w~~w) 命令模式: 当我们按下esc键时,我们会进入命令模式;当使用vi打开一个文件时也是进入命令模式。 光标移动: 1 保存退出:ZZ 2 代码格式化:ggG 3 光标移动&#xff…

JSP和JSTL板块:第一节 JSP追根溯源 来自【汤米尼克的JAVAEE全套教程专栏】

板块一 JSP和JSTL:第一节 JSP主要内容 一、什么是JSP二、IDEA的JSP相关配置1.UTF-8编码2.JSP代码模板 三、JSP的底层是Servlet四、Jsp的注释1.显式注释2.隐式注释 五、Scriptlet : 写在Jsp里的java脚本段 一、什么是JSP JSP: Java Server Page。SUN 公司提供的动态…

查询、导入导出、统计性能优化的一些总结

目录 1、背景 2、优化实现 2.1查询数据表速度慢 2.2调别人接口速度慢 2.3导入速度慢、 2.4导出速度慢的做出介绍 2.5统计功能速度慢 3、总结 1、背景 系统上线后,被用户反应系统很多功能响应时长很慢。用户页面影响速度有要求,下面针对查询数据表…

【Leetcode】2670. 找出不同元素数目差数组

文章目录 题目思路代码结果 题目 题目链接 给你一个下标从 0 开始的数组 nums ,数组长度为 n 。 nums 的 不同元素数目差 数组可以用一个长度为 n 的数组 diff 表示,其中 diff[i] 等于前缀 nums[0, …, i] 中不同元素的数目 减去 后缀 nums[i 1, …, …

双非本科准备秋招(14.1)—— 力扣刷题

今天做两个有点难度的题。 1、295. 数据流的中位数 手写堆实现: 加入元素: 如何维护一个中位数?我们考虑一下堆的特点,大顶堆堆顶是一个最大值,小顶堆堆顶是一个最小值,那么,如果我们可以把数…

GitHub的使用操作

记得看目录哦! 1. 创建仓库2. 下载desktop3. 把创建的库克隆到本地4. 文件拷贝到本地仓库![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/7171ac6c4ca14e3b8d22717121f79c9e.png)5. 在网址后面加/compare进行比较6. 给系统添加功能 1. 创建仓库 2. 下载…