文章目录
1. 数据库概念
1.1 什么是数据库
存储数据用文件就可以了,为什么还要弄个数据库?
一般的文件确实提供了数据的存储功能,但是文件并没有提供非常好的数据内容管理能力(站在用户角度)。
文件保存数据有以下几个缺点:
- 文件的安全性问题
- 文件不利于数据查询和管理
- 文件不利于存储海量数据
- 文件在程序中控制不方便
数据库的本质:对数据内容存储的一套解决方案,你给我字段或者要求,我直接给你结果就行。
数据库存储介质:磁盘、内存。
为了解决上述问题,专家们设计出更加利于管理数据的东西——数据库,它能更有效的管理数据。数据库的水平是衡量一个程序员水平的重要指标。
-
数据库是在 20 世纪 60 年代末发展起来的一项重要技术,20 世纪 70 年代以来数据库技术得到迅猛发展,已经成为计算机科学与技术的一个重要分支。数据库技术和系统已经成为信息基础设施的核心技术和重要基础,数据库技术作为数据管理的最有效的手段,极大地促进了计算机应用的发展。数据库技术主要是用来解决数据处理的非数值计算问题,数据处理的主要内容是数据的存储、查询、修改、排序和统计等。
-
数据库是存放数据的仓库。它的存储空间很大,可以存放百万条、千万条、上亿条数据。但是数据库并不是随意地将数据进行存放,是有一定的规则的,否则查询的效率会很低。当今世界是一个充满着数据的互联网世界,充斥着大量的数据。即这个互联网世界就是数据世界。数据的来源有很多,比如出行记录、消费记录、浏览的网页、发送的消息等等。除了文本类型的数据,图像、音乐、声音都是数据。——来自数据库(电子化的文件柜)_百度百科 (baidu.com)
1.2 MySQL是什么
MySQL到底是什么呢?
[MySQL](MySQL(关系型数据库管理系统)_百度百科 (baidu.com))是一个关系型数据库管理系统,由瑞典 [MySQL AB](https://baike.baidu.com/item/MySQL AB/2620844?fromModule=lemma_inlink) 公司开发,属于 Oracle 旗下产品。MySQL是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的RDBMS (Relational Database Management System,关系数据库管理系统)应用软件之一。
在Linux中看看MySQL这个文件。
可以看到不仅有mysql文件,也有一个mysqld文件。
- mysql是数据库服务的客户端。
- mysqld是数据库服务的服务器端,后缀带
d
也就证明它是一个守护进程。- MySQL的本质:基于C(mysql)S(mysqld)模式的一种网络服务。
使用netstat -lntp
查看一下
由此证明MySQL是一个服务端。
2. 主流数据库
- MySQL:世界上最受欢迎的数据库,属于甲骨文,并发性好,不适合做复杂的业务。主要用在电商,SNS,论坛。对简单的SQL处理效果好。广泛使用的开源关系型数据库管理系统,具有高性能、易用性和丰富的功能。
- Oracle:甲骨文产品,复杂的业务逻辑,并发一般来说不如MySQL。功能强大、稳定可靠的商业数据库,适用于大型企业级应用。
- Microsoft SQL Server:微软开发的关系型数据库,与 Windows 系统集成良好,提供了全面的企业级功能,
.Net
程序员的最爱,适合中大型项目。 - PostgreSQL:加州大学伯克利分校计算机系开发的关系型数据库,不管是私用,商用,还是学术研究使用,可以免费使用,修改和分发。开源的对象关系型数据库,具有高度的可扩展性和强大的功能。
- MongoDB:非关系型的文档数据库,适用于处理大量的非结构化和半结构化数据。
- Redis:内存数据结构存储,常用于缓存、会话存储和实时数据处理。
- SQLite:是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中。它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了,常用于移动应用和小型项目。
- H2: 是一个用Java开发的嵌入式数据库,它本身只是一个类库,可以直接嵌入到应用项目中。
3. MySQL的基本使用
MySQL的基本安装已经讲述过了,具体方法可以跳转这里
3.1 连接服务器
在命令行输入:
mysql -h 127.0.0.1 -P 3306 -u root -p
解释一下选项:
-h
:指明登录部署了MySQL服务的主机-P
:指明我们要访问的端口号-u
:指明登录用户-p
:指明需要输入密码
注意:
- 如果没有
-h [IP地址]
选项,默认是连接本地,也就是127.0.0.1
。- 如果没有
-P [端口号]
选项,默认是连接3306端口号。(这与你的配置文件有关系,如果你配置的是别的端口号那么默认连接的就不是3306了)
3.2 使用案例
存放MySQL数据的目录:/var/lib/mysql
- 创建一个
helloworld
数据库
create database helloworld;
可以看到我们现在多了一个helloworld
数据库
然后再/var/lib/mysql目录下我们也发现多了个helloworld文件。
- 使用数据库,也就是选择数据库
use helloworld;
- 创建数据库表
create table student(
name varchar(32),
age int,
gender varchar(32)
);
- 向表中插入数据
insert into student (name, age, gender) values ('王一', 22, '男');
insert into student (name, age, gender) values ('李子', 23, '女');
insert into student (name, age, gender) values ('Felix', 24, 'female');
如果在插入的时候出现1366号错误,证明字符的编码不合适,执行下列语句即可。
ALTER TABLE student MODIFY name VARCHAR(32) CHARACTER SET utf8mb4;
ALTER TABLE student MODIFY gender VARCHAR(32) CHARACTER SET utf8mb4;
- 查询表中的数据
select * from student;
这就是MySQL的逻辑存储结构
3.3 服务器、数据库、表关系
- 所谓安装数据库服务器,只是在机器上安装了一个数据库管理系统程序,这个管理程序可以管理多个数据库,一般开发人员会针对每一个应用创建一个数据库。
- 为保存应用中实体的数据,一般会在数据库中创建多个表,以保存程序中实体的数据。
数据库服务器、数据库和表的关系如下:
4. MySQL架构
MySQL 是一个可移植的数据库,几乎能在当前所有的操作系统上运行,如 Unix/Linux、Windows、Mac 和 Solaris。各种系统在底层实现方面各有不同,但是 MySQL 基本上能保证在各个平台上的物理体系结构的一致性。
MySQL 的架构主要由以下几个部分组成:
- 连接层
处理客户端的连接请求,包括验证用户身份、权限等。
- 服务层
包括查询缓存:缓存查询结果以提高性能,但在某些复杂场景下可能导致问题,新版本中该功能逐渐被弱化。
解析器:对 SQL 语句进行语法和语义分析。
优化器:选择最优的查询执行计划。
- 存储引擎层
存储引擎是数据库管理系统如何存储数据、如何为存储的数据建立索引和如何更新、查询数据等技术的实现方法。MySQL的核心就是插件式存储引擎,支持多种存储引擎。
- MySQL 支持多种存储引擎,如 InnoDB、MyISAM 等。每种存储引擎具有不同的特点和适用场景。
- 常见的 InnoDB 支持事务、行级锁定、外键等,适合对数据完整性和并发要求较高的场景。
- MyISAM 不支持事务,但在某些只读或读多写少的场景中可能具有较好的性能。
查看存储引擎:
show engines;
- 数据存储层
实际存储数据的物理文件,包括数据文件、索引文件、日志文件等。
其中,InnoDB 是 MySQL 中最常用的存储引擎之一,其采用了聚簇索引、自适应哈希索引等技术来提高性能和数据的完整性。
不同的架构组件协同工作,以实现高效的数据存储、查询处理和并发控制
5. 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。