【MySQL】第二弹---数据库基础全解析:从概念到实践的深度探索

✨个人主页:熬夜学编程的小林

💗系列专栏: 【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. 根据上面的命令结果,我们得出以下基本认知:
  • 1、mysql是数据库服务的客户端
  • 2、mysqld是数据库服务的服务器端
  • 3、mysql本质:基于C (mysql) S (mysqld) 模式的一种网络服务
  • mysql是一套给我们提供数据存取的服务的网络程序
  • 数据库一般指的是:在磁盘或者内存中存储的特定结构组织的数据 -- 将来在磁盘上存储的一套数据库方案
  • 数据库服务 --- mysqld
  • 一般的文件确实提供了数据的存储功能,但是文件并没有提供非常好的的数据(内容)管理能力(用户角度)
  • 数据库本质:对数据内容存储的一套解决方案,你给数据库服务字段或者要求,它就直接给你结果

存储数据用文件就可以了,为什么还要弄个数据库?
文件保存数据有以下几个缺点:

  • 文件的安全性问题
  • 文件不利于数据查询和管理
  • 文件不利于存储海量数据
  • 文件在程序中控制不方便

数据库存储介质:

  • 磁盘
  • 内存

为了解决上述问题,专家们设计出更加利于管理数据的东西 ------数据库 ,它能更有效的管理数据。数据库的水平是衡量一个程序员水平的重要指标。

1.2 主流数据库

  • SQL Sever: 微软的产品,.Net程序员的最爱,中大型项目。
  • Oracle: 甲骨文产品,适合大型项目,复杂的业务逻辑,并发一般来说不如MySQL。
  • MySQL:世界上最受欢迎的数据库,属于甲骨文,并发性好,不适合做复杂的业务。主要用在电商,SNS,论坛。对简单的SQL处理效果好。
  • PostgreSQL :加州大学伯克利分校计算机系开发的关系型数据库,不管是私用,商用,还是学术研究使用,可以免费使用,修改和分发。
  • SQLite: 是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中。它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。
  • H2: 是一个用Java开发的嵌入式数据库,它本身只是一个类库,可以直接嵌入到应用项目中。

1.3 基本使用

1.3.1 MySQL安装

CentOS 6.5下编译安装MySQL 5.6.14

CentOS 7 通过 yum 安装 MariaDB

Windows下安装MySQL5.7

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

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';

运行结果

查看数据库

mysql> show databases; # 查看数据库
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.00 sec)

运行结果

创建数据库

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)

运行结果

创建数据库表

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)

运行结果

表中插入数据

字符输入汉字有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';

修改编码前

修改编码格式

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 数据逻辑存储

补充mysql命令

system clear # 清空屏幕 等价于命令行中clear
mysql> quit # 退出mysql
Bye
mysql> ^DBye # 退出mysql

1.4 MySQL架构

MySQL 是一个可移植的数据库,几乎能在当前所有的操作系统上运行,如 Unix/Linux、Windows、Mac 和 Solaris。各种系统在底层实现方面各有不同,但是 MySQL 基本上能保证在各个平台上的物理体系结构的一致性。

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)

1.6.3 存储引擎对比

相关推荐
努力d小白9 分钟前
leetcode994.腐烂的橘子
算法
LNsupermali11 分钟前
力扣.270. 最接近的二叉搜索树值(中序遍历思想)
java·算法·leetcode
利瑞华36 分钟前
Redis 深度解析 —— 高频面试题与核心知识点
数据库·redis·缓存
gyeolhada42 分钟前
2025蓝桥杯JAVA编程题练习Day3
java·数据结构·算法·蓝桥杯
钮钴禄·爱因斯晨1 小时前
赛博算命之 ”梅花易数“ 的 “JAVA“ 实现 ——从玄学到科学的探索
java·开发语言·python
robin_suli1 小时前
穷举vs暴搜vs深搜vs回溯vs剪枝系列一>不同路径 III
算法·剪枝·深度优先遍历·回溯
vip1024p1 小时前
【玩转全栈】----Django基本配置和介绍
数据库·django·sqlite
云边有个稻草人1 小时前
DeepSeek与人工智能的结合:探索搜索技术的未来
人工智能·笔记·科技·算法·deepseek
喵~来学编程啦1 小时前
【通俗易懂说模型】非线性回归和逻辑回归(附神经网络图详细解释)
人工智能·pytorch·深度学习·算法·回归
诚丞成1 小时前
BFS算法篇——广度优先搜索,探索未知的旅程(上)
算法·宽度优先