数据库(Database)是按照数据结构来组织、存储和管理数据的仓库。是一个长期存储在计算机内的、有组织的、可共享的、统一管理的大量数据的集合。 数据库作为最重要的基础软件,是确保计算机系统稳定运行的基石。
数据库的概念实际包括两层意思:
虽然存储数据也可以使用文件,但是利用文件保存数据存在以下缺点:
因此为了解决数据的存储和管理问题,设计出来更加利于管理数据的数据库,它能够有效的管理数据。同时对数据库的掌握水平也是衡量一个程序员水平的重要指标。
启动服务器:
systemctl start mysqld
重启服务器:
systemctl restart mysqld
关闭服务器:
systemctl stop mysqld
设置服务器随系统启动:
systemctl enable mysqld
mysql -h 127.0.0.1 -P 3306 -u root -p
说明:
- -h:指定主机地址,如果没有则默认的本地地址
- -P:指定MySQL服务器的端口号,如果没有则默认为3306
- -u:指定登录MySQL的用户
- -p:指定通过密码登录
create database db_test;
use
db_test;
create table student(
id int,
name varchar(32),
gender varchar(2)
);
insert into student (id, name, gender) values (1, '张三', '男');
insert into student (id, name, gender) values (2, '李四', '女');
insert into student (id, name, gender) values (3, '王五', '男');
select * from student;
数据逻辑存储:
当使用select * from student
语句进行查询的时候,我们会发现数据好像是存放在一张表结构当中的,这其实就是数据的逻辑存储。
数据实际存储:
MySQL创建的数据库和各种表结构实际都是文件的形式存放到磁盘上的,通过MySQL的配置文件/etc/mu.cnf
就可以找到数据库中数据实际的存储路径:
可以发现,数据实际上是默认存放在/var/lib/mysql
目录下的,可以发现该目录中存放这许多数据库相关的文件:
其中db_test
就是刚才创建的数据库,实际在文件系统中也表现为一个目录。继续查看该目录:
其中db.opt
文件实际上是指明当前数据库的默认字符编码以及字符校验规则。
而student.frm
文件存放的是表结构数据,student.ibd
文件存放的是表的内容以及索引数据。它们都是以二进制的方式进行存放的,因此只有使用MySQL数据库才能查看到实际的内容。
MySQL 是一个可移植的数据库,几乎能在当前所有的操作系统上运行,如 Unix/Linux、Windows、Mac 和 Solaris。各种系统在底层实现方面各有不同,但是 MySQL 基本上能保证在各个平台上的物理体系结构的一致性。
1.连接层
主要提供与MySQL服务器的连接的支持,支持Java,C,Python等连接MySQL服务器。
2.服务层
服务层是MySQL的核心,主要包括系统管理和控制工具、连接池、SQL接口、解析器、查询优化器、缓存六个部分。
- 系统管理和控制工具:例如备份恢复、安全管理、集群管理等。
- 连接池:负责存储和管理客户端与数据库的连接,一个线程负责管理一个连接。
- SQL接口:用于接收客户端发出的各种SQL命令,并且返回用户需要的查询结果,比如DML,DDL,存储过程,触发器,视图等。
- 解析器:负责将SQL请求转换成一个SQL解析树,然后根据MySQL的规则校验SQL是否合法。
- 查询优化器:当解析树通过解析器语法检查之后,将交由优化器转化成执行计划与存储引擎层交互。
- 缓存:缓存机制是由一系列小缓存组成,比如表缓存,记录缓存,权限缓存,引擎缓存等。如果查询缓存有命中的结果,则直接返回缓存的数据。
3.存储引擎层
存储引擎负责MySQL中的数据存储与提取,与底层系统文件进行交互。MySQL存储引擎是插件式的,可插拔。服务器中的查询存储引擎通过接口与存储引擎进行通信,接口屏蔽了不同存储引擎之间的差异,现在有多种存储引擎,各有各种特点,常见的是MyISAM和InnoDB。
4.系统文件层
系统文件层主要负责将数据和日志存储的文件系统上,并完成与存储引擎层的交互,是文件的物理存储层。主要包括日志文件,数据文件,配置文件,pid文件,socket文件等。
结构化查询语言(Structured Query Language)简称SQL,是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。
SQL语句可分为以下三类:
说明以下,DML中又单独分了一个DQL(Data Query Language)数据查询语言,比如select语句、from语句、where语句等。
存储引擎就是数据库管理系统如何存储数据、如何为存储的数据建立索引、如何更新数据、如何查询数据等技术的实现方法,MySQL中的存储引擎是插件式的存储引擎,它可以支持多种存储引擎。
通过show engines
语句可以查看MySQL支持的存储引擎。比如:
其中MySQL底层默认使用的存储引擎是InnoDB
,该存储引擎支持事务、行级锁、外键等。