【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 存储引擎对比

相关推荐
Gauss松鼠会1 小时前
GaussDB 资源管理指南:冻结、解冻、释放与生命周期控制
数据库·人工智能·database·gaussdb
Echo木1 小时前
DeepSeek-R1学习
人工智能·学习·算法
字节王德发2 小时前
如何用Python和Selenium实现表单的自动填充与提交?
开发语言·python·selenium
genispan3 小时前
python基础8 单元测试
开发语言·python·单元测试
熬夜学编程的小王3 小时前
【Linux篇】初识Linux指令(下篇)
linux·运维·服务器·linux指令
WispX8883 小时前
【JVM】GC 常见问题
java·jvm·算法
安忘5 小时前
LeetCode-274.H 指数
算法·leetcode·职场和发展
咖啡の猫5 小时前
数据库的基本概念
数据库
xxxmmc5 小时前
Leetcode 160 Intersection of Two Linked Lists
算法·leetcode·双指针
小卓笔记5 小时前
keepalived应用
linux·服务器·数据库