MySQL 学习笔记(第一期):数据库基础与 MySQL 初探
MySQL 学习笔记第一期数据库基础与 MySQL 初探本系列笔记涵盖数据库基础理论、MySQL 安装与使用、SQL 语言、备份恢复、高可用架构及项目实战。第一期聚焦数据库核心概念、关系型数据库理论及 MySQL 入门使用为后续学习打下坚实基础。一、数据的分类在数据获取和使用过程中根据结构类型可分为三类类型特点示例结构化数据用二维表逻辑表达固定格式和有限长度先有结构后有数据关系型数据库中的表半结构化数据不符合关系型数据模型但包含标签或标记分隔语义先有数据后有结构JSON、XML、HTML非结构化数据没有固定结构无法用二维表表示整体存储音视频、二进制文件、位置信息结构化数据范例二维表nameage唐三123叶凡456半结构化数据范例JSONjson[ {id: 1, name: 唐三, age: 123}, {id: 2, name: 叶凡, age: 456} ]二、数据管理发展历史阶段时间特点人工管理1950年代中期以前科学计算磁带/纸带存储无管理软件批处理文件系统管理1950年代后期~1960年代中期磁盘出现文件系统管理长期保存批处理联机处理数据库系统阶段1960年代后期至今大容量磁盘DBMS管理复杂数据模型高独立性低冗余文件系统优缺点优点格式多样数据长期保存一定独立性缺点应用程序对接不便无并发控制无安全控制数据冗余不可避免三、数据库管理系统DBMS3.1 核心概念术语说明数据库Database长期存储在计算机内的、有组织的、可共享的大量数据集合DBMS操纵和管理数据库的大型软件如 MySQL、OracleDBA数据库管理员负责设计、测试、部署、维护数据库应用程序通过 DBMS 访问数据库的软件程序3.2 DBMS 特点与基本功能特点复杂数据模型数据冗余小易扩充数据和程序独立物理独立 逻辑独立统一查询接口并发控制、备份恢复、完整性/安全性保障基本功能数据定义DDL数据操作DML数据组织、存储与管理数据库运行管理并发、事务、恢复数据库维护载入、转换、转储、重组数据库保护恢复、并发、完整性、安全性通信与操作系统、网络软件交互3.3 数据库发展分类层次数据库树状模型一对多关系代表IBM IMS网状数据库网络结构多对多关系关系型数据库RDBMS二维表模型代表MySQL、Oracle、PostgreSQL、SQL Server3.4 RDBMS 核心术语术语含义数据库表的集合表数据的矩阵行列结构列column相同类型数据的集合行row一条记录元组冗余存储两倍数据提高安全性但降低性能主键Primary Key唯一标识一行一个表只能有一个外键Foreign Key关联两个表复合键多列组合作为索引键索引加速查询类似书的目录参照完整性不允许引用不存在的实体MySQL 表结构示例IDNamePriceQty1白菜2.002002土豆2.603003青菜6.00150四、关系型数据库理论4.1 E-R 模型实体关系模型实体Entity客观存在的事物用矩形表示属性Attribute实体的特性用椭圆形表示联系Relationship实体之间的关联规则用菱形表示4.2 联系类型联系类型说明示例一对一 (1:1)A 对应一个 BB 对应一个 A人 ↔ 身份证一对多 (1:n)A 对应多个 BB 只对应一个 A班级 → 学生多对多 (m:n)A 对应多个 BB 对应多个 A学生 ↔ 课程表结构示例sql-- 学生表一对一关系的示例 CREATE TABLE student ( stu_id INT PRIMARY KEY, name VARCHAR(20) ); -- 数据(1, 唐三), (2, 叶凡) -- 老师表用于一对多 CREATE TABLE teacher ( teacher_id INT PRIMARY KEY, name VARCHAR(20) ); -- 数据(1, gao), (2, ma) -- 课程表一对多一个老师多门课 CREATE TABLE class ( class_id INT PRIMARY KEY, name VARCHAR(20), teacher_id INT ); -- 数据(1, linux,1), (2, golang,1), (3, python,2), (4, java,2) -- 学生与课程多对多关系表中间表 CREATE TABLE student_class ( class_id INT, stu_id INT ); -- 数据(1,1), (1,2), (2,1), (3,2)4.3 数据操作CRUD操作描述SQL 关键字增加插入数据INSERT读取查询数据SELECT更新修改数据UPDATE删除删除数据DELETE4.4 数据库规范化范式设计关系数据库时遵循范式可减少冗余、增进一致性。一般满足第三范式3NF即可。第一范式1NF原子性要求每个字段不可再分不能是列表、集合或复合结构反例联系方式字段存13800138000, zhangexample.com正例拆分为手机号、邮箱两列第二范式2NF消除部分依赖前提满足 1NF要求非主键字段必须完全依赖于整个主键针对复合主键反例订单明细表主键(订单ID, 商品ID)但“商品名称”只依赖“商品ID”解决方法拆表商品表 订单明细表第三范式3NF消除传递依赖前提满足 2NF要求非主键字段之间不能有依赖关系如A→B→C则 C 传递依赖 A反例学生表学生ID → 学院ID → 学院地址解决方法拆表学生表 学院表范式总结范式核心目标关键规则1NF原子性字段不可再分2NF消除部分依赖非主属性完全依赖整个主键3NF消除传递依赖非主属性之间不能相互依赖实际开发中一般满足 3NF 即可不必追求更高范式。4.5 SQL 结构化查询语言SQLStructured Query Language用于存取、查询、更新和管理关系数据库。MySQL 采用 C/S 模式使用专有协议通信。客户端发送 SQL 语句服务端返回结果。五、MySQL 安装与基本使用5.1 MySQL 简介与历史创始人Michael “Monty” Widenius女儿名 My所以叫 MySQL1995 年发布第一个内部版本1996 年对外发布 3.11.12000 年改为 GPL 许可2001 年集成 InnoDB2008 年被 Sun 收购2009 年 Oracle 收购 Sun主流分支官方 MySQL、Percona Server、MariaDB5.2 MySQL 特性开源免费标准 SQL 语言跨平台支持多种语言插件式存储引擎单进程多线程大量测试组件和扩展5.3 MySQL 多实例定义在一台服务器上运行多个 MySQL 服务端进程每个进程监听不同端口如 3306、3307、3308拥有独立配置和数据。优点节约硬件资源便于对比测试不同版本便于集中管理安全、备份、启停缺点资源抢占单点风险服务器宕机影响所有实例5.4 MySQL 组成和常用工具服务端主要程序程序功能mysqld_safe安全启动脚本mysqld核心服务程序mysqld_multi多实例管理工具客户端主要程序程序功能mysql交互式 CLI 客户端mysqldump备份工具mysqladmin管理工具mysqlimport数据导入工具MyISAM 工具程序功能myisamchk检测 MyISAM 表myisampack打包 MyISAM 表只读配置文件主要配置文件/etc/my.cnf以及/etc/my.cnf.d/目录下的文件。配置文件读取顺序从mysql --help查看text/etc/my.cnf - /etc/mysql/my.cnf - ~/.my.cnf5.5 MySQL 客户端使用常用选项bashmysql [OPTIONS] [database] # 常用选项 -u, --username # 用户名 -p, --password[name] # 密码 -h, --hosthost # 服务端主机 -P, --portport # 端口默认 3306 -S, --socketname # socket 文件 -D, --databasedb # 指定数据库 -e, --executesql # 非交互式执行 SQL 后退出 -H, --html # HTML 格式输出 -X, --xml # XML 格式输出 -t, --table # 表格格式默认 -E, --vertical # 垂直显示 -v, --verbose # 显示详细信息 --promptname # 修改命令提示符使用范例bash# 免密登录注意安全 mysql -uroot -pHuawei123 # 显示版本 mysql -v # 指定用户名、主机、端口 mysql -uroot -h127.0.0.1 -P3306 # 使用主机名 mysql --userroot --hostlocalhost --port3306 # 默认使用 root 空密码登录仅限测试 mysql # 打印参数列表不连接 mysql --print-defaults -uroot -hlocalhost --connect-timeout2 # 以 HTML 格式输出查询结果 mysql -H -e SELECT VERSION(); # 非交互式执行 SQL 文件 mysql -e source /root/test.sql # 或使用重定向 mysql test.sql # 垂直显示结果 mysql -e SHOW DATABASES; -E # 修改命令提示符 mysql --prompt[\\d] # 指定数据库 mysql information_schema客户端常用命令在 mysql 提示符下命令简写功能help?显示帮助clear\c清除当前输入connect\r重新连接delimiter\d设置语句分隔符edit\e使用编辑器编辑命令ego\G垂直显示结果exit/quit\q退出go\g发送命令到服务端source\.执行 SQL 脚本文件status\s获取服务端状态信息system\!执行系统 shell 命令use\u切换数据库tee\T将输出追加到文件notee\t停止输出到文件使用范例sql-- 显示当前数据库 mysql \s -- 切换数据库 mysql use mysql; -- 调用系统命令 mysql \! hostname mysql \! clear -- 修改提示符 mysql prompt [\\h-\\D] -- 执行 SQL 脚本 mysql source /path/to/script.sql mysql \. /path/to/script.sql -- 开启/关闭输出到文件 mysql \T /tmp/output.txt mysql \t -- 设置分隔符为 $默认 ; mysql delimiter $ mysql SELECT * FROM student$ mysql delimiter ;mysqladmin 工具管理工具常用命令bash# 显示版本 mysqladmin -V mysqladmin version # 查看状态 mysqladmin status # 设置连接超时 静默模式 mysqladmin -h1.2.3.4 --connect-timeout2 -s ping # 持续执行每秒 ping 一次共 3 次 mysqladmin -i 1 -c 3 ping # 关闭服务不能启动 mysqladmin shutdown # 创建数据库 mysqladmin create db1 # 删除数据库需确认 mysqladmin drop db1 # 强制删除无需确认 mysqladmin -f drop db2 # 修改密码旧密码为空时直接设置 mysqladmin password 123456 # 旧密码存在时 mysqladmin -uroot -p123456 password abcdemycli 工具增强型 MySQL 客户端bash# 安装依赖 Python yum install -y python39 pip3 install mycli1.2.0 # 使用 mycli -uroot -pabcde六、本期知识点一览表知识模块核心要点数据分类结构化二维表、半结构化JSON/XML、非结构化音视频等数据管理发展人工管理 → 文件系统 → 数据库系统DBMS定义、功能DDL/DML/运行管理/保护/维护、特点独立性、低冗余关系型数据库二维表模型主键、外键、索引、参照完整性E-R 模型实体矩形、属性椭圆、联系菱形三种联系类型1:1,1:n,m:n范式1NF原子性、2NF消除部分依赖、3NF消除传递依赖SQL结构化查询语言用于操作关系数据库MySQL 历史与特性开源、跨平台、插件式引擎、单进程多线程MySQL 多实例单机多进程节省资源但有单点风险核心工具mysqld, mysql, mysqladmin, mysqldump, mycli客户端选项-u, -p, -h, -P, -e, -H, -E 等客户端命令\s, \u, !, \T, . , \G, 等mysqladmin管理操作创建/删除数据库、修改密码、状态监控、关闭服务下一期预告SQL 语言之库/表操作与数据类型DDL、数据类型详解、表约束、字符集与排序规则