目录
1.数据库是什么
mysql&&mysqld:
mysql :这通常指的是 MySQL 的命令行客户端工具。 它是用户与 MySQL 数据库服务器(mysqld)进行交互的一种方式。用户可以通过
mysql
客户端工具输入 SQL 语句来查询、更新、管理数据库中的数据。mysql
客户端通过 TCP/IP 网络协议(或其他支持的协议)与 MySQL 服务器(mysqld)进行通信。mysqld :这是 MySQL 数据库的服务端守护进程(daemon) 。它负责处理来自客户端(如
mysql
命令行工具、图形界面客户端、应用程序等)的请求,执行 SQL 语句,并管理数据库文件的存取。mysqld
提供了数据库的核心功能,包括数据的存储、查询、索引、事务处理等。它是 MySQL 数据库系统的核心组成部分。MySQL本质:
MySQL本质:基于C(mysql)S(mysqld)模式的一种网络服务 。mysql 是一套给用户提供数据存取的服务的网络程序 ,数据库服务指的就是mysqld。
有文件为什么不用文件存储:
一般文件确实提供了数据的存储功能,但是文件并没有提供非常好的数据内容的管理能力。(eg:比如我想在百万行的IP地址中,找出所有以127开头的IP地址,这种情况下,数据库只需要给出指定的命令就可以了,但是文件操作并没有这么方便)
数据库本质:
数据库一般指的是,在磁盘或者内存中存储的特定结构组织的数据--将来在磁盘上存储的一套数据库方案。
对数据内容存储的一套解决方案,用户给我字段或要求,数据库直接给你结果就可以。
从物理层面来看,数据库确实也是以文件的形式存储在磁盘上的。数据库管理系统(如MySQL)提供了一套高级接口(如SQL语言),mysqld就会根据SQL语言,在数据库文件中给用户做增删查改,最后将结果返回给mysqld,mysqld再将结果交给用户
数据库本质是文件。只不过 这些文件并不由程序员直接操作,而是由数据库服务帮我们进行操作的
2.基本操作
数据库服务器连接操作
登录指令:
-h [主机名或IP地址]
:这个选项用来指定MySQL服务器的主机名或IP地址。如果您想连接到本地机器上的MySQL服务,可以省略这个选项(或者指定为127.0.0.1
或localhost
)。
-P [端口号]
:这个选项允许您指定MySQL服务器监听的端口号。MySQL的默认端口号是3306,如果您使用的是默认端口号,也可以省略这个选项。
-u [用户名]
:这个选项用来指定登录MySQL服务器的用户名。如果不指定,通常会尝试以root
用户身份登录。但出于安全考虑,推荐使用具有适当权限的特定用户进行连接。
-p
:这个选项告诉mysql
命令在连接时需要密码。注意,-p
选项后面不需要立即跟密码,因为系统会提示您输入密码以确保密码的安全性。
bashmysql -h 192.168.1.100 -P 3306 -u myuser -p
数据库和数据库表的创建
在ubuntu环境下查看配置文件:
bashsudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
其中有一行:
datadir = /var/lib/mysql
表示MySQL的数据库文件被存储在/var/lib/mysql
这个目录下。以下工作由mysql客服端让mysqld服务端做的。
1.创建数据库:
bashcreate database 数据库名;
2.列出MySQL服务器中所有的数据库。
cppshow databases;
这就可以看到我们刚刚创建的数据库了。
在该路径下也确实新增了 hellosql数据库的目录。
所以建立数据库,本质就是建立Linux下的一个目录。
3.使用指定的数据库
cppuse 数据库名;
就是用刚才的数据库
4.在数据库内创建表
bashcreate table 表名(字段1 字段1类型);
这样我们就创建好了一张表,我们可以进入hellosql目录下进行查看:所以在数据库内建立表,本质就是在Linux下创建对应的文件即可。
5.往数据库中插入数据
bashinsert into 表名(字段名) values(值);
6.查询表中所有数据
bashselect * from 表名;
服务器,数据库,表关系
- 所谓安装数据库服务器,只是在机器上安装了一个数据库管理系统程序,这个管理程序可以管理多个数据库,一般开发人员会针对每一个应用创建一个数据库。
- 为保存应用中实体的数据,一般会在数据库中创建多个表,以保存程序中实体的数据。
- 数据库服务器、数据库和表的关系如下:
数据逻辑存储
在关系型数据库中,数据以表的形式进行组织。每个表由一系列定义好的列组成,每列代表特定类型的数据,每行则包含了一条记录,代表着一组相关数据。
3.MySQL架构
MySQL 是一个可移植的数据库,几乎能在当前所有的操作系统上运行,如 Unix/Linux、Windows、Mac 和 Solaris。各种系统在底层实现方面各有不同,但是 MySQL 基本上能保证在各个平台上的物理体系结构的一致性。
MySQL架构大致分为以下三层:
1. 连接层
- 功能:处理客户端与服务器之间的连接、认证和通信。
- 关键组件:连接管理器、认证模块、SSL加密。
2. 查询层
- 功能:解析SQL查询,优化查询计划,并调用存储引擎执行查询。
- 关键组件:SQL解析器、查询优化器(不再包括已废弃的查询缓存)。
3. 存储引擎层
- 功能:负责数据的存储、索引和检索。
- 特点:插件式架构,支持多种存储引擎(如InnoDB、MyISAM、Memory等),每种引擎有其特定的功能和性能特点。
4.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
5.存储引擎
存储引擎是:数据库管理系统如何存储数据、如何为存储的数据建立索引和如何更新、查询数据等技术的实现方法。MySQL的核心就是插件式存储引擎,支持多种存储引擎
查看存储引擎:
常见存储引擎对比:
最常用的就是以下两种;
1. InnoDB
特点:
- 事务支持:支持ACID事务模型,具有提交、回滚和崩溃恢复能力。
- 数据一致性:通过MVCC(多版本并发控制)和行级锁定,保证数据的一致性。
- 外键支持:支持外键约束,有助于维护数据的完整性。
- 存储方式:使用聚簇索引存储数据,表数据直接存储在主键的B+树叶节点上。
优势:
- 高可靠性和高并发性能。
- 适用于需要事务支持和复杂查询的应用场景。
适用场景:
- 大多数应用程序场景,尤其是需要处理大量并发访问和复杂数据操作的应用。
2. MyISAM
特点:
- 非事务型:不支持事务处理。
- 表级锁定:使用表级锁定,并发性能相对较差。
- 全文索引:支持全文索引,适用于文本搜索。
- 存储方式:表数据和索引分开存储,索引文件包含指向数据文件中记录的指针。
优势:
- 读取速度较快(主要指读操作),特别是全表扫描。
- 适用于读密集型的应用场景。