目录
-
- [前言 连接数据库](#前言 连接数据库)
- 一、数据库基础
-
- [1.1 什么是数据库?](#1.1 什么是数据库?)
- [1.2 使用案例](#1.2 使用案例)
- [1.3 主流数据库](#1.3 主流数据库)
- [1.4 服务器、数据库和表之间的关系](#1.4 服务器、数据库和表之间的关系)
- [1.5 MySQL 架构](#1.5 MySQL 架构)
- [1.6 SQL 的分类](#1.6 SQL 的分类)
- [1.7 存储引擎](#1.7 存储引擎)
-
- [MySQL 存储引擎对比表](#MySQL 存储引擎对比表)

个人主页:矢望
个人专栏:C++、Linux、C语言、数据结构、Coze-AI、MySQL
前言 连接数据库
命令mysql -h 127.0.0.1 -P 3306 -u root -p。如下图所示。

| 参数 | 含义 | 说明 |
|---|---|---|
mysql |
MySQL 客户端程序 |
用于连接 MySQL 服务器并执行 SQL 语句 |
-h 127.0.0.1 |
主机地址(host) |
127.0.0.1 是本地回环地址,表示连接本机上的 MySQL 服务器 |
-P 3306 |
端口号(port) |
MySQL 服务器的默认端口是 3306,这里显式指定 |
-u root |
用户名(user) |
使用 root 账户登录,这是 MySQL 的超级管理员账号 |
-p |
密码提示 | 表示需要输入密码,输入密码时不会显示字符(安全机制) |
如上表所示,-h选项指明登录部署了mysql服务的主机,-P指明我们要访问的端口号,-u指明登录用户,-p指明需要输入密码登录。
上面的命令可以简化成mysql -u root -p,这就默认使用当前主机,默认使用默认的端口号3306,登录。

想要退出mysql,输入quit即可。如下图所示。

上图中,我进入mysql时,它有一个类似于命令行的东西,这是因为我配置了MySQL客户端配置文件~/.my.cnf才这样的,默认是mysql>。
一、数据库基础
1.1 什么是数据库?
我们通过ps axj | grep mysqld,可以看到如下。

那么mysql和mysqld有什么区别呢?

mysql它是数据库服务的客户端,而mysqld它是数据库服务的服务器端。mysql的本质是基于CS(mysql mysqld)模式的一种网络服务。如下,它提供了服务的端口号。

mysql是一套给我们提供数据存取服务的网络程序。
数据库一般指的是在磁盘或者内存中存储的特定结构组织的数据,也就是将来在磁盘上存储的一套数据库方案。而数据库服务一般指的是mysqld。
存储数据用文件就可以了,为什么还要弄个数据库?
文件保存数据有以下几个缺点:文件存在安全性问题,文件不利于数据查询和管理,文件不利于存储海量数据,文件在程序中控制不方便。
一般的文件确实提供了数据的存储能力,但是文件并没有很好的数据内容管理能力,所以才需要有数据库。
数据库的本质就是对数据内容存储的一套解决方案,我们给它字段或者要求,数据库就会直接给我们返回结果。

数据库能力不仅是对一个工具的使用熟练度,更是对数据本质、系统架构、业务抽象的综合理解。数据库的水平是衡量一个程序员水平的重要指标。
1.2 使用案例
show databases;是 MySQL 中用于查看当前服务器上所有数据库的命令。
注意 :SQL 关键字(如 SHOW、DATABASES、SELECT、WHERE 等)是不区分大小写的。

如上就是当前所有数据库。
注意:在 MySQL 客户端中,SQL 语句必须以分号结尾,分号的作用是告诉客户端"语句结束,请执行"。MySQL 客户端允许输入多行语句,分号用于标识一条语句的结束,例如:
sql
mysql> SELECT
-> *
-> FROM
-> users
-> WHERE id = 1;
上面是一条SQL语句。
接下来我们创建数据库create database XXX;,创建名为XXX的数据库。

如上,这样就创建出了数据库。另外 /var/lib/mysql 是 MySQL 数据库服务器在 Linux 系统上的默认数据存储目录。
我们切换到右边,看看新建的数据库。

如上图,所以建立的数据库,本质就是Linux上的一个目录。
接下来,我们要在helloworld数据库中创建一个表student,在创建表之前我们需要先使用指定数据库,因为我们的数据库有很多。指令use helloworld;。create table XXX();用于创建表。

sql
CREATE TABLE student (
name varchar(35), -- 这一整行称为一个"列定义"
age int, -- age 是列名
gender varchar(2) -- gender 是列名
);
我们在右侧查询。

所以在数据库中创建表,本质就是在Linux下创建对应的文件,并且这个文件在创建的时候里面是有内容的。
在表中插入数据:INSERT INTO 表名 (列1, 列2, 列3, ...) VALUES (值1, 值2, 值3, ...);

查询表中的数据:select * from student;。

上面的工作是mysqld服务帮我们做的。数据库的本质也是文件,只不过这些文件不由程序员直接操作,而是由数据库服务帮我们进行操作。
system clear;用于在mysql客户端清屏。

表的数据存储逻辑结构是列和行,在关系型数据库中,表Table的逻辑结构是一个二维矩阵:
| 组成部分 | 说明 |
|---|---|
行Row |
也称为记录Record或元组Tuple,代表一个实体的一条完整数据 |
列Column |
也称为字段Field或属性Attribute,代表实体的某个特征或属性 |
1.3 主流数据库
| 数据库 | 开发商 | 适用场景 | 核心特点 |
|---|---|---|---|
SQL Server |
微软 | 中大型项目 | .NET 生态集成好,Windows 平台首选 |
Oracle |
甲骨文 | 大型项目、复杂业务 | 功能最强、最稳定,价格昂贵 |
MySQL |
甲骨文 | 电商、SNS、论坛 |
并发性能好,互联网应用首选 |
PostgreSQL |
伯克利分校 | 通用型 | 开源功能最丰富,标准兼容性高 |
SQLite |
公共领域 | 嵌入式、移动端 | 轻量级,单文件,零配置 |
H2 |
H2 团队 |
Java 嵌入式开发 |
纯 Java 实现,内存模式适合测试 |
1.4 服务器、数据库和表之间的关系
所谓安装数据库服务器,只是在机器上安装了一个数据库管理系统程序,这个管理程序可以管理多个数据库,一般开发人员会针对每一个应用创建一个数据库。为保存应用中实体的数据,一般会在数据库中创建多个表,以保存程序中实体的数据。

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

上图 MySQL 采用分层架构设计:最上层为客户端连接层 ,负责连接管理、认证授权及提供 SQL 接口与各类实用工具;中间为核心服务层 ,包含查询优化器(负责 SQL 解析、重写与执行计划生成)和缓存机制;下层为可插拔存储引擎层 ,支持 InnoDB、MyISAM、Memory 等多种引擎,实现数据存储与访问逻辑的灵活替换;最底层是物理存储层 ,数据与索引实际存放于文件系统(如 NTFS、ext4)中,并辅以二进制日志、重做日志、撤销日志等完整日志体系,保障数据持久性、事务 ACID 特性及高可用能力。这种"SQL 接口统一、存储引擎可插拔"的架构,使 MySQL 能够在同一套 SQL 语法下满足 OLTP、只读查询、归档等多种业务场景需求。
1.6 SQL 的分类
DDL【data definition language】 数据定义语言 ,用来维护存储数据的结构,代表指令: create, drop, alter。
DML【data manipulation language】 数据操纵语言 ,用来对数据进行操作,代表指令:insert,delete,update。
DML中又单独分了一个DQL,数据查询语言 ,代表指令: select。
DCL【Data Control Language】 数据控制语言 ,主要负责权限管理和事务,代表指令: grant,revoke,commit。
1.7 存储引擎
存储引擎是:数据库管理系统如何存储数据、如何为存储的数据建立索引和如何更新、查询数据等技术的实现方法。
MySQL的核心就是插件式存储引擎,支持多种存储引擎。
查看存储引擎show engines;。

MySQL 存储引擎对比表
| 引擎 | 支持状态 | 事务 | XA | 保存点 | 锁粒度 | 主要特点 | 适用场景 |
|---|---|---|---|---|---|---|---|
InnoDB |
默认 | 支持 | 支持 | 支持 | 行级锁 | 支持事务、外键、崩溃恢复 | 常规业务、高并发OLTP |
MEMORY |
是 | 不支持 | 不支持 | 不支持 | 表级锁 | 基于哈希,内存存储,速度快 | 临时表、缓存数据 |
MyISAM |
是 | 不支持 | 不支持 | 不支持 | 表级锁 | 读性能好,不支持事务 | 只读查询、数据仓库 |
MRG_MYISAM |
是 | 不支持 | 不支持 | 不支持 | 表级锁 | 多个MyISAM表的集合 |
分表后的统一查询 |
BLACKHOLE |
是 | 不支持 | 不支持 | 不支持 | 表级锁 | 写入数据直接丢弃 | 复制过滤、性能测试 |
CSV |
是 | 不支持 | 不支持 | 不支持 | 表级锁 | 以CSV格式存储 | 数据导入导出、跨平台交换 |
ARCHIVE |
是 | 不支持 | 不支持 | 不支持 | 行级锁 | 高压缩比,只支持插入和查询 | 日志归档、历史数据 |
PERFORMANCE_SCHEMA |
是 | 不支持 | 不支持 | 不支持 | 表级锁 | 收集性能监控数据 | 数据库性能诊断 |
ndbcluster |
否 | 支持 | 支持 | 支持 | 行级锁 | 分布式集群,高可用 | MySQL Cluster集群环境 |
FEDERATED |
否 | 不支持 | 不支持 | 不支持 | 表级锁 | 访问远程MySQL表 |
跨库数据访问 |
ndbinfo |
否 | 不支持 | 不支持 | 不支持 | 表级锁 | 集群系统信息存储 | 集群状态监控 |
总结:
以上就是本期博客分享的全部内容啦!如果觉得文章还不错的话可以三连支持一下,你的支持就是我前进最大的动力!
技术的探索永无止境! 道阻且长,行则将至!后续我会给大家带来更多优质博客内容,欢迎关注我的CSDN账号,我们一同成长!
(~ ̄▽ ̄)~