当前位置: 首页 > news >正文

【Day 30】Linux-Mysql数据库

 一、Mysql

    (一)Mysql安装

    1、Mysql版本

    • MySQL 的归属经历了三次重要变更:最初由 MySQL AB 公司开发运营,后被 Sun 公司收购;2009 年,Sun 公司又被 Oracle 公司收购,自此 MySQL 归入 Oracle 旗下。

    • MySQL 5.5:2010 年发布,首次将 InnoDB 设为默认存储引擎,支持半同步复制,优化了 InnoDB 性能,为企业级应用打下基础。

    • MySQL 5.6:2013 年发布,引入 GTID 简化主从复制配置,提升 InnoDB 并发能力,支持 InnoDB 全文索引和慢查询日志微秒级计时,强化高可用与性能。

    • MySQL 5.7:2015 年发布,支持原生 JSON 类型、透明页压缩、增强半同步复制等,优化 Performance Schema 减少内存使用,新实例不再默认创建 test 数据库及匿名用户等。

    • MySQL 8.0:2018 年正式发布,引入原生数据字典,重构 INFORMATION_SCHEMA,支持降序索引、公用表表达式、资源组等,默认字符集改为 utf8mb4 等。

    • MySQL 9.0.0:2024 年 7 月发布,新增 JavaScript 存储程序、VECTOR 类型支持、内联和隐式外键约束等诸多新功能。

    • MySQL 9.2.0:最新记录显示于 2025 年 1 月发布,扩展 JavaScript 相关支持,像添加 JavaScript 事务 API、JavaScript ENUM 和 SET 支持等。

    2、安装过程

    (1)从 MySQL 官方下载并安装适用于 EL7(CentOS 7/RHEL 7)系统的 YUM 源配置包

    //浏览器搜索

    //选择适合版本复制

    //该 RPM 包的核心功能是添加 MySQL 官方的 YUM 仓库配置

    //使用rpm -ivh命令,粘贴,回车。将刚刚复制的rpm包安装上。

    ///etc/yum.repos.d/目录是包管理器用于存储软件仓库配置文件的目录,执行成功后会在此目录下生成 MySQL 相关的 repo 文件。

    (2)通过 yum 安装 MySQL。

    //确认软件安装

    (3)启动服务并确认

    //启动 MySQL 服务时,首次启动会自动完成数据库初始化,具体包括:

    1. 创建系统数据库:自动生成核心系统数据库及表结构。

    2. 生成初始密码:为 root@localhost 生成随机临时密码,记录在 /var/log/mysqld.log 中。

    3. 初始化权限表:设置默认的用户权限、访问控制规则等基础安全配置。

    4. 创建必要目录:如数据目录、日志目录等,并设置正确的权限。

    • 若是破坏了 MySQL 判断 “已初始化” 的依据(关键文件 / 目录存在性),导致服务启动时,会重新执行初始化流程。

    • 触发初始化的例子:删除数据目录中的关键初始化文件、手动清空数据目录、首次安装后首次启动、使用 --initialize 或 --initialize-insecure 参数强制重新初始化(覆盖现有数据)、修改配置文件中数据目录路径为新空目录且新路径无初始化文件时。

    (4)查看临时密码

    //MySQL 5.7 及以上版本(包括正在安装的 MySQL 8.0)在首次启动时,会自动为 root 用户生成一个随机初始密码,并记录在日志文件中

    (5)修改root密码。输入临时密码-修改新密码

    //MySQL(尤其是 5.7 及以上版本)默认启用了密码复杂度验证插件(validate_password)。

    当插件件启用时,密码需满足:长度至少 8 字符、包含大写字母 、小写字母 、数字、特殊字符。

    3、主要相关文件

    • /etc/my.cnf
    • // MySQL 的默认配置文件。当 MySQL 服务启动时,会优先读取此文件中的配置。

    [mysqld] 段:所有 MySQL 服务器(mysqld 进程)相关的配置都需放在这个 section 下,确保参数被正确加载。

    • port=3306    // 默认端口;
    • character-set-server=utf8mb4  // 默认字符集;
    • max_connections=100      // 最大连接数限制等。

      • socket:套接字文件。接收本地访问请求。仅用于同一台服务器上的客户端与服务器通信,不支持跨机器连接(远程程连接需用 TCP/IP 端口 3306)。本质是一个特殊的文件。
      • 与 MySQL 相关的套接字文件:
      1. mysql.sock:实际用于通信的套接字文件,客户端通过读写此文件与服务器交换数据。
      2. mysql.sock.lock:套接字文件的锁文件,用于防止多个进程同时创建或修改 mysql.sock,确保通信唯一性。

      修改配置前需停止服务,修改配置后需重启 MySQL 服务(systemctl restart mysqld)才能生效。

      (1)更换存储目录且不需要旧的存储目录

      (2)更换存储目录,仍需旧存储目录

      //注意一定要是 cp -r /旧目录/*   /新目录/

      若是修改配置文件后,未复制旧目录就启动了。需要将启动后新目录中自动生成的初始化文件删掉后,再复制。

      (3)修改套接字文件

      若改为/A1/mysql.sock

      配置文件指定的 socket 路径(socket=/A1/mysql.sock)与默认连接的 socket 路径(/var/lib/mysql/mysql.sock)不同。

      (1)临时解决

      (2)永久解决

      • vim /etc/my.cnf        //添加


      • /var/lib/mysql
      • // MySQL 的默认数据存储目录,所有数据库、表、索引、权限等核心数据都存储在此处。

      • 每个数据库会在此目录下生成一个同名子目录,目录内包含该数据库的表文件。。
      • 权限要求严格:通常属主为 mysql:mysql,普通用户无读写权限,避免数据被误修改或删除。
      • 若需迁移数据,需严格复制此目录(需停止服务,确保数据一致性)。


      • /var/log/mysqld.log
      • // MySQL 服务的主要日志文件,记录服务器启动 / 关闭、错误信息、警告、连接日志等关键事件。

      4、系统数据库

      MySQL 首次启动初始化生成

      核心作用存储内容

      information_schema

      (信息数据库)

      提供 MySQL 服务器的 “元数据目录”,即数据库自身的结构信息。
      • 所有数据库、表、列的定义(如数据库名、表名、字段类型、长度、约束等)
      • 服务器支持的存储引擎、字符集、数据类型等基础信息;
      • 表的索引、分区、权限关联等结构细节。

      mysql

      (系统权限数据库)

      存储 MySQL 服务器的用户管理和权限控制核心数据。

      • 用户账号信息:user 表存储所有用户的用户名、加密密码、登录主机限制等
      • 权限配置:db(库级权限)、tables_priv(表级权限)、columns_priv(列级权限)等表记录用户对数据库、表、字段的操作权限
      • 角色管理、密码策略、SSL 配置等安全相关数据。
      • 此库损坏会导致用户无法登录或权限失效,需谨慎操作(建议定期备份)。

      performance_schema

      (性能监控数据库)

      实时监控 MySQL 服务器的运行状态,保存数据服务器性能相关的数据。
      • 当前活跃线程(threads 表)
      • 连接数(connections 表)
      • 连接状态(如 “Sleep”“Query”)
      • 资源消耗:CPU 使用率、内存占用、I/O 操作次数
      • 锁与等待:表锁、行锁的持有和等待情况
      • SQL 执行统计:语句执行次数、耗时、扫描行数

      sys

      (简化诊断数据库)

      基于information_schema

      performance_schema

      的 “简化视图库”,降低性能分析门槛,方便数据库管理员查看。

      • 预定义的视图:整合性能数据,用更直观的方式展示
      • 便捷函数:将原始性能数据转换为可读格式
      • 常见诊断场景的聚合结果。

      (二)SQL语句

      简称全称核心命令主要功能

      操作对象 /

      影响范围

      DQL数据查询语言SELECT从数据库中查询数据(仅读取,不修改)

      表中的记录(返回查询结果集)

      DML数据操作语言

      INSERTUPDATEDELETE、

      新增、修改、删除表中的记录表中的具体数据
      DDL数据定义语言CREATEALTERDROPTRUNCATE创建、修改、删除数据库对象;清空表数据数据库结构
      DCL数据控制语言GRANTREVOKE授予或收回用户对数据库对象的操作权限用户权限
      TCL事务控制语言COMMITROLLBACKSAVEPOINT管理事务,确保操作的原子性、一致性等事务

      1、库

      • > show databases;        //查看数据库
      • > create database 数据库名称;         //创建数据库。

              MySQL 8.0默认使用的字符集utf8,支持存储中文

      //MySQL 5.7默认使用的字符集是latin,不支持存储中文;可在创建数据库时通过选项charset指定字符集为utf8,方便在表中存储中文

      • > drop database 数据库名称;           //删除数据库

      2、表

      • >use 数据库;  //切换数据库
      • >show tables; //查看所有表
      • >desc 表名      //查看表结构
      • 创建表        

      • >drop table 表名 ;    //删除表
      • >insert into 表名(字段1,字段2,...) values (值1,值2,...);
      • >select * from 表名
      • >update 表名 set 字段名=新数据 where条件

              

      • >delete from 表名 where 条件 

              

      (1)数据类型(常用)
      • 数值型
      类型存储大小有效数字 / 范围适用场景精度损失
      整数类型
      TINYINT1 字节范围:-128 ~ 127(有符号);0 ~ 255(无符号)小范围整数
      SMALLINT2 字节范围:-32768 ~ 32767(有符号)中等范围整数(如班级人数)
      INT4 字节范围:-2^31 ~ 2^31-1常用整数(用户 ID、年龄)
      BIGINT8 字节范围:-2^63 ~ 2^63-1超大整数(订单号、海量数据 ID)
      浮点数 / 定点数
      FLOAT4 字节6-7 位有效数字,范围 ±3.4×10^38精度要求低的小数(如温度)
      DOUBLE8 字节15-17 位有效数字,范围 ±1.8×10^308较高精度的科学计算(如坐标)
      DECIMAL(M,D)可变(M+2 字节)

      M 为总位数(1-65)

      D 为小数位数(0-D)

      金额、汇率等需精确计算场景

      (如DECIMAL(10,2)表示最大 99999999.99)

      • 字符型
      类型存储特点最大长度限制适用场景
      VARCHAR(N)

      可变长度

      (按需分配空间)

      N 为字符数(最大 65535 字节,受行总长度限制)长度不固定的字符串(如姓名、地址)
      CHAR(N)

      固定长度

      占用 N 字符空间

      N 为字符数(最大 255)长度固定的字符串(如身份证号、手机号)
      TEXT

      长文本

      存储在独立空间

      最大 65535 字节(约 64KB)较长文本(如文章摘要、备注)
      LONGTEXT超长文本最大 4GB极长文本(如全文、日志)
      • 日期型
      类型格式示例范围适用场景
      DATE2025-8-181000-01-01 ~ 9999-12-31仅需日期(如出生日期)
      TIME11:11:11-838:59:59 ~ 838:59:59仅需时间(如上下班时间)
      DATETIME

      2025-8-18

      11:11:11

      1000-01-01 00:00:00 ~ 9999-12-31 23:59:59日期 + 时间(如订单创建时间)
      • 其他
      类型特点与取值适用场景
      BOOLEAN等价于TINTINT(1) TRUE,FALSE=0逻辑判断(如是否启用:1 = 是,0 = 否)
      ENUM枚举值(如ENUM('男','女','沃尔玛购物袋'))固定可选值的场景(如性别、状态)
      SET多选项(如SET('钢琴','长笛','竖琴'))多选场景(如用户兴趣标签)
      (2) 常用属性 / 约束(字段级)

      约束 / 属性

      作用说明

      示例

      NOT NULL

      字段值不能为NULL(强制必填)

      name VARCHAR(50) NOT NULL(姓名必须填写)

      PRIMARY KEY

      设为主键(唯一标识一条记录,自带NOT NULL属性,一个表只能有一个主键)

      id INT PRIMARY KEY(用 id 唯一标识用户)

      AUTO_INCREMENT

      数值自动递增(仅用于整数类型,配合主键使用,避免手动插入重复值)

      id INT PRIMARY KEY AUTO_INCREMENT(每次新增记录 id 自动 + 1)

      DEFAULT 值

      未显式插入值时,自动填充默认值

      status TINYINT DEFAULT 0(状态默认值为 0,代表 “未激活”)

      UNIQUE

      字段值唯一(允许NULL,但非NULL值不能重复,可用于唯一标识非主键字段)

      email VARCHAR(100) UNIQUE(邮箱地址不能重复)

      COMMENT ' 说明'

      字段注释(用于说明字段含义,方便后期维护和协作)

      age INT COMMENT '用户年龄(0-150岁)'

      CHECK (条件)

      限制字段值必须满足指定条件(MySQL 8.0 + 支持,确保数据合法性)

      age INT CHECK (age > 0 AND age <= 150)(年龄必须在 1-150 之间)

      FOREIGN KEY

      关联其他表的主键(字段级外键)

      class_id INT REFERENCES classes(class_id)(关联班级表的 class_id)

      UNSIGNED

      仅用于整数类型,限制字段值为非负数

      score INT UNSIGNED(分数不能为负)

      ZEROFILL

      整数类型专用,不足位数时用 0 填充

      order_no INT(6) ZEROFILL(订单号不足 6 位时补 0,如 “000123”)

      (3)表级约束(多字段关联)
      • 复合主键:多个字段组合唯一标识记录
        PRIMARY KEY (字段1, 字段2)
      • 外键关联:关联其他表的主键
        FOREIGN KEY (字段) REFERENCES 主表名(主表字段)
      (4)表选项(常用)
      • ENGINE = 存储引擎:如InnoDB(支持事务)、MyISAM(查询快)
      • CHARSET = 字符集:如utf8mb4(支持中文和 emoji)

      3、查询

      (1)单表查询
      ①选择列(SELECT)
      • SELECT 列名1, 列名2, ... FROM 表名;    //选择指定列

      • SELECT * FROM 表名;         // 选择所有列(*)

      • SELECT DISTINCT 列名 FROM 表名;        // DISTINCT去重

      • SELECT DISTINCT gender, age FROM student;    //根据多列的组合去重

      //DISTINCT必须放在所有列名之前,且若指定多列,会

      ②条件查询(WHERE)

      比较运算符:=(等于)、<>/!=(不等于)、>(大于)、<(小于)、>=(大于等于)、<=(小于等于)

      • SELECT name, age FROM student WHERE age > 18;  //查询student表中age>18 的学生。

      逻辑运算符 :AND(与)、OR(或)、NOT(非)。

      • SELECT name, age, score FROM student WHERE age > 18 AND score > 80;
      • //查询年龄大于 18 且分数大于 80 的学生
      • SELECT name, age FROM student WHERE NOT (age BETWEEN 18 AND 22);
      • //查询查询年龄不在 18-22 之间的学生
      ③范围查询(BETWEEN...AND...)
      • SELECT name, score FROM student WHERE score BETWEEN 80 AND 100;
      • //查询分数在 80 到 100 之间的学生
      ④集合查询(IN / NOT IN)

      IN用于筛选 “值在指定集合中” 的行;NOT IN 则相反。

      • SELECT name, age FROM student WHERE age IN (18, 20, 22);   
      • SELECT name, age FROM student WHERE age NOT IN (18, 20, 22);
      • //年龄为/不为18、20、22 的学生
      ⑤模糊查询(LIKE / NOT LIKE)

      用于字符串的模糊匹配,需配合通配符:

      • %:匹配任意多个字符(包括 0 个);

      • _:匹配单个字符。

      • SELECT name FROM student WHERE name LIKE '张%';    //查询姓名以 “张” 开头的学生
      • SELECT name FROM student WHERE name NOT LIKE '%李%';  //姓名中不含 “李” 的学生
      • SELECT name FROM student WHERE name LIKE '_子%';   //姓名第二个字是 “子” 的学生
      ⑥空值查询(IS NULL / IS NOT NULL)
      • SELECT name, score FROM student WHERE score IS NULL; 
      • SELECT name, score FROM student WHERE score IS NOT NULL;
      •  //查询student表内score为null/不为null的学生名

      (2)多表关联查询
      (3)排序查询

      排序结果(ORDER BY)

      • ASC :升序(默认,可省略);

      • DESC :降序;

      • 支持多列排序(先按第一列排,第一列相同则按第二列排)。

      SELECT 列名 FROM 表名 ORDER BY 排序列1 [ASC|DESC], 排序列2 [ASC|DESC];

      SELECT name, score FROM student ORDER BY score; -- 等价于 ORDER BY score ASC

      (4)聚合查询
      (5)去重查询

      (三)连接图形化工具

      点击变绿就是可以正常使用了。

      1、新建库

      2、新建表

      3、新建字段

      4、外键使用

      5、新建记录

      6、查询添加

      (四)存储引擎

      MySQL 的存储引擎是负责数据存储、检索和管理的核心组件。

      1. InnoDB(默认存储引擎)

      • 核心特性:支持事务(ACID 特性)、行级锁、外键约束,具备崩溃恢复能力(依赖 redo/undo 日志),采用聚簇索引提升查询效率。
      • 适用场景:需要事务保障(如电商订单、金融交易)、高并发读写、数据完整性要求高的业务。

      事务(Transaction) :由一系列数据库操作(如查询、插入、更新、删除等)组成的不可分割的逻辑工作单元。简单来说,事务要么完整地执行所有操作,要么在某个操作失败时,所有操作都回滚到初始状态,以此保证数据的一致性和完整性。

      2. MyISAM

      • 核心特性:不支持事务和外键,仅表级锁,查询速度快,占用资源少,支持全文索引(早期版本)。
      • 适用场景:读多写少、无事务需求的静态数据场景(如日志分析、报表系统)。

      3.Memory(Heap)

      • 核心特性:数据存于内存,读写速度极快,但服务器重启后数据丢失,支持哈希索引,表级锁。
      • 适用场景:临时数据缓存(如会话数据、临时计算结果)、高频访问且可丢失的数据。

      4. Archive

      • 核心特性:专为归档设计,压缩率高,仅支持插入和查询(不支持更新 / 删除),无索引(除自增 ID)。
      • 适用场景:大量历史数据归档(如用户行为日志、系统日志)。

      修改存储引擎

      • show create table user;    //返回表的创建语句,包括表结构、字段类型、索引、存储引擎等

      存储引擎

      表结构文件

      数据文件索引文件文件存储特点
      MyISAM.sdi

      .myd

      .myi

      1. 表结构、数据、索引完全分离为 3 个独立文件
      2. 所有文件在数据目录中直接可见
      3. .sdi单独存储表结构定义
      InnoDB嵌入在.ibd 文件中(无独立文件 )

      .ibd

      嵌入在.ibd文件中(无独立文件 )1. 数据和索引整合存储在.ibd 中
      2. 表结构元数据嵌入.ibd 内部,不生成独立 .sdi 文件
      3. 仅 .ibd 在数据目录中可见

      待补充

      http://www.lryc.cn/news/625051.html

      相关文章:

    • IDE开发系列(2)扩展的IDE框架设计
    • STC8单片机矩阵按键控制的功能实现
    • 分治-归并-493.翻转对-力扣(LeetCode)
    • Flutter 自定义 Switch 切换组件完全指南
    • Python 面向对象三大特性详解(与 C++ 对比)
    • Android Handler 线程执行机制
    • flutter项目适配鸿蒙
    • 【展厅多媒体】互动地砖屏怎么提升展厅互动感的?
    • 2025年最新美区Apple ID共享账号免费分享(持续更新)
    • 数组学习2
    • Java面试题储备14: 使用aop实现全局日志打印
    • 【HTML】document api
    • Vue 3中watch的返回值:解锁监听的隐藏技巧
    • C++---有符号和无符号整数的位移操作
    • RabbitMQ:数据隔离
    • kafka 冲突解决 kafka安装
    • Unity进阶--C#补充知识点--【Unity跨平台的原理】Mono与IL2CPP
    • 探索性测试:灵活找Bug的“人肉探测仪”
    • MongoDB Windows 系统实战手册:从配置到数据处理入门
    • keil错误:Error: failed to execute ‘D:\Keil\C51\BIN\BIN\A51.EXE‘
    • 【智慧工地源码】智慧工地云平台系统,涵盖安全、质量、环境、人员和设备五大管理模块,实现实时监控、智能预警和数据分析。
    • PYTHON让繁琐的工作自动化-猜数字游戏
    • 从数据汇总到高级分析,SQL 查询进阶实战(下篇)—— 分组、子查询与窗口函数全攻略
    • 车e估牵头正式启动乘用车金融价值评估师编制
    • CoRL 2025|隐空间扩散世界模型LaDi-WM大幅提升机器人操作策略的成功率和跨场景泛化能力
    • 从「行走」到「思考」:机器人进化之路与感知—决策链路的工程化实践
    • 第4.3节:awk正则表达式详解-特殊字符
    • Pytest测试框架基础及进阶
    • 前端css学习笔记7:各种居中布局空白问题
    • Jenkins全链路教程——Jenkins调用Maven构建项目