当前位置: 首页 > 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.dtcms.com/a/363886.html

相关文章:

  • MySQL-Undo Log(回滚日志)
  • 【Python3教程】Python3高级篇之多线程
  • 通用的二叉数迭代方法
  • 国内真实的交换机、路由器和分组情况
  • 容器日志加密传输在海外云服务器环境的配置标准与实施指南
  • Go结构体详解:核心概念与实战技巧
  • 计算机Python毕业设计推荐:基于Django的酒店评论文本情感分析系统【源码+文档+调试】
  • 移动端网页设计vm+rem,和px实现方式对比
  • ansible变量+管理机密
  • ansible循环+判断(with,loop,when,if,for)
  • 视觉语言模型VLM部署:基于tensorrt和tensorrt-llm的C++代码
  • 基于SpringBoot的广科大在线图书管理系统设计与实现(代码+数据库+LW)
  • Arduino Uno与4×4矩阵键盘联动完全指南
  • 百度智能云,除了AI还有啥?
  • 数据结构——树(04二叉树,二叉搜索树专项,代码练习)
  • 腾讯混元翻译模型Hunyuan-MT-7B开源:小参数量大能量,获得30项国际冠军
  • LoRA至今历程回顾(74)
  • 9.2C++——匿名对象、友元、常成员函数和常对象、运算符重载
  • 【72页PPT】企业供应链计划管理APS及运输管理OTM一体化解决方案(附下载方式)
  • 急招 MySQL / PG DBA,欢迎自荐或推荐朋友!推荐有奖!
  • GAN 网络的核心功能与深度解析
  • C语言:归并排序和计数排序
  • 从面试实战看Java技术栈深度:一个程序员的进阶之路
  • [邮件服务器core] doc www | 安装与构建
  • 前端开发中经常提到的iframe、DOM是什么?
  • 【ComfyUI】SDXL Turbo一步完成高速高效的图像生成
  • Linux - 进程切换
  • 前端sdk相关技术汇总
  • ZabbixWatch运维监控大屏
  • spring boot 整合AI教程