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

news/2025/2/8 11:38:44 标签: 数据库, mysql, 开发语言, 算法, linux

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

💗系列专栏: 【C语言详解】 【数据结构详解】【C++详解】【Linux系统编程】【MySQL】

目录

1. 数据库基础

1.1 什么是数据库

1.2 主流数据库

1.3 基本使用

1.3.1 MySQL安装

1.3.2 连接服务器

1.3.3 服务器管理

1.3.4 服务器,数据库,表关系

1.3.5 使用案例 

1.3.6 数据逻辑存储 

1.4 MySQL架构

1.5 SQL分类

1.6 存储引擎

1.6.1 存储引擎

1.6.2 查看存储引擎

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. 根据上面的命令结果,我们得出以下基本认知:

2. 

  • mysql是一套给我们提供数据存取的服务的网络程序
  • 数据库一般指的是:在磁盘或者内存中存储的特定结构组织的数据 -- 将来在磁盘上存储的一套数据库方案
  • 数据库服务 --- mysqld

3. 

  • 一般的文件确实提供了数据的存储功能,但是文件并没有提供非常好的的数据(内容)管理能力(用户角度)
  • 数据库本质:对数据内容存储的一套解决方案,你给数据库服务字段或者要求,它就直接给你结果

 

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

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

数据库存储介质:

  • 磁盘
  • 内存

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


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


http://www.niftyadmin.cn/n/5844822.html

相关文章

C++,设计模式,【单例模式】

文章目录 一、模式定义与核心价值二、模式结构解析三、关键实现技术演进1. 基础版(非线程安全)2. 线程安全版(双重检查锁)3. 现代C++实现(C++11起)四、实战案例:全局日志管理器五、模式优缺点深度分析✅ 核心优势⚠️ 潜在缺陷六、典型应用场景七、高级实现技巧1. 模板化…

ReactNative进阶(五十九):存量 react-native 项目适配 HarmonyOS NEXT

文章目录 一、前言二、ohos_react_native2.1 Fabric2.2 TurboModule2.2.1 ArkTSTurboModule2.2.2 cxxTurboModule: 三、拓展阅读 一、前言 2024年10月22日19:00,华为在深圳举办“原生鸿蒙之夜暨华为全场景新品发布会”,主题为“星河璀璨&…

58页PPT学习华为面向业务价值的数据治理实践

目录 1. 正文解读... 1 2. 华为数据质量管控的质量度量框架是怎样的?... 2 3. 如何在企业中实施类似华为的数据质量管控

Baumer工业相机堡盟相机的相机传感器芯片清洁指南

Baumer工业相机堡盟相机的相机传感器芯片清洁指南 Baumer工业相机1.Baumer工业相机传感器芯片清洁工具和清洁剂2.Baumer工业相机传感器芯片清洁步骤2.1、准备步骤2.2、清洁过程1.定位清洁工具2.清洁传感器3.使用吹风装置 Baumer工业相机传感器芯片清洁的优势设计与结…

树莓派5添加摄像头 在C++下调用opencv

由于树莓派5 os系统升级,正常libcamera创建对象每次失败。 改如下方法成功。 1 创建管道 rpicam-vid -t 0 --codec mjpeg -o udp://127.0.0.1:8554 > /dev/null 2>&1 2 opencv从管道里读取 #include <opencv2/opencv.hpp> #include <iostream>int mai…

npm-npm ERR! missing script: serve

1.前言 vue运行项目时报错 npm ERR! missing script: serve 2.解决 在使用npm&#xff08;Node Package Manager&#xff09;时遇到“npm ERR! missing script: serve”的错误通常意味着在项目的package.json文件中没有定义名为serve的脚本。或者是未找到package.json文件。…

MongoDB开发规范

分级名称定义P0核心系统需7*24不间断运行&#xff0c;一旦发生不可用&#xff0c;会直接影响核心业务的连续性&#xff0c;或影响公司名誉、品牌、集团战略、营销计划等&#xff0c;可能会造成P0-P2级事故发生。P1次核心系统这些系统降级或不可用&#xff0c;会间接影响用户使用…

换电脑了如何快速导出vscode里的插件

当你换电脑了&#xff0c;之前vscode里的插件又不想全部手动重装&#xff0c;那么恭喜你&#xff0c;刷到了这篇文章。 1. 将 VSCode 添加到系统路径 macOS 打开 VSCode。按下 Command Shift P 打开命令面板。 3。 输入 Shell Command: Install ‘code’ command in PATH …