【MySQL】数据库基础

目录

    • [前言 连接数据库](#前言 连接数据库)
  • 一、数据库基础
    • [1.1 什么是数据库?](#1.1 什么是数据库?)
    • [1.2 使用案例](#1.2 使用案例)
    • [1.3 主流数据库](#1.3 主流数据库)
    • [1.4 服务器、数据库和表之间的关系](#1.4 服务器、数据库和表之间的关系)
    • [1.5 MySQL 架构](#1.5 MySQL 架构)
    • [1.6 SQL 的分类](#1.6 SQL 的分类)
    • [1.7 存储引擎](#1.7 存储引擎)
      • [MySQL 存储引擎对比表](#MySQL 存储引擎对比表)

个人主页:矢望

个人专栏:C++LinuxC语言数据结构Coze-AIMySQL

前言 连接数据库

命令mysql -h 127.0.0.1 -P 3306 -u root -p。如下图所示。

参数 含义 说明
mysql MySQL 客户端程序 用于连接 MySQL 服务器并执行 SQL 语句
-h 127.0.0.1 主机地址(host 127.0.0.1 是本地回环地址,表示连接本机上的 MySQL 服务器
-P 3306 端口号(port MySQL 服务器的默认端口是 3306,这里显式指定
-u root 用户名(user 使用 root 账户登录,这是 MySQL 的超级管理员账号
-p 密码提示 表示需要输入密码,输入密码时不会显示字符(安全机制)

如上表所示,-h选项指明登录部署了mysql服务的主机,-P指明我们要访问的端口号,-u指明登录用户,-p指明需要输入密码登录。

上面的命令可以简化成mysql -u root -p,这就默认使用当前主机,默认使用默认的端口号3306,登录。

想要退出mysql,输入quit即可。如下图所示。

上图中,我进入mysql时,它有一个类似于命令行的东西,这是因为我配置了MySQL客户端配置文件~/.my.cnf才这样的,默认是mysql>

一、数据库基础

1.1 什么是数据库?

我们通过ps axj | grep mysqld,可以看到如下。

那么mysqlmysqld有什么区别呢?

mysql它是数据库服务的客户端,而mysqld它是数据库服务的服务器端。mysql的本质是基于CS(mysql mysqld)模式的一种网络服务。如下,它提供了服务的端口号。

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

存储数据用文件就可以了,为什么还要弄个数据库?

文件保存数据有以下几个缺点:文件存在安全性问题,文件不利于数据查询和管理,文件不利于存储海量数据,文件在程序中控制不方便。

一般的文件确实提供了数据的存储能力,但是文件并没有很好的数据内容管理能力,所以才需要有数据库。
数据库的本质就是对数据内容存储的一套解决方案,我们给它字段或者要求,数据库就会直接给我们返回结果

数据库能力不仅是对一个工具的使用熟练度,更是对数据本质、系统架构、业务抽象的综合理解。数据库的水平是衡量一个程序员水平的重要指标

1.2 使用案例

show databases;MySQL 中用于查看当前服务器上所有数据库的命令。
注意SQL 关键字(如 SHOW、DATABASES、SELECT、WHERE 等)是不区分大小写的。

如上就是当前所有数据库。

注意:在 MySQL 客户端中,SQL 语句必须以分号结尾,分号的作用是告诉客户端"语句结束,请执行"。MySQL 客户端允许输入多行语句,分号用于标识一条语句的结束,例如:

sql 复制代码
mysql> SELECT 
    -> *
    -> FROM 
    -> users
    -> WHERE id = 1;

上面是一条SQL语句。

接下来我们创建数据库create database XXX;,创建名为XXX的数据库。

如上,这样就创建出了数据库。另外 /var/lib/mysqlMySQL 数据库服务器在 Linux 系统上的默认数据存储目录。

我们切换到右边,看看新建的数据库。

如上图,所以建立的数据库,本质就是Linux上的一个目录

接下来,我们要在helloworld数据库中创建一个表student,在创建表之前我们需要先使用指定数据库,因为我们的数据库有很多。指令use helloworld;create table XXX();用于创建表。

sql 复制代码
CREATE TABLE student (
    name   varchar(35),   -- 这一整行称为一个"列定义"
    age    int,           -- age 是列名
    gender varchar(2)     -- gender 是列名
);

我们在右侧查询。

所以在数据库中创建表,本质就是在Linux下创建对应的文件,并且这个文件在创建的时候里面是有内容的。

在表中插入数据:INSERT INTO 表名 (列1, 列2, 列3, ...) VALUES (值1, 值2, 值3, ...);

查询表中的数据:select * from student;

上面的工作是mysqld服务帮我们做的。数据库的本质也是文件,只不过这些文件不由程序员直接操作,而是由数据库服务帮我们进行操作

system clear;用于在mysql客户端清屏。

表的数据存储逻辑结构是列和行,在关系型数据库中,表Table的逻辑结构是一个二维矩阵:

组成部分 说明
Row 也称为记录Record或元组Tuple,代表一个实体的一条完整数据
Column 也称为字段Field或属性Attribute,代表实体的某个特征或属性

1.3 主流数据库

数据库 开发商 适用场景 核心特点
SQL Server 微软 中大型项目 .NET 生态集成好,Windows 平台首选
Oracle 甲骨文 大型项目、复杂业务 功能最强、最稳定,价格昂贵
MySQL 甲骨文 电商、SNS、论坛 并发性能好,互联网应用首选
PostgreSQL 伯克利分校 通用型 开源功能最丰富,标准兼容性高
SQLite 公共领域 嵌入式、移动端 轻量级,单文件,零配置
H2 H2 团队 Java 嵌入式开发 Java 实现,内存模式适合测试

1.4 服务器、数据库和表之间的关系

所谓安装数据库服务器,只是在机器上安装了一个数据库管理系统程序,这个管理程序可以管理多个数据库,一般开发人员会针对每一个应用创建一个数据库。为保存应用中实体的数据,一般会在数据库中创建多个表,以保存程序中实体的数据

1.5 MySQL 架构

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

上图 MySQL 采用分层架构设计:最上层为客户端连接层 ,负责连接管理、认证授权及提供 SQL 接口与各类实用工具;中间为核心服务层 ,包含查询优化器(负责 SQL 解析、重写与执行计划生成)和缓存机制;下层为可插拔存储引擎层 ,支持 InnoDB、MyISAM、Memory 等多种引擎,实现数据存储与访问逻辑的灵活替换;最底层是物理存储层 ,数据与索引实际存放于文件系统(如 NTFS、ext4)中,并辅以二进制日志、重做日志、撤销日志等完整日志体系,保障数据持久性、事务 ACID 特性及高可用能力。这种"SQL 接口统一、存储引擎可插拔"的架构,使 MySQL 能够在同一套 SQL 语法下满足 OLTP、只读查询、归档等多种业务场景需求。

1.6 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.7 存储引擎

存储引擎是:数据库管理系统如何存储数据、如何为存储的数据建立索引和如何更新、查询数据等技术的实现方法

MySQL的核心就是插件式存储引擎,支持多种存储引擎。

查看存储引擎show engines;

MySQL 存储引擎对比表

引擎 支持状态 事务 XA 保存点 锁粒度 主要特点 适用场景
InnoDB 默认 支持 支持 支持 行级锁 支持事务、外键、崩溃恢复 常规业务、高并发OLTP
MEMORY 不支持 不支持 不支持 表级锁 基于哈希,内存存储,速度快 临时表、缓存数据
MyISAM 不支持 不支持 不支持 表级锁 读性能好,不支持事务 只读查询、数据仓库
MRG_MYISAM 不支持 不支持 不支持 表级锁 多个MyISAM表的集合 分表后的统一查询
BLACKHOLE 不支持 不支持 不支持 表级锁 写入数据直接丢弃 复制过滤、性能测试
CSV 不支持 不支持 不支持 表级锁 以CSV格式存储 数据导入导出、跨平台交换
ARCHIVE 不支持 不支持 不支持 行级锁 高压缩比,只支持插入和查询 日志归档、历史数据
PERFORMANCE_SCHEMA 不支持 不支持 不支持 表级锁 收集性能监控数据 数据库性能诊断
ndbcluster 支持 支持 支持 行级锁 分布式集群,高可用 MySQL Cluster集群环境
FEDERATED 不支持 不支持 不支持 表级锁 访问远程MySQL 跨库数据访问
ndbinfo 不支持 不支持 不支持 表级锁 集群系统信息存储 集群状态监控

总结:
以上就是本期博客分享的全部内容啦!如果觉得文章还不错的话可以三连支持一下,你的支持就是我前进最大的动力!
技术的探索永无止境! 道阻且长,行则将至!后续我会给大家带来更多优质博客内容,欢迎关注我的CSDN账号,我们一同成长!
(~ ̄▽ ̄)~

相关推荐
2401_895521342 小时前
mysql中general_log日志详解
android·数据库·mysql
亓才孓2 小时前
【MySQL】索引和SQL优化
数据库·sql·mysql
百锦再2 小时前
Spring Boot + JWT + RBAC 权限系统实战,从登录鉴权到接口级权限控制完整落地
java·数据库·spring boot·后端·sql·mysql·oracle
我不听你讲话2 小时前
第 2 章 MySQL 数据库操作
数据库·mysql·adb
草莓熊Lotso3 小时前
Linux IPC 进阶:System V 消息队列与信号量(含内核管理深度解析)
linux·运维·服务器·数据库·c++·人工智能·mysql
星马梦缘9 小时前
数据库作战记录1
数据库·sql·mysql
鸡蛋灌Bean11 小时前
MySQL优化系列
数据库·mysql
FirstFrost --sy16 小时前
MySQL复合查询
数据库·mysql
imuliuliang17 小时前
MySQL的底层原理与架构
数据库·mysql·架构