文章目录
- 一、数据库的概念
-
- [1. 什么是数据库](#1. 什么是数据库)
- [2. 主流数据库](#2. 主流数据库)
- [3. mysql和mysqld的区别](#3. mysql和mysqld的区别)
- 二、MySQL基本使用
- 三、MySQL架构
- 四、SQL分类
- 五、存储引擎
一、数据库的概念
1. 什么是数据库
存储数据用文件就可以了,文件已经提供了数据存储功能,为什么还要弄个数据库?因为在用户角度看来,文件没有提供非常好的数据管理能力。
文件保存数据有以下几个缺点:
- 文件的安全性问题
- 文件不利于数据查询和管理
- 文件不利于存储海量数据
- 文件在程序中控制不方便
数据库存储介质:
- 磁盘
- 内存
为了解决上述问题,专家们设计出更加利于管理数据的东西------数据库,数据库能更有效的管理数据。
2. 主流数据库
数据库 | 介绍 |
---|---|
SQL Sever | 微软的产品,.Net程序员的最爱,中大型项目。 |
Oracle | 甲骨文产品,适合大型项目,复杂的业务逻辑,并发一般来说不如MySQL。 |
MySQL | 世界上最受欢迎的数据库,属于甲骨文,并发性好,不适合做复杂的业务。主要用在电商,SNS,论坛。对简单的SQL处理效果好。 |
PostgreSQL | 加州大学伯克利分校计算机系开发的关系型数据库,不管是私用,商用,还是学术研究使用,可以免费使用,修改和分发。 |
SQLite | 是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中。它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。 |
H2 | 是一个用Java开发的嵌入式数据库,它本身只是一个类库,可以直接嵌入到应用项目中。 |
3. mysql和mysqld的区别
-
mysql是数据库服务的客户端
-
mysqld是数据库服务的服务端
-
mysql的本质是:基于C(mysql)S(mysqld)模式的一种网络服务,所以可以通过netstat命令查询网络连接状态:
bashsudo netstat -nltpu
二、MySQL基本使用
1. 安装MySQL服务器
在 CentOS 上安装 MySQL 服务器
-
更新系统包:
shsudo yum update -y
-
安装 MySQL 存储库 :
下载并安装 MySQL 的官方 Yum 存储库:
shwget https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm sudo rpm -ivh mysql80-community-release-el7-3.noarch.rpm
-
安装 MySQL 服务器:
shsudo yum install mysql-server -y
-
启动 MySQL 服务并设置开机自启:
shsudo systemctl start mysqld sudo systemctl enable mysqld
-
获取临时 root 密码 :
安装完成后,MySQL 会为 root 用户生成一个临时密码,你可以通过以下命令查看:
shsudo grep 'temporary password' /var/log/mysqld.log
-
运行安全脚本 :
使用临时密码登录并运行安全安装脚本来设置 root 密码并配置安全选项:
shsudo mysql_secure_installation
在 Ubuntu 上安装 MySQL 服务器
-
更新系统包:
shsudo apt update sudo apt upgrade -y
-
安装 MySQL 服务器 :
Ubuntu 18.04 和更高版本自带了 MySQL 5.7 或更高版本的包:
shsudo apt install mysql-server -y
-
启动 MySQL 服务并设置开机自启:
shsudo systemctl start mysql sudo systemctl enable mysql
-
运行安全脚本 :
安装完成后,运行安全安装脚本来配置 MySQL:
shsudo mysql_secure_installation
在运行此脚本过程中,你将设置 root 用户的密码,并选择一些安全配置选项,例如删除匿名用户、禁止远程 root 登录、删除测试数据库等。
验证安装
无论是在 CentOS 还是 Ubuntu 上,安装完成后,你都可以通过以下命令登录 MySQL 并验证安装:
sh
mysql -u root -p
输入你设置的 root 密码后,就可以进入 MySQL 控制台,验证 MySQL 是否正常运行。
2. 服务器管理
启动服务器
systemctl start mysqld
或service mysqld start
命令可以启动MySQL服务器。
查看服务器
bash
sudo systemctl status mysqld
连接服务器
连接到MySQL服务器:
sql
mysql -h127.0.0.1 -P3306 -uroot -p
-h
:表示你要连接的MySQL服务器所在的主机,127.0.0.1表示本主机。-P
:表示你要连接的MySQL服务器所对应的端口号,一般默认是3306。-u
:表示用哪一个用户连接MySQL服务器,root表示超级用户。-p
:表示该用户对应的密码,密码可以直接跟在-p后面,也可以回车后输入。
此外,如果要连接的是本地的MySQL服务器,那么连接时只需要指明用户名和用户密码即可。如下:
sql
mysql -uroot -p
连接到MySQL服务器后,就可以输入各种SQL语句让服务器执行了,当要退出mysql时直接输入
quit
或exit
或\q
即可。
停止服务器
通过systemctl stop mysqld
命令或service mysqld stop
命令可以停止MySQL服务器。
重启服务器
通过systemctl restart mysqld
命令或service mysqld restart
命令可以重启MySQL服务器。
3. 服务器,数据库,表关系
-
所谓安装数据库服务器,只是在机器上安装了一个数据库管理系统程序,这个管理程序可以管理多个数据库,一般开发人员会针对每一个应用创建一个数据库,这些数据库被存放在一个指定目录底下:
-
一个数据库,就对应Linux下的一个同名的目录:
-
在一个数据库中建立一张表,本质就是在这个数据库的目录下创建数据文件:
数据库服务器、数据库和表的关系如下:
三、MySQL架构
MySQL 是一个可移植的数据库,几乎能在当前所有的操作系统上运行,如 Unix/Linux、Windows、Mac 和 Solaris。各种系统在底层实现方面各有不同,但是 MySQL 基本上能保证在各个平台上的物理体系结构的一致性。
四、SQL分类
-
DDL【Data Definition Language】数据定义语言,用来维护存储数据的结构
代表指令: create, drop, alter
-
DML【Data Manipulation Language】数据操纵语言,用来对数据 进行操作
代表指令: insert,delete,update
- DML中又单独分了一个DQL【Data Query Language】,数据查询 语言
代表指令: select
- DML中又单独分了一个DQL【Data Query Language】,数据查询 语言
-
DCL【Data Control Language】数据控制 语言,主要负责权限管理和事务
代表指令: grant,revoke,commit
五、存储引擎
存储引擎是:数据库管理系统如何存储数据、如何为存储的数据建立索引和如何更新、查询数据等技术的实现方法。
MySQL的核心就是插件式存储引擎,支持多种存储引擎。
查看支持的存储引擎
sql
show engines;
MySQL支持的几个存储引擎
Engine | Support | Comment | Transactions | XA | Savepoints |
---|---|---|---|---|---|
InnoDB | DEFAULT | Supports transactions, row-level locking, and foreign keys | YES | YES | YES |
MRG_MYISAM | YES | Collection of identical MyISAM tables | NO | NO | NO |
MEMORY | YES | Hash based, stored in memory, useful for temporary tables | NO | NO | NO |
BLACKHOLE | YES | /dev/null storage engine (anything you write to it disappears) | NO | NO | NO |
CSV | YES | CSV storage engine | NO | NO | NO |
PERFORMANCE_SCHEMA | YES | Performance Schema | NO | NO | NO |
FEDERATED | NO | Federated MySQL storage engine | NULL | NULL | NULL |
引擎 | 支持 | 评论 | 事务支持 | XA | 保存点支持 |
---|---|---|---|---|---|
InnoDB | 默认 | 支持事务、行级锁定和外键 | 是 | 是 | 是 |
MRG_MYISAM | 是 | 相同MyISAM表的集合 | 否 | 否 | 否 |
MEMORY | 是 | 基于哈希,存储在内存中,适用于临时表 | 否 | 否 | 否 |
BLACKHOLE | 是 | /dev/null存储引擎(写入的数据会消失) | 否 | 否 | 否 |
MyISAM | 是 | MyISAM存储引擎 | 否 | 否 | 否 |
CSV | 是 | CSV存储引擎 | 否 | 否 | 否 |
ARCHIVE | 是 | 归档存储引擎 | 否 | 否 | 否 |
PERFORMANCE_SCHEMA | 是 | 性能模式 | 否 | 否 | 否 |
FEDERATED | 否 | 联邦MySQL存储引擎 | NULL | NULL | NULL |
MySQL存储引擎功能对比
Feature | MyISAM | BDB | Memory | InnoDB | Archive | NDB |
---|---|---|---|---|---|---|
Storage Limits | No | No | Yes | 64TB | No | Yes |
Transactions (commit, rollback, etc.) | ✔ | ✔ | ✔ | |||
Locking granularity | Table | Page | Table | Row | Row | Row |
MVCC/Snapshot Read | ✔ | ✔ | ✔ | |||
Geospatial support | ✔ | ✔ | ||||
B-Tree indexes | ✔ | ✔ | ✔ | ✔ | ✔ | |
Hash indexes | ✔ | ✔ | ✔ | |||
Full text search index | ✔ | ✔ | ||||
Clustered index | ✔ | ✔ | ||||
Data Caches | ✔ | ✔ | ✔ | |||
Index Caches | ✔ | ✔ | ✔ | |||
Compressed data | ✔ | ✔ | ||||
Encrypted data (via function) | ✔ | ✔ | ||||
Storage cost (space used) | Low | Low | N/A | High | Very Low | Low |
Memory cost | Low | Low | Medium | High | Low | High |
Bulk Insert Speed | High | High | High | Low | Very High | High |
Cluster database support | ✔ | ✔ | ||||
Replication support | ✔ | ✔ | ✔ | ✔ | ||
Foreign key support | ✔ | ✔ | ||||
Backup/Point-in-time recovery | ✔ | ✔ | ✔ | |||
Query cache support | ✔ | ✔ | ✔ | |||
Update Statistics for Data Dictionary | ✔ | ✔ | ✔ |
功能 | MyISAM | BDB | Memory | InnoDB | Archive | NDB |
---|---|---|---|---|---|---|
存储限制 | 否 | 否 | 是 | 64TB | 否 | 是 |
事务(提交、回滚等) | ✔ | ✔ | ✔ | |||
锁定粒度 | 表 | 页 | 表 | 行 | 行 | 行 |
MVCC/快照读取 | ✔ | ✔ | ✔ | |||
地理空间支持 | ✔ | ✔ | ||||
B-Tree 索引 | ✔ | ✔ | ✔ | ✔ | ✔ | |
哈希索引 | ✔ | ✔ | ✔ | |||
全文搜索索引 | ✔ | ✔ | ||||
聚簇索引 | ✔ | ✔ | ||||
数据缓存 | ✔ | ✔ | ✔ | |||
索引缓存 | ✔ | ✔ | ✔ | |||
压缩数据 | ✔ | ✔ | ||||
加密数据(通过函数) | ✔ | ✔ | ||||
存储成本(空间使用) | 低 | 低 | 不适用 | 高 | 非常低 | 低 |
内存成本 | 低 | 低 | 中等 | 高 | 低 | 高 |
批量插入速度 | 高 | 高 | 高 | 低 | 非常高 | 高 |
集群数据库支持 | ✔ | ✔ | ||||
复制支持 | ✔ | ✔ | ✔ | ✔ | ||
外键支持 | ✔ | ✔ | ||||
备份/时间点恢复 | ✔ | ✔ | ✔ | |||
查询缓存支持 | ✔ | ✔ | ✔ | |||
数据字典更新统计 | ✔ | ✔ | ✔ |