关系型数据库MySQL(一):数据库基础

news2026/4/16 18:51:39
MySQL数据库基础教程一、 数据库基础概念什么是数据库 (Database, DB)?简单来说数据库就是一个有组织、可持久化存储的数据集合。你可以把它想象成一个电子化的文件柜里面存放着大量结构化的信息。数据库管理系统 (Database Management System, DBMS) 是管理和操作数据库的软件。MySQL 就是其中一种非常流行的关系型DBMS。关系型数据库 (Relational Database)核心思想数据存储在表 (Table)中表由行 (Row)和列 (Column)组成。关系不同表之间可以通过共同字段 (通常是主键和外键)建立联系形成关系模型。优势数据结构清晰数据一致性高支持复杂的查询 (SQL)。关键术语表 (Table)存储特定主题数据的结构。例如学生表、课程表、成绩表。行 (Row) / 记录 (Record)表中的一条数据代表一个具体的实体。例如一个学生的信息学号、姓名、年龄等。列 (Column) / 字段 (Field)表中的一列代表实体的某个属性。例如姓名、年龄。主键 (Primary Key)表中能唯一标识一条记录的列或列组合。例如学号在学生表中通常是主键。主键值不能重复且不能为NULL。外键 (Foreign Key)一个表中的字段它引用另一个表的主键用于建立表之间的关系。例如成绩表中的学号字段是外键它引用学生表的主键学号课程号字段也是外键引用课程表的主键课程号。外键用于维护数据的引用完整性Referential Integrity。数据库关系示例假设我们有三个表学生表 (students)学号 (sid)姓名 (sname)年龄 (sage)性别 (sgender)2023001张三20男2023002李四19女课程表 (courses)课程号 (cid)课程名 (cname)学分 (credit)C001数据库原理3C002操作系统4成绩表 (scores)学号 (sid)课程号 (cid)成绩 (score)2023001C001852023001C002782023002C00192关系分析students表的主键是sid。courses表的主键是cid。scores表的主键通常是 (sid,cid) 组合因为一个学生一门课只有一个成绩。scores表中的sid是外键指向students表的sid。scores表中的cid是外键指向courses表的cid。通过scores表我们可以知道 “张三(2023001)” 选修了 “数据库原理(C001)” 并得了85分以及 “操作系统(C002)” 得了78分同时知道 “李四(2023002)” 选修了 “数据库原理(C001)” 得了92分。二、 MySQL 数据类型MySQL 支持多种数据类型用于定义表中每一列可以存储的数据种类和范围。选择合适的数据类型对存储效率和数据完整性至关重要。主要类别如下数值类型用于存储数字。整数类型TINYINT小整数有符号-128 ~ 127无符号0 ~ 255。SMALLINT较小整数有符号-32768 ~ 32767无符号0 ~ 65535。MEDIUMINT中等整数有符号-8388608 ~ 8388607无符号0 ~ 16777215。INT/INTEGER常用整数有符号-2147483648 ~ 2147483647无符号0 ~ 4294967295。BIGINT大整数有符号-9223372036854775808 ~ 9223372036854775807无符号0 ~ 18446744073709551615。浮点数类型用于存储近似数值小数。FLOAT单精度浮点数。DOUBLE双精度浮点数精度更高。定点数类型用于存储精确数值小数。DECIMAL(M, D)精确小数。M是总位数精度D是小数位数标度。例如DECIMAL(5,2)可存储123.45。字符串类型用于存储文本。定长字符串CHAR(N)固定长度字符串长度范围 0 ~ 255 字符。存储时总是占用N个字节MySQL默认字符集下。适合存储长度基本固定的数据如国家代码、性别(M/F)。变长字符串VARCHAR(N)可变长度字符串长度范围 0 ~ 65535 字符实际受行最大字节限制。存储时只占用实际字符长度 1~2字节记录长度。适合存储长度变化较大的数据如姓名、地址。文本类型用于存储大段文本。TINYTEXT最大约 255 字节。TEXT最大约 64KB (65,535 字节)。MEDIUMTEXT最大约 16MB。LONGTEXT最大约 4GB。二进制字符串BINARY(N)类似CHAR(N)但存储二进制字节。VARBINARY(N)类似VARCHAR(N)但存储二进制字节。BLOB(Binary Large Object) 类型TINYBLOB,BLOB,MEDIUMBLOB,LONGBLOB用于存储图片、音频等二进制大对象。日期和时间类型DATE日期格式 YYYY-MM-DD (如 2023-10-27)。TIME时间格式 HH:MM:SS (如 14:30:00)。DATETIME日期和时间组合格式 YYYY-MM-DD HH:MM:SS (如 2023-10-27 14:30:00)。TIMESTAMP时间戳存储自 1970-01-01 00:00:00 UTC 以来的秒数。范围较小1970-01-01 00:00:01 UTC 到 2038-01-19 03:14:07 UTC。插入或更新记录时如果没有指定值通常会自动设置为当前时间取决于版本和设置。YEAR年份通常使用YEAR(4)格式存储 1901 到 2155 年。其他类型ENUM枚举类型列值只能是预定义列表中的一个。例如ENUM(small, medium, large)。SET集合类型列值可以是预定义列表中的零个或多个值的组合。例如SET(a, b, c, d)。数据类型选择建议根据数据特性选择是整数、小数、字符串还是日期考虑存储空间能用TINYINT就不用INT能用VARCHAR(50)就不用VARCHAR(255)除非确实需要。考虑数据完整性ENUM可以限制输入值范围。考虑性能CHAR在长度固定时检索可能更快INT比VARCHAR存储数字更快。三、 SQL 基础语法增删改查 (CRUD)SQL (Structured Query Language) 是与关系型数据库交互的标准语言。核心操作包括创建、读取、更新和删除数据。数据定义语言 (DDL) - 操作数据库和表结构创建数据库CREATE DATABASE database_name; -- 创建一个名为 database_name 的数据库 USE database_name; -- 选择使用该数据库创建表CREATE TABLE table_name ( column1 datatype [constraints], -- 列名 数据类型 [约束] column2 datatype [constraints], ... [table_constraints] -- 表级约束如主键、外键定义 );示例 (创建学生表)CREATE TABLE students ( sid INT PRIMARY KEY AUTO_INCREMENT, -- 学号主键自增长 sname VARCHAR(50) NOT NULL, -- 姓名变长字符串非空 sage TINYINT UNSIGNED, -- 年龄小整数非负 sgender ENUM(男, 女) DEFAULT 男 -- 性别枚举类型默认男 );常见约束PRIMARY KEY主键约束。FOREIGN KEY (column) REFERENCES parent_table(parent_column)外键约束。NOT NULL非空约束该列必须有值。UNIQUE唯一约束该列值不能重复。DEFAULT value默认值约束插入时若未指定则用此值。AUTO_INCREMENT自动增长通常用于整数主键。CHECK (condition)检查约束MySQL 8.0 开始较好支持。删除表DROP TABLE table_name; -- 删除表结构和数据修改表结构 (ALTER TABLE)ALTER TABLE table_name ADD column_name datatype; -- 添加新列 ALTER TABLE table_name DROP COLUMN column_name; -- 删除列 ALTER TABLE table_name MODIFY COLUMN column_name new_datatype; -- 修改列数据类型 ALTER TABLE table_name ADD CONSTRAINT constraint_name constraint_definition; -- 添加约束 ALTER TABLE table_name DROP CONSTRAINT constraint_name; -- 删除约束 (MySQL 中约束名有时需用索引名)数据操作语言 (DML) - 操作表中的数据插入数据 (INSERT)-- 方式1指定列名插入 (推荐) INSERT INTO table_name (column1, column2, ...) VALUES (value1, value2, ...); -- 方式2不指定列名按表结构顺序插入所有列 (需确保值顺序和数量完全匹配) INSERT INTO table_name VALUES (value1, value2, ...); -- 方式3一次插入多行 INSERT INTO table_name (column1, column2, ...) VALUES (value1a, value2a, ...), (value1b, value2b, ...), ...;示例 (向学生表插入数据)INSERT INTO students (sname, sage, sgender) VALUES (张三, 20, 男), (李四, 19, 女); -- 注意 sid 是自增主键不需要手动插入值查询数据 (SELECT)这是SQL中最常用、最灵活的部分。基本结构SELECT column1, column2, ... -- 选择要显示的列 (* 代表所有列) FROM table_name -- 指定数据来源的表 [WHERE condition] -- 筛选条件 [GROUP BY column_name] -- 分组依据 [HAVING group_condition] -- 分组后的筛选条件 [ORDER BY column_name [ASC | DESC]] -- 排序 [LIMIT number]; -- 限制返回行数示例-- 1. 查询所有学生信息 SELECT * FROM students; -- 2. 查询所有女生的姓名和年龄 SELECT sname, sage FROM students WHERE sgender 女; -- 3. 查询年龄大于18岁的学生按年龄降序排列 SELECT * FROM students WHERE sage 18 ORDER BY sage DESC; -- 4. 查询年龄最大的前3位学生姓名 SELECT sname FROM students ORDER BY sage DESC LIMIT 3; -- 5. 统计男女生人数 SELECT sgender, COUNT(*) AS num FROM students GROUP BY sgender; -- 6. 查询选修了课程C001的学生姓名和成绩 (需要连接 students 和 scores 表) SELECT s.sname, sc.score FROM students s JOIN scores sc ON s.sid sc.sid -- 连接条件学生表的学号 成绩表的学号 WHERE sc.cid C001;连接 (JOIN) 类型INNER JOIN(或JOIN)返回两个表连接条件匹配的记录。LEFT JOIN(或LEFT OUTER JOIN)返回左表所有记录即使右表没有匹配右表字段用NULL填充。RIGHT JOIN(或RIGHT OUTER JOIN)返回右表所有记录即使左表没有匹配左表字段用NULL填充。FULL JOIN(或FULL OUTER JOIN)返回左右表所有记录不匹配的用NULL填充 (MySQL 需用UNION模拟)。更新数据 (UPDATE)UPDATE table_name SET column1 value1, column2 value2, ... [WHERE condition]; -- 非常重要没有 WHERE 会更新所有行示例-- 将学号为 2023001 的学生的年龄改为 21 UPDATE students SET sage 21 WHERE sid 2023001; -- 将所有性别为男的学生的年龄增加1岁 UPDATE students SET sage sage 1 WHERE sgender 男;删除数据 (DELETE)DELETE FROM table_name [WHERE condition]; -- 非常重要没有 WHERE 会删除所有行示例-- 删除学号为 2023002 的学生记录 DELETE FROM students WHERE sid 2023002; -- 删除所有年龄小于18岁的学生记录 DELETE FROM students WHERE sage 18;四、 数据库备份与恢复定期备份数据库是防止数据丢失硬件故障、人为误操作、软件故障等的关键措施。逻辑备份 (Logical Backup)原理使用 SQL 语句导出数据库的结构和数据如CREATE TABLE,INSERT。工具mysqldump(MySQL 自带命令行工具)。特点备份文件是文本文件SQL脚本可读性强便于在不同MySQL版本间迁移通常向下兼容。备份和恢复速度相对较慢尤其是大数据库。OpenEuler 下使用mysqldump备份整个数据库mysqldump -u username -p database_name backup_file.sqlusername 有权限访问该数据库的MySQL用户名。-p 提示输入密码。database_name 要备份的数据库名。backup_file.sql 备份输出的SQL文件路径和名称。备份特定表mysqldump -u username -p database_name table1 table2 backup_tables.sql备份所有数据库mysqldump -u username -p --all-databases all_databases_backup.sql常用选项--single-transaction 对支持事务的表如InnoDB进行一致性备份不影响线上写操作。--routines 包含存储过程和函数。--triggers 包含触发器。--events 包含事件调度器事件。--add-drop-database/--add-drop-table 在CREATE DATABASE/CREATE TABLE前添加DROP DATABASE/DROP TABLE语句恢复时会先删除旧库/表。恢复逻辑备份mysql -u username -p database_name backup_file.sql需要先创建好目标数据库 (database_name) 或使用--all-databases备份时自动包含创建数据库语句。物理备份 (Physical Backup)原理直接复制数据库的物理文件数据文件、日志文件等。工具文件系统命令 (cp,rsync), 第三方工具 (Percona XtraBackup - 支持热备份)。特点备份和恢复速度快。备份文件是二进制格式不可读。通常要求备份时数据库停止服务冷备份或使用支持热备份的工具如 XtraBackup。恢复时要求 MySQL 版本和配置如存储引擎、文件路径与原环境一致。OpenEuler 下冷备份 (需停止MySQL服务)停止 MySQL 服务systemctl stop mysqld复制 MySQL 数据目录通常是/var/lib/mysql到备份位置cp -r /var/lib/mysql /path/to/backup_dir/mysql_backup启动 MySQL 服务systemctl start mysqld恢复物理备份停止 MySQL 服务。清空或移除当前数据目录。将备份的数据文件复制回 MySQL 数据目录。确保文件权限和所有权正确 (通常属于mysql:mysql)。启动 MySQL 服务。备份策略建议定期备份根据业务重要性设置备份频率每天、每周。多副本备份文件应存储在不同于数据库服务器的位置另一台服务器、NAS、云存储。测试恢复定期进行恢复演练确保备份有效。结合使用可以结合逻辑备份用于迁移、小规模恢复和物理备份用于快速恢复。总结本教程详细介绍了关系型数据库的核心概念表、行、列、主键、外键、MySQL中常用的数据类型及其选择原则、SQL的基础语法DDL建表删表、DML增删改查特别是SELECT查询和JOIN连接、以及在OpenEuler系统下进行MySQL数据库逻辑备份和物理备份的方法与注意事项。掌握这些基础知识是进一步深入学习MySQL数据库管理、开发和优化的基石。请务必多加练习理解表之间的关系设计熟练掌握增删改查操作并养成定期备份的良好习惯。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2524160.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…

网络编程(Modbus进阶)

思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…