目录
[一、登录 MySQL](#一、登录 MySQL)
[3.1 数据库概念](#3.1 数据库概念)
[3.2 服务器,数据库,表关系](#3.2 服务器,数据库,表关系)
[3.3 SQL 分类](#3.3 SQL 分类)
[5.1 创建数据库](#5.1 创建数据库)
[5.2 创建表](#5.2 创建表)
[5.3 表中插入数据](#5.3 表中插入数据)
一、登录 MySQL
cpp
mysql -h 127.0.0.1 -P 3306 -u root -p
-h:指明登录部署了mysql服务的主机端口号(127.0.0.1,本地环回)
-P:指明要访问的端口号(3306,MySQL默认的端口号)
-u:指明登录用户
-p:指明需要输入密码
二、MySQL的部署
在主机中,可以看到存在 mysql 文件夹与 mysqld 文件夹,
其中,mysql指的是数据库服务的客户端;mysqld指的是数据库服务的服务端。
从这里不难看出,MySQL本质是基于C(Client,即mysql)S(Server,即mysqld)模式的一种网络服务。
三、什么是数据库
3.1 数据库概念
数据库:一般指在磁盘(或内存)中存储的特定结构组织的数据,即在磁盘上存储的一套数据库方案。
说白了,数据库其实就是用户将数据保存在文件过程的中介中,那么为什么用户不直接将数据存储在文件中?
文件只提供了存储的功能,但是没有提供很好的对文件内容进行增删查改的能力。
以图的形式来看,用户在外只需要访问 mysql ,对 mysql 执行对应的 sql 句柄,后台由 mysqld 对磁盘存储的数据库文件进行相关的操作,用户并不关心。
这是不是与面向对象的思想类似?或者说面向对象的思想才是计算机帮人们解决问题的思想。
3.2 服务器,数据库,表关系
在某个软件或某一程序中,所有数据都存在同一数据库中显然是不合理的,假设在某一购物软件中,存在全部订单、待支付订单、退款/售后订单,这些数据还需要建立多个数据库来存储吗?
其实只需要在一个数据库下建立表即可,下面来看看它们之间的关系:
从上图中的信息可以看出来,Linux一切皆文件的特点,数据库在Linux下就是一个目录,数据库表就是目录下的一个文件。下面来见一下Linux下的MySQL。
3.3 SQL 分类
DDL【data definition language】 数据定义语言,用来维护存储数据的结构
代表指令: create, drop, alter
DML【data manipulation language】 数据操纵语言,用来对数据进行操作
代表指令: insert,delete,update
DCL【Data Control Language】 数据控制语言,主要负责权限管理和事务
代表指令: grant,revoke,commit
四、MySQL架构
MySQL 是一个可移植的数据库,几乎能在当前所有的操作系统上运行,如 Unix/Linux、Windows、Mac 和 Solaris。各种系统在底层实现方面各有不同,但是 MySQL 基本上能保证在各个平台上的物理体系结构的一致性。
从上图可以看出MySQL的基本架构:
Client Connectors(客户端连接器)
JDBC, ODBC, .NET, PHP, Python, PERL, C API 等客户端接口:这些连接器允许不同编程语言和框架与MySQL服务器进行通信。它们通过标准化的协议与MySQL服务器建立连接,执行SQL语句,并接收服务器返回的数据。
MySQL Server(MySQL服务器核心部分):
Connection Pool(连接池):负责连接管理、身份验证和安全性。它通过连接池减少频繁打开和关闭连接的开销,提高了性能。
Services & Utilities(服务和实用工具):包含诸如备份恢复、安全性、集群、分区管理等功能,以及用于管理数据库的工具
SQL Interface(SQL接口):提供了执行SQL语句(如DML、DDL等)的接口。支持存储过程、触发器、视图等高级功能。
Parser(解析器):包括词法分析、语法分析和代码生成:解析输入的SQL语句,将其分解为可以进一步处理的元素,并生成内部表示供优化器使用。
Optimizer(优化器):负责SQL查询的重写、扫描和索引的顺序选择等,确保SQL查询执行的效率达到最佳。
Caches(缓存):包括全局缓存和针对具体存储引擎的缓存,帮助加快数据查询和写入的速度。缓存用于减少磁盘I/O操作,提升查询性能。
Pluggable Storage Engines(可插拔存储引擎)
MySQL支持不同的存储引擎,用户可以根据不同的业务场景选择适合的存储引擎。
目前MySQL主流的引擎是 MyISAM (早期的默认存储引擎) 和 InnoDB (现在的默认引擎)
五、初识Linux下的MySQL
在Linux下,数据库目录一般是 /var/lib/mysql ,可以 cd 进入该目录然后查看。
5.1 创建数据库
mysql> create database helloworld;
Query OK, 1 row affected (0.01 sec)
当新建数据库时,可以在不同的终端上查看到新建的目录:
这就说明了在Linux下,数据库就是一个目录。
5.2 创建表
创建表之前,需要先使用数据库,至少让数据库知道你要操控的是哪个数据库吧!
mysql> use helloworld
Database changed
然后就可以进行创建表了,这里随便创建一个日期类:
mysql> create table date(
-> year int,
-> month int,
-> day int);
Query OK, 0 rows affected (0.05 sec)
紧接着就可以在 helloworld 目录下查看到有一个新建的文件 date.ibd
5.3 表中插入数据
// 表中插入数据
mysql> insert into date (year, month, day) values (2021, 03, 22);
Query OK, 1 row affected (0.01 sec)
// 查看表中数据
mysql> select * from date;
+------+-------+------+
| year | month | day |
+------+-------+------+
| 2021 | 3 | 22 |
+------+-------+------+
1 row in set (0.00 sec)
从查看表也能知道,MySQL是一个行列式的存储结构: