当前位置: 首页 > news >正文

数据库知识全解析:从基础概念到MySQL实战

1. 数据库概念

1.1 什么是数据库

数据库是按照特定数据结构组织、存储和管理数据的仓库,它是一个长期存储在计算机中、有组织且可共享的数据集合。虽然我们可以将数据直接存储在文件中以实现长期保存,但文件系统在数据管理方面存在诸多不足。

文件存储的弊端如下:

  • 安全性差:数据容易被随意修改,易引发误操作。
  • 查询困难:对于大型文件,如几个GB的文档,要快速查找特定字段,需先读取文件再遍历,效率极低。
  • 海量数据处理不便:数据量过大时,文件体积会急剧膨胀。
  • 程序控制繁琐:读取文件数据需借助文件流,操作复杂。

相比之下,数据库具有简单、高效、可靠的数据管理特性。它采用客户端(Client)-服务器(Server)模式,属于基于CS模式的网络服务用户只需通过客户端向服务器发送SQL语句,即可获取结果,十分便捷。以MySQL为例,安装后启动的mysqld就是服务器,登录MySQL实际上就是登录客户端。其中,mysqld中的“d”代表daemon(守护进程),这是一种特殊的进程,其父进程为1号进程(系统进程),无需依赖bash进程,可直接在后台运行,从而实现持续运行。可以说,MySQL是由客户端、服务器和磁盘共同组成的服务体系。

1.2 数据库存储介质

MySQL数据库将数据存储在磁盘中,属于磁盘数据库。磁盘数据库在持久化保存方面具有明显优势,但会增加IO次数。为提高存储效率,它拥有自身的缓存机制,即高效IO。

除了磁盘数据库,还有内存数据库(又称主存数据库),如Redis内存数据库将数据存储在内存中,其最大优点是数据读写速度极快,可显著提高操作效率。不过,内存数据库并非完全不使用磁盘。例如,数据库的启动信息和初始数据需存储在磁盘中,而涉及操作的数据则存储在内存中进行直接运算。为防止数据丢失,内存数据库通常会定期将数据转存到磁盘,以确保持久化存储。磁盘数据库和内存数据库都是数据库管理系统的存储方式,各有特点和适用场景。

1.3 常见数据库

以下是几种常见的数据库:

  • SQL Server:微软的产品,深受.Net开发者喜爱,适用于中大型项目开发。
  • Oracle:甲骨文公司推出的产品,适合大型项目或具有复杂逻辑的项目,但并发性能一般不如MySQL。
  • MySQL:由瑞典公司MySQL AB开发,是世界上最受欢迎的数据库之一,并发性能好,对简单SQL处理效果好,适用于电商、SNS、论坛等项目开发,后被甲骨文公司收购。其风靡全球的重要原因之一是免费,深受广大开发者喜爱。
  • PostgreSQL:起源于加州大学伯克利分校的计算机科学系,是一个独立、开源的数据库管理系统,由全球志愿者开发和维护,无论是私用、商用还是学术研究,都可免费使用、修改和分发。
  • SQLite:由Dwayne Richard Hipp于2000年创建,是一种轻量级、嵌入式的关系型数据库,遵循ACID原则(原子性、一致性、隔离性、持久性),占用资源极低,仅需几百KB,广泛用于移动应用、嵌入式系统、桌面应用、Web浏览器、游戏等各种应用程序中。
  • H2:一种由纯Java编写的轻量级嵌入式关系型数据库管理系统,以嵌入式库的形式存在,适用于Java应用程序的内部嵌入。虽然它不适用于大规模或高并发的生产数据库,但对于小型项目和原型开发非常有用。

2. 数据库基本操作

2.1 连接数据库

连接数据库前,需确保MySQL服务已启动。连接数据库的命令如下:

mysql -u 用户 -p -h IP地址 -P 端口

其中:

  • “-u”后跟想要登录MySQL的用户名,如root。
  • “-p”表示使用密码登录,可紧跟密码,也可回车后输入。
  • “-h”表示MySQL服务部署机器的IP地址。
  • “-P”表示MySQL服务进程所使用的端口号。

若直接在云服务器中登录,可不指定“-h”和“-P”,且当前只有一个root用户时,只需执行以下命令即可连接数据库:

mysql -u root -p

入密码后,若出现“mysql>”,则表示登录成功

2.2 使用数据库

  • 查看数据库:查看当前MySQL系统中有哪些数据库,可使用以下命令:
mysql> show databases;

注:Test是之前创建的数据库,其他数据属于系统数据库,不可删除。

  • 创建数据库:创建一个名为DataBase1的数据库,命令如下:
mysql> create database DataBase1;

MySQL运行所产生的数据都存储在/var/lib/mysql目录中,新建一个数据库,实际就是在mysql目录中新建一个目录(文件夹)。查看此目录需先退出MySQL(直接输入“quit”退出),且因是系统级文件,需借助root身份才能查看,命令如下:

ll /var/lib/mysql

  • 使用数据库:MySQL中有多个数据库,在进行建表、查询等操作前,需先指明使用哪一个数据库,命令如下:
mysql> use DataBase1;

执行指令后,可通过函数判断是否成功,命令如下:

mysql> select database();

结果显示正常,证明当前正在使用DataBase1数据库。

  • 创建表:创建一张表T1,包含序号、姓名两个列属性,命令如下:
mysql> create table T1
(
id int,
name varchar(32)
);

创建表后,可查看表的详细信息,同时验证表是否已创建成功,命令如下:

mysql> desc T1;

表结构中有很多属性,现在可先不用管具体含义,只需知道当前存在一个int和varchar类型的字段即可。若想进行清屏操作,可使用“system clear”命令,命令如下:

mysql> system clear

创建表的本质也是创建文件,可进入之前的目录,具体进入DataBase1目录,能看到该目录下确实多了一个名为T1的相关文件,命令如下:

ll /var/lib/mysql/DataBase1

至于这两个文件具体是什么,需结合存储引擎来理解。

  • 插入数据:有了表结构后,可向表中插入部分数据。注意,插入的数据格式要与表的格式对应,不能向不存在的字段中插入数据。现在直接进行全列插入,即插入序号、姓名两个信息,命令如下:
mysql> insert into T1 values (1, '张三');
mysql> insert into T1 values (2, '李四');
mysql> insert into T1 values (3, '王五');

在MySQL中,执行指令后出现“Query OK”表示指令执行成功,若出现其他提示信息,大概率是语法问题,需检查插入数据格式、标点符号是否正确。

  • 查询数据:查询T1表中已经插入的数据,命令如下:
mysql> select * from T1;

可以看到数据已成功插入T1表中。创建数据库、创建表、插入数据、查询数据已覆盖绝大多数业务场景,但实际并非如此简单。例如,表结构需慎重创建,符合三大范式;查询数据时,需配合各种筛选条件进行查询,如where子句、聚合条件、多表查询等;MySQL中还提供了高效的数据管理机制,如索引、事务、权限管理,具体细节需慢慢学习。

2.3 服务器、数据库、表关系

在使用MySQL时,执行结果总是以行、列形式呈现,这是因为行列构成表,而MySQL中一切皆为表。这种行列式结构最大的优点是直观,便于快速查看数据信息。其中,行代表数据信息,列代表数据属性。

与之前MySQL知识进行串联,可得出结论:用户登录客户端,向服务器发出指令,创建数据库的本质是创建目录(文件夹),创建表的本质是在数据库中创建文件,插入数据就是往文件中写入数据,查询结果时以行列式呈现,表是MySQL中最常见、最常用的结构。一个数据库中不只存在一张表,SQL指令执行结果也可看作一张表。

3. MySQL语句分类

MySQL中的语句可分为三类:

  • DDL(数据定义语句):用于维护存储数据的结构,常用于对数据库、表进行操作。
  • DML(数据操纵语句):用于对数据进行操作,如对表中的数据进行增删改查。其中还细分出一个DQL(数据查询语句),例如查询时携带的各种条件。
  • DCL(数据控制语句):主要负责权限和事务的管理,可给用户赋予数据库的权限。

4. MySQL架构

MySQL是一个可移植的数据库,可在几乎所有操作系统上运行,但主要在Linux类似的服务器后端中运行。得益于优秀的分层设计,MySQL能保证在各个平台运行时,物理体系结构的一致性。大体可分为三层:

  • 第一层:解决安全和连接管理问题。
  • 第二层:进行词法、语法分析以及SQL语句优化。
  • 第三层:完成数据的存储方案。

5. 存储引擎

存储引擎是数据库系统如何存储数据、为存储的数据建立索引和更新、查询数据等技术的实现方法。MySQL的核心是插件式存储引擎,支持多种存储引擎。

5.1 查看存储引擎

MySQL中可选择使用不同的存储引擎,不同存储引擎的效果不同,可理解为汽车引擎,V6、水平对置、W12、转子马达之间存在差异。查看当前支持哪些存储引擎,可使用以下命令:

mysql> show engines;

若觉得不方便查看,可输入“mysql> show engines \G;”表示格式化显示。当前MySQL支持的存储引擎有很多,可查看创建数据库时默认使用的存储引擎,查看配置文件“vim /etc/my.cnf”即可。这其实就是当时配置my.cnf时指定的存储引擎InnoDB,也是MySQL中常用的存储引擎之一。也可在表创建成功后,查看使用了哪个引擎,命令如下:

mysql> show create table T1;

创建表时,若不指定,就使用my.cnf中的默认存储引擎;若指定了,就使用用户指定的存储引擎,可根据实际业务场景决定,非常灵活。

5.2 存储引擎间的区别

存储引擎事务支持ACID兼容性锁定级别数据表类型支持的索引类型外键约束全文搜索备注
InnoDB行级锁事务表B+Tree、全文MySQL默认存储引擎,适用于事务处理
MRG_MYISAM表级锁非事务表BTree合并(合并式)存储引擎,不常用
MEMORY表级锁临时表哈希表将数据存储在内存中,适用于临时数据
BLACKHOLE表级锁非事务表黑洞存储引擎,丢弃所有写入数据
MyISAM表级锁非事务表BTree、全文早期MySQL默认存储引擎,性能较快
CSV表级锁非事务表存储数据以逗号分隔值(CSV)格式
ARCHIVE表级锁非事务表用于存储归档数据,数据压缩比较高
PERFORMANCE_SCHEMA无锁定系统表用于性能监控和分析系统性能
FEDERATED表级锁非事务表用于访问远程数据库的存储引擎

存储引擎有很多,主要记住两个即可:InnoDB和MyISAM。这两个数据库几乎覆盖了80%的业务场景,它们之间的区别很简单:InnoDB适合需要事务支持、数据完整性和高并发性能的应用;MyISAM可能适用于只读数据、全文搜索或特定用途的应用。

http://www.dtcms.com/a/490714.html

相关文章:

  • Python - 100天从新手到大师:第五十七天获取网络资源及解析HTML页面
  • PLY文件格式讲解与可视化展现方式(基于Viser库)
  • 中山百度网站排名织梦播放器网站
  • 珠海建站网站兰州模板网站seo价格
  • jQuery面试题精选:从基础到高级
  • 计算机操作系统:死锁概述
  • C++之理解共用体
  • Java Spring配置
  • 【多进线程】python多进线程与通信
  • 低代码新建表单实操:纯表单 / 列表表单配置 + 表名避坑
  • 前端做数据表格的网站网站建设与运营市场风险
  • 从入门到精通:深度探索RT-Thread物联网操作系统
  • GPUStack:开源GPU集群管理工具,解锁AI模型高效运行新可能
  • LeetCode算法日记 - Day 74: 按摩师、打家劫舍II
  • centos离线包获取-附centos7主流离线包资源
  • 电子商务网站建设哪好网站内链建设
  • 网站建设的主题软媒win7优化大师
  • 人力网站建设的建议软文平台发布
  • 【35】MFC入门到精通——MFC运行 不显示对话框 MFC界面不显示
  • 开源 C++ QT QML 开发(二十一)多媒体--视频播放
  • PMBT2222A,215 开关晶体管功率二极管 NXP安世半导体 音频放大电路 LED驱动 应用
  • 大语言模型(LLM)入门笔记:嵌入向量与位置信息
  • 网站设计济南做网站的一定要开80或8080端口
  • 【Spring Boot从入门到精通】原理、实战与最佳实践
  • uni-app 入门学习教程,从入门到精通,uni-app 基础知识详解 (2)
  • Pyspark分布式访问NebulaGraph图数据库
  • FPGA----petalinux的Ubuntu文件系统移植
  • 宜昌网站建设厂家wordpress 扁担
  • TensorFlow2 Python深度学习 - 卷积神经网络示例2-使用Fashion MNIST识别时装示例
  • Eureka: Human-Level Reward Design via Coding Large Language Models 译读笔记