✨个人主页:熬夜学编程的小林
💗系列专栏: 【C语言详解】 【数据结构详解】【C++详解】【Linux系统编程】【MySQL】
目录
[1. 数据库基础](#1. 数据库基础)
[1.1 什么是数据库](#1.1 什么是数据库)
[1.2 主流数据库](#1.2 主流数据库)
[1.3 基本使用](#1.3 基本使用)
[1.3.1 MySQL安装](#1.3.1 MySQL安装)
[1.3.2 连接服务器](#1.3.2 连接服务器)
[1.3.3 服务器管理](#1.3.3 服务器管理)
[1.3.4 服务器,数据库,表关系](#1.3.4 服务器,数据库,表关系)
[1.3.5 使用案例](#1.3.5 使用案例)
[1.3.6 数据逻辑存储](#1.3.6 数据逻辑存储)
[1.4 MySQL架构](#1.4 MySQL架构)
[1.5 SQL分类](#1.5 SQL分类)
[1.6 存储引擎](#1.6 存储引擎)
[1.6.1 存储引擎](#1.6.1 存储引擎)
[1.6.2 查看存储引擎](#1.6.2 查看存储引擎)
[1.6.3 存储引擎对比](#1.6.3 存储引擎对比)
1. 数据库基础
1.1 什么是数据库
[root@host mysql]# ps ajx | grep mysql
1 8380 8379 8379 ? -1 Sl 27 0:11 /usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid
25520 21917 21916 25520 pts/0 21916 R+ 0 0:00 grep --color=auto mysql
[root@host mysql]# which mysql
/usr/bin/mysql
[root@host mysql]# which mysqld
/usr/sbin/mysqld
[root@host mysql]# netstat -nltp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp6 0 0 :::3306 :::* LISTEN 8380/mysqld
- 根据上面的命令结果,我们得出以下基本认知:
- 1、mysql是数据库服务的客户端
- 2、mysqld是数据库服务的服务器端
- 3、mysql本质:基于C (mysql) S (mysqld) 模式的一种网络服务
- mysql是一套给我们提供数据存取的服务的网络程序
- 数据库一般指的是:在磁盘或者内存中存储的特定结构组织的数据 -- 将来在磁盘上存储的一套数据库方案
- 数据库服务 --- mysqld
- 一般的文件确实提供了数据的存储功能,但是文件并没有提供非常好的的数据(内容)管理能力(用户角度)
- 数据库本质:对数据内容存储的一套解决方案,你给数据库服务字段或者要求,它就直接给你结果
![](https://i-blog.csdnimg.cn/direct/f73654ce6a5d49cea2fa0b396eedddc2.png)
存储数据用文件就可以了,为什么还要弄个数据库?
文件保存数据有以下几个缺点:
- 文件的安全性问题
- 文件不利于数据查询和管理
- 文件不利于存储海量数据
- 文件在程序中控制不方便
数据库存储介质:
- 磁盘
- 内存
为了解决上述问题,专家们设计出更加利于管理数据的东西 ------数据库 ,它能更有效的管理数据。数据库的水平是衡量一个程序员水平的重要指标。
1.2 主流数据库
- SQL Sever: 微软的产品,.Net程序员的最爱,中大型项目。
- Oracle: 甲骨文产品,适合大型项目,复杂的业务逻辑,并发一般来说不如MySQL。
- MySQL:世界上最受欢迎的数据库,属于甲骨文,并发性好,不适合做复杂的业务。主要用在电商,SNS,论坛。对简单的SQL处理效果好。
- PostgreSQL :加州大学伯克利分校计算机系开发的关系型数据库,不管是私用,商用,还是学术研究使用,可以免费使用,修改和分发。
- SQLite: 是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中。它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。
- H2: 是一个用Java开发的嵌入式数据库,它本身只是一个类库,可以直接嵌入到应用项目中。
1.3 基本使用
1.3.1 MySQL安装
1.3.2 连接服务器
输入:
mysql -h 127.0.0.1 -P 3306 -u root -p
-h : 指明登录部署了mysql服务的主机
-P : 指明我们要的端口号
-u : 指明登录用户
-p : 指明需要输入密码
注意:
密码输入的时候是不会回显的。
输出(需要密码):
Enter password:
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
博主的版本必须输入临时密码才能登录,如果是高版本的mysql无需密码即可登录,即回车则登录成功。
临时密码查看命令
grep 'temporary password' /var/log/mysqld.log # 使用root账号
注意:
使用root账号直接输入上面命令即可,普通用户需要加sudo提权。
输出(无需密码):
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 6
Server version: 5.7.44
Copyright (c) 2000, 2023, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
注意:
- 如果没有写 -h 127.0.0.1 默认是连接本地
- 如果没有写 -P 3306 默认是连接3306端口号
1.3.3 服务器管理
- 执行 win+r 输入 services.msc 打开服务管理器
- 通过下图左侧停止,暂停,重启动按钮进行服务管理
windows下的mysql
![](https://i-blog.csdnimg.cn/direct/a8d21b55eb9b47b3b6a803b846f62fdf.png)
1.3.4 服务器,数据库,表关系
- 所谓安装数据库服务器,只是在机器上安装了一个数据库管理系统程序,这个管理程序可以管理多个数据库,一般开发人员会针对每一个应用创建一个数据库。
- 为保存应用中实体的数据,一般会在数据库中创建多个表,以保存程序中实体的数据。
- 数据库服务器、数据库和表的关系如下:
1.3.5 使用案例
查看数据库
mysql> show databases;
ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.
使用mysql语句之前需要先将修改临时密码才能使用。
设置密码
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
安全强度,默认为中,即1,要求必须包含 数字、符号、大小写字母,长度至少为8位,因此我们想设置简单密码需要更改安全强度。
设置密码安全强度
set global validate_password_policy=0;# 将密码强度设置为低
set global validate_password_length=1;# 将密码最短长度设置为1
继续设置密码
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';
运行结果
![](https://i-blog.csdnimg.cn/direct/071f118b767a4cdd84ae76259de6fcec.png)
查看数据库
mysql> show databases; # 查看数据库
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.00 sec)
运行结果
![](https://i-blog.csdnimg.cn/direct/4887288a307a4e5aa8bb4075deb91132.png)
创建数据库
mysql> create database helloworld; # 创建数据库
Query OK, 1 row affected (0.00 sec)
mysql> show databases; # 查看数据库
+--------------------+
| Database |
+--------------------+
| information_schema |
| helloworld |
| mysql |
| performance_schema |
| sys |
+--------------------+
5 rows in set (0.00 sec)
运行结果
![](https://i-blog.csdnimg.cn/direct/7c9015a1005f4b9e8ac968ed7dfe4406.png)
创建数据库表
mysql> use helloworld; # 使用刚创建的数据库
Database changed
mysql> create table student( # 新建数据库表
-> name varchar(32),
-> age int,
-> gender varchar(2)
-> );
Query OK, 0 rows affected (0.03 sec)
运行结果
![](https://i-blog.csdnimg.cn/direct/e2b571a4d8f142458e61cb04bf4fb395.png)
表中插入数据
字符输入汉字有bug
mysql> insert into student (name,age,gender) values('张三',18,'男');
ERROR 1366 (HY000): Incorrect string value: '\xE5\xBC\xA0\xE4\xB8\x89' for column 'name' at row 1
使用以下命令查看编码
SHOW VARIABLES LIKE 'character_set%';
SHOW TABLE STATUS LIKE 'student';
修改编码前
![](https://i-blog.csdnimg.cn/direct/0ce47e0b81fc4d4abac74546de1a27f7.png)
修改编码格式
ALTER DATABASE your_database_name CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
ALTER TABLE student CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
修改编码后
改为输入英文
mysql> insert into student (name,age,gender) values('zhangsan',18,'n');
Query OK, 1 row affected (0.01 sec)
mysql> insert into student (name,age,gender) values('zhangsan',18,'n');
Query OK, 1 row affected (0.00 sec)
mysql> insert into student (name,age,gender) values('zhangsan',18,'n');
Query OK, 1 row affected (0.01 sec)
查询表中的数据
mysql> select * from student;
+----------+------+--------+
| name | age | gender |
+----------+------+--------+
| zhangsan | 18 | n |
| zhangsan | 18 | n |
| zhangsan | 18 | n |
+----------+------+--------+
3 rows in set (0.01 sec)
输入中文
mysql> insert into student(name,age,gender) values('张三',18,'男');
Query OK, 1 row affected (0.01 sec)
mysql> select * from student;
+----------+------+--------+
| name | age | gender |
+----------+------+--------+
| zhangsan | 18 | n |
| zhangsan | 18 | n |
| zhangsan | 18 | n |
| 张三 | 18 | 男 |
+----------+------+--------+
4 rows in set (0.00 sec)
1.3.6 数据逻辑存储
![](https://i-blog.csdnimg.cn/direct/37094b9643eb436f89ea23b5c83e7006.png)
补充mysql命令
system clear # 清空屏幕 等价于命令行中clear
mysql> quit # 退出mysql
Bye
mysql> ^DBye # 退出mysql
1.4 MySQL架构
MySQL 是一个可移植的数据库,几乎能在当前所有的操作系统上运行,如 Unix/Linux、Windows、Mac 和 Solaris。各种系统在底层实现方面各有不同,但是 MySQL 基本上能保证在各个平台上的物理体系结构的一致性。
![](https://i-blog.csdnimg.cn/direct/b1b68d6cc9214d95b35a206e73957ce5.png)
1.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
1.6 存储引擎
1.6.1 存储引擎
存储引擎是:数据库管理系统如何存储数据、如何为存储的数据建立索引和如何更新、查询数据等技术的实现方法。
MySQL的核心就是插件式存储引擎,支持多种存储引擎。
1.6.2 查看存储引擎
mysql> show engines;
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| 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 |
| MyISAM | YES | MyISAM storage engine | NO | NO | NO |
| CSV | YES | CSV storage engine | NO | NO | NO |
| ARCHIVE | YES | Archive storage engine | NO | NO | NO |
| PERFORMANCE_SCHEMA | YES | Performance Schema | NO | NO | NO |
| FEDERATED | NO | Federated MySQL storage engine | NULL | NULL | NULL |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
9 rows in set (0.00 sec)
![](https://i-blog.csdnimg.cn/direct/f86ff41fd7a5494ab26a52ccc8aa652d.png)
1.6.3 存储引擎对比
![](https://i-blog.csdnimg.cn/direct/fc94b7d13cc8475a8e922b2dd86248eb.png)