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

Mysql数据库基础(上)

什么是数据库

一句话:数据库就是有组织地存储和管理数据的系统

举个生活例子:
像图书馆的“图书目录卡”——每张卡记录一本书的信息(书名、作者、位置),而数据库把这“目录卡”电子化、系统化,还能让多人同时快速查找、增删改。

核心作用:

  • :把大量数据安全地存起来

  • :防止重复、丢失、错乱

  • :随时按条件快速查询、统计、分析

最常见的两类:

  1. 关系型(如MySQL):像Excel表格,行列清晰,适合订单、用户账号等。

  2. 非关系型(如Redis、MongoDB):更灵活,适合缓存、日志、社交网络等。                       

一.数据库基本分类

 1. 按数据模型分类(最常用)

类型特点代表产品
关系型(RDBMS)表格结构,支持SQL,事务强一致性MySQL、PostgreSQL、Oracle、SQL Server
键值型(Key-Value)简单键值对,高性能,扩展性强Redis、Amazon DynamoDB
文档型(Document)半结构化数据(JSON/BSON),灵活schemaMongoDB、Couchbase
列族型(Column-Family)列式存储,适合大数据和分布式Apache Cassandra、HBase
图数据库(Graph)处理复杂关系数据(节点/边)Neo4j、Amazon Neptune

2. 按架构/部署方式分类

类型特点代表产品
单机数据库部署简单,适合小规模SQLite、MySQL(单机部署)
分布式数据库支持水平扩展,高可用TiDB(NewSQL)、CockroachDB
云数据库托管服务,弹性伸缩Amazon RDS、阿里云PolarDB
边缘数据库轻量级,适合边缘计算SQLite、Dqlite、Rqlite

3. 按使用场景分类

场景需求特点推荐类型
OLTP(在线事务处理)高并发读写,强一致性关系型(MySQL)、NewSQL(TiDB)
OLAP(在线分析处理)复杂查询,批量聚合列式数据库(ClickHouse、Snowflake)
缓存/会话存储极高速读写,临时数据键值型(Redis)
IoT/时序数据时间序列,高写入InfluxDB、TimescaleDB
内容管理/日志半结构化数据文档型(MongoDB)

 4. 其他特殊分类

类型说明例子
时序数据库专门优化时间序列数据InfluxDB、TimescaleDB
搜索引擎数据库全文检索,倒排索引Elasticsearch、Solr
多模数据库支持多种数据模型MongoDB(文档+图)、ArangoDB
区块链数据库去中心化,不可篡改BigchainDB、Hyperledger Fabric

🧭 如何选择?

  • 需要复杂事务? → 关系型(如PostgreSQL)

  • 需要高性能缓存? → 键值型(如Redis)

  • 需要灵活Schema? → 文档型(如MongoDB)

  • 需要处理社交网络/推荐? → 图数据库(如Neo4j)

  • 需要分析TB级日志? → 列式OLAP(如ClickHouse)

二.数据库基本操作

一份“从 0 到 1”的 MySQL 四层操作全景手册
数据库 → 表 → 列 → 行,每一步都给出语法模板 + 典型示例 + 易踩的坑。直接复制即可运行。


0️⃣ 登录 & 全局命令

mysql -u root -p        # 登录
SHOW DATABASES;         -- 查看所有数据库
SELECT VERSION();       -- 查看版本

1️⃣ 数据库(Database)操作

动作模板示例常见坑
创建CREATE DATABASE dbname [CHARSET=utf8mb4];CREATE DATABASE school CHARSET=utf8mb4;忘写字符集会导致中文乱码
切换USE dbname;USE school;不切换就操作表会报 No database selected
查看SHOW DATABASES;
删除DROP DATABASE dbname;DROP DATABASE school;整库连带所有表瞬间消失,慎用!

2️⃣ 表(Table)操作

动作模板示例常见坑
创建CREATE TABLE tbl (col1 类型 约束, col2 …);CREATE TABLE student(id INT PRIMARY KEY, name VARCHAR(20) NOT NULL, score TINYINT);主键/非空约束写错会导致插入失败
查看所有表SHOW TABLES;必须先 USE db
查看表结构DESC tbl; 或 SHOW CREATE TABLE tbl\GDESC student;\G 纵向显示,字段多时更清晰
重命名表ALTER TABLE old RENAME TO new;ALTER TABLE student RENAME TO stu;旧表引用会失效
删除表DROP TABLE tbl;DROP TABLE student;不可逆

3️⃣ 列(Column / 字段)操作

动作模板示例备注
新增列ALTER TABLE tbl ADD COLUMN col 类型 [约束] [FIRST|AFTER 某列];ALTER TABLE student ADD COLUMN age TINYINT AFTER name;不写 AFTER 默认追加到最后
修改列类型/约束ALTER TABLE tbl MODIFY COLUMN col 新类型 新约束;ALTER TABLE student MODIFY COLUMN age SMALLINT NOT NULL;会重写整张表,大表耗时长
重命名列ALTER TABLE tbl CHANGE 旧名 新名 新类型 新约束;ALTER TABLE student CHANGE score chinese TINYINT;新旧名相同也可改类型
删除列ALTER TABLE tbl DROP COLUMN col;ALTER TABLE student DROP COLUMN age;数据立即丢失

4️⃣ 行(Row / 记录)操作

动作模板示例常见坑
插入单行INSERT INTO tbl(col1,col2,…) VALUES (v1,v2,…);INSERT INTO student(id,name,chinese) VALUES (1,'张三',95);列数/顺序必须一一对应
插入多行INSERT INTO tbl(col…) VALUES (…),(…),…;INSERT INTO student VALUES (2,'李四',88),(3,'王五',90);一次性提交,效率高
查询SELECT 列 FROM tbl [WHERE 条件] [ORDER BY …] [LIMIT n];SELECT * FROM student WHERE chinese>=90 ORDER BY id DESC LIMIT 2;无 WHERE 会全表扫描
更新UPDATE tbl SET col1=v1,… [WHERE 条件];UPDATE student SET chinese=100 WHERE id=2;忘写 WHERE 会更新整张表
删除行DELETE FROM tbl [WHERE 条件];DELETE FROM student WHERE id=3;忘写 WHERE 会清空表

🔍 一张图速查(复制保存)

+-----------------------------+
| 数据库:CREATE/DROP/USE     |
+-----------------------------+
| 表:CREATE/DROP/ALTER TABLE |
+-----------------------------+
| 列:ADD/MODIFY/CHANGE/DROP  |
+-----------------------------+
| 行:INSERT/SELECT/UPDATE/DELETE |
+-----------------------------+

把这张“四层结构”记牢,90% 的 MySQL 日常需求都能快速定位到对应命令。

三.数据库约束

数据库约束(Constraint)就是给列或表加的“规则”,用来保证数据的完整性和一致性。
MySQL 中常用的 6 大约束,一张表即可秒懂:

表格

复制

约束名关键字作用示例备注
主键PRIMARY KEY唯一 + 非空id INT PRIMARY KEY一张表只能有 1 个
唯一UNIQUE值不能重复,可空email VARCHAR(50) UNIQUE可多个唯一约束
非空NOT NULL禁止 NULLname VARCHAR(20) NOT NULL最常见
默认值DEFAULT未填时用默认值status TINYINT DEFAULT 1省代码
外键FOREIGN KEY跨表引用完整性dept_id INT, FOREIGN KEY(dept_id) REFERENCES dept(id)支持级联更新/删除
检查CHECK自定义表达式age TINYINT CHECK (age BETWEEN 0 AND 150)MySQL 8.0.16+ 真正生效

一、列级写法(最简)

CREATE TABLE user (id      INT PRIMARY KEY,email   VARCHAR(50) UNIQUE,name    VARCHAR(20) NOT NULL,age     TINYINT CHECK (age BETWEEN 0 AND 150),status  TINYINT DEFAULT 1
);

二、表级写法(复合主键 / 外键推荐)

CREATE TABLE score (stu_id  INT,course  VARCHAR(20),mark    INT,PRIMARY KEY (stu_id, course),              -- 复合主键FOREIGN KEY (stu_id) REFERENCES user(id)ON UPDATE CASCADEON DELETE CASCADE
);

三、常见级联动作

  • ON UPDATE CASCADE:主表更新,子表同步更新

  • ON DELETE CASCADE:主表删除,子表对应行一起删

  • ON DELETE SET NULL:主表删除,子表外键置 NULL(需列允许 NULL)


四、查看与维护

-- 查看表的约束
SELECT * FROM information_schema.table_constraints
WHERE table_schema='school' AND table_name='user';-- 删除约束
ALTER TABLE user DROP PRIMARY KEY;          -- 删主键
ALTER TABLE user DROP FOREIGN KEY fk_name;  -- 删外键

五、一句话总结

主键唯一、非空必填、默认省写、外键连表、检查把关——五大约束护数据周全。

四.数据库的备份

数据库作为·系统架构的重要组件 同时也是大型公司的重要财产,常常有误删除数据库的状况,这时,备份的数据库就变成了救命稻草,那么,数据库的备份,酒劲是怎么做i到的呢?

MySQL 备份按“能停库”和“不能停库”两大场景,可归纳为 逻辑备份物理备份 两类。下面给出最常用的 4 种方案:命令、示例、优缺点、恢复方法一次讲清,直接复制即可用。


✅ 1. 逻辑备份:mysqldump(官方自带,最常用)

场景命令模板示例
单库mysqldump -u用户 -p 库名 > 文件.sqlmysqldump -uroot -p school > school_$(date +%F).sql
多库mysqldump -u用户 -p --databases db1 db2 > all.sql
全库mysqldump -u用户 -p --all-databases > full.sql
仅结构mysqldump -u用户 -p -d 库名 > schema.sql-d 表示 no-data
仅数据mysqldump -u用户 -p -t 库名 > data.sql-t 表示 no-create-info
🔁 恢复
mysql -u用户 -p 库名 < 文件.sql      # 单库
mysql -u用户 -p < full.sql          # 全库
⚡ 特点
  • 纯文本 SQL,跨平台、跨版本;

  • 可远程备份;

  • 大数据量时较慢,锁表(MyISAM)或长事务(InnoDB)。


✅ 2. 物理备份:xtrabackup(Percona,热备首选)

动作命令示例
全量备份xtrabackup --user=root --password=xxx --backup --target-dir=/backup/full/2024-06-01
增量备份xtrabackup --incremental --incremental-basedir=/backup/full/2024-06-01 --target-dir=/backup/inc/2024-06-02
准备xtrabackup --prepare --target-dir=/backup/full/2024-06-01
恢复关闭 MySQL → xtrabackup --copy-back --target-dir=/backup/full/2024-06-01 → 赋权 → 启动
⚡ 特点
  • 真正的热备,InnoDB 无需锁表;

  • 支持增量,速度快;

  • 只能恢复到同版本同架构的 MySQL;

  • 社区版需单独安装 percona-xtrabackup 包。


✅ 3. 直接拷贝数据目录(冷备,停机场景)

systemctl stop mysqld          # 停库
cp -a /var/lib/mysql /backup/mysql.$(date +%F)
systemctl start mysqld

⚠️ 必须停库,否则数据文件不一致;恢复时直接拷回并赋权。


✅ 4. 快照/云备份(云环境)

  • 云盘快照:阿里云 ECS 云盘、AWS EBS 一键打快照;

  • RDS 自动备份:控制台设置备份策略,支持按时间点恢复;

  • 逻辑导出到 OSS/S3mysqldump → OSS/S3 CLI上传。


🚩 如何选择?

场景首选工具
中小型库,可停库mysqldump
大库,要求不停机xtrabackup
云服务器云盘快照 / RDS 自动备份
容器 / 测试环境直接冷拷贝

🎯 一句话速记

逻辑备份 mysqldump 万能、物理备份 xtrabackup 最快,云环境优先用官方自动备份。

http://www.xdnf.cn/news/1435825.html

相关文章:

  • 第1章:VisualVM 简介与安装
  • 东土科技战略升级:成立半导体子公司,赋能国产半导体智能化升级
  • 基于 HTML、CSS 和 JavaScript 的智能图像锐化系统
  • HTML第五课:求职登记表
  • 【实时Linux实战系列】基于实时Linux的农业自动化系统开发
  • C++ numeric库简介与使用指南
  • 项目解析:技术实现与面试高频问题
  • Linux - 进程切换
  • Git在idea中的实战使用经验(一)
  • 【TRAE调教指南之MCP篇】Exa MCP:治疗AI幻觉的有效方案
  • 构建企业级区块链网络:基于AWS EC2的弹性、高可用解决方案
  • CICD 持续集成与持续交付
  • GDB 调试
  • 第4章:内存分析与堆转储
  • 命令行文本处理小工具:cut、sort、uniq、tr 详解与应用
  • EMQX 4.4 加mysql认证
  • BandiZip下载与详细图文安装教程!!
  • docker 安装 redis 并设置 volumes 并修改 修改密码(二)
  • 构建可扩展的 AI 应用:LangChain 与 MCP 服务的集成模式
  • C++算法学习:位运算
  • ECMWF数据批量下载(Windows版本)
  • Ngene:实验设计的尖端利器
  • 洛谷P3811 【模板】模意义下的乘法逆元
  • Linux操作系统(6)
  • java-设计模式-3-创建型模式-原型
  • 一文读懂 Python 【循环语句】:从基础到实战,效率提升指南
  • 【机器学习学习笔记】Matplotlib 基本操作
  • Java 大视界 --Java 大数据在智能教育学习资源整合与知识图谱构建中的深度应用(406)
  • 如何将大疆无人机拍摄到的图像回传到应急指挥中心大屏?5G单兵图传轻松解决图传问题|伟博视讯
  • Ansible角色:高效开发与管理的秘密