第 1 章 数据库原理1.1 数据的分类数据按照结构分为三类结构化数据、半结构化数据、非结构化数据结构化数据可以使用二维表逻辑表达格式固定、长度有限适合关系型数据库存储。 特点以行为单位一行代表一个实体先定义结构再录入数据。 示例学生信息表。半结构化数据介于结构化与非结构化中间自描述结构结构和数据混合在一起。 特点先有数据再有结构。 示例JSON、XML、HTML、部分 NoSQL 数据库。非结构化数据没有固定格式无法用二维表表达整体存储。 示例音视频、图片、二进制文件。1.2 数据管理发展历史数据管理经历人工管理、文件系统、数据库系统三个阶段。人工管理阶段50 年代中期以前计算机用于科学计算存储只有磁带、纸带无专门管理软件批处理。文件系统阶段50 后期‑60 中期磁盘出现数据以文件形式长期保存支持批处理 联机实时处理。优点数据长期保存有一定独立性。缺点接口不统一、不支持并发访问、缺少安全控制数据冗余高数据之间关联弱。数据库系统阶段60 年代后期至今大容量低价磁盘出现通过 DBMS 数据库管理系统统一管理数据高共享、低冗余、数据高独立性。1.3 数据库、DBMS、DBA 概念数据库 (Database)长期保存在计算机、有组织、可共享、统一管理的大量数据集合。DBMS 数据库管理系统操纵、管理数据库的大型软件负责建库、使用、维护保障数据库安全性、完整性。DBA 数据库管理员负责数据库全生命周期设计、测试、部署、运维目标保障系统稳定、安全、完整、高可用。应用程序调用数据库完成业务功能的软件。DBMS 主要特点复杂数据模型低冗余支持数据共享具备物理独立性、逻辑独立性提供统一查询访问接口数据和应用解耦内置并发控制、备份恢复、完整性、安全性保障。DBMS 七大基本功能数据定义 DDL定义数据库三级模式、约束定义信息存放在数据字典。数据操作 DML实现数据增删改查。数据组织、存储、管理管理数据字典、用户数据优化存取效率。数据库运行管理并发控制、安全权限、完整性校验、事务自动恢复保障系统正常运行。数据库维护数据导入导出、转储、重组、性能监控。数据库保护恢复、并发控制、完整性控制、安全性控制。通信操作系统交互、网络环境下跨系统互操作。DBMS 三代发展层次数据库树状结构一对多关系代表 IBM IMS。网状数据库网状模型支持多对多关系。关系型数据库 RDBMS使用二维表格模型。常见 RDBMSOracle、MySQL/MariaDB、SQL Server、PostgreSQL、DB2。RDBMS 核心术语数据库关联表的集合表 (table)矩阵类似电子表格列 (column)同一类型数据集合行 (row / 元组)一条实体记录冗余重复存储牺牲性能换取安全性主键 primary key唯一标识一行一张表仅一个主键外键 foreign key用于两张表之间关联复合键多个列组成索引键索引 index类似书籍目录加速查询参照完整性禁止引用不存在实体保证数据一致性1.4 关系型数据库理论1.4.1 E‑R 实体联系模型E‑R 图三要素实体 (Entity矩形)现实客观事物同类为实体集。属性 (Attribute椭圆)实体的特征。联系 (Relationship菱形)实体之间关联。1.4.2 实体三种联系一对一 (1:1)A 对应唯一 BB 对应唯一 A。例人‑身份证。一对多 (1:n)一个 A 对应多个 B一个 B 只属于一个 A。例班级‑学生。多对多 (m:n)A 多条对应 B 多条。例学生‑课程数据库需要中间关联表实现多对多。1.4.3 CRUD数据库基础操作表格缩写英文含义SQL 关键字CCreate新增INSERTRRead查询SELECTUUpdate更新UPDATEDDelete删除DELETE1.4.4 范式数据库规范化范式目的减少数据冗余提升一致性范式越高冗余越低。常用1NF、2NF、3NF开发一般满足3NF 即可。1NF 第一范式原子性字段值不可再拆分单元格只能存单个值不能是列表。2NF 第二范式消除部分依赖针对复合主键所有非主键字段必须完全依赖整个主键不能只依赖主键一部分。3NF 第三范式消除传递依赖非主键字段不能互相依赖不能间接推导。范式升级规则满足 3NF 必须先满足 2NF满足 2NF 必须先满足 1NF。1.4.5 SQLSQL 结构化查询语言关系数据库通用语言数据库 C/S 架构客户端发送 SQL 语句服务端执行返回结果。第 2 章 MySQL 安装和基本使用2.1 MySQL 介绍历史起源创始人 Monty Widenius女儿名字 My数据库命名 MySQL孙女名字 Maria衍生 MariaDB。时间线1995 MySQL 发布 → 2008 Sun 10 亿美金收购 MySQL → 2009 Oracle 收购 SunMySQL 归 Oracle。重要版本节点MySQL4.0集成 InnoDB 引擎MySQL5.0存储过程、触发器、视图MySQL5.5InnoDB 成为默认存储引擎MySQL5.7大规模性能优化MySQL8.0字符集默认utf8mb4。MySQL 三大分支 1官方 MySQLOracle 维护 2MariaDBMonty 创建社区驱动高度兼容 MySQL 3Percona ServerPercona 公司XtraDB 引擎侧重性能、诊断、在线备份。MySQL 特性开源协议可二次开发标准 SQL 支持跨平台多编程语言驱动插件式存储引擎按需选择引擎单进程多线程模型。2.2 MySQL 多实例一台服务器运行多套 MySQL 服务不同实例监听不同端口3306、3307、3308各自独立配置与数据。✅优点节约硬件、便于测试对比、集中管理备份。❌缺点资源互相抢占主机宕机全部实例不可用存在单点风险。 部署可使用相同 MySQL 二进制版本也可不同版本。2.3 MySQL 组成与常用工具MySQL 是 C/S 架构分为服务端、客户端、配套工具。服务端程序mysqldMySQL 核心服务程序。mysqld_safe安全启动脚本。mysqld_multi多实例管理工具。客户端与工具mysql交互式 CLI 命令行客户端。mysqldump逻辑备份工具。mysqladmin服务管理工具。mysqlimport数据导入。myisamchk /myisampackMyISAM 引擎专用工具。配置文件主配置/etc/my.cnf包含!includedir /etc/my.cnf.d引入子配置目录/etc/my.cnf.d/拆分配置client.cnf 客户端、mysql‑server.cnf 服务端配置。配置读取优先级/etc/my.cnf→/etc/mysql/my.cnf→ 用户家目录~/.my.cnf。2.4 mysql 客户端使用2.4.1 mysql 命令常用选项mysql -u用户名 -p密码 -h主机IP -P端口 -Ssocket文件 -D数据库名-e sql语句非交互式执行 SQL 直接退出适合脚本调用。-E垂直展示结果‑H输出 html‑X输出 xml。‑‑prompt修改命令提示符。2.4.2 mysql 内交互命令客户端本地命令反斜杠 \ 开头\? 帮助 \c 清空当前输入 \r 重连 \d 修改语句结束符 \G 垂直输出结果 \q / exit 退出 \. source 执行sql脚本 \s 查看服务器状态信息 \! 执行操作系统shell命令 use 数据库名 切换数据库 tee / notee 开启/关闭输出保存到文件区分客户端命令本地执行 vs SQL 服务端命令发给 mysqld 服务端执行分号结尾。help contents可以查看服务端 SQL 帮助目录。2.5 mysqladmin 管理工具mysqladmin 是本地管理 mysqld 服务的工具常用功能mysqladmin version查看客户端 服务端版本。mysqladmin status / extended‑status查看运行状态。mysqladmin create / drop 库名创建、删除数据库。mysqladmin password 新密码修改 root 密码。mysqladmin shutdown关闭 MySQL 服务不能启动。mysqladmin processlist查看会话线程。mysqladmin ping检测数据库服务是否存活。flush‑privileges(reload)刷新权限。2.6 mycli第三方增强客户端python 开发语法高亮、自动补全pip 安装增强体验。第 3 章 SQL 语言3.1 数据库对象数据库包含多种对象database 数据库、table 表、index 索引、view 视图、procedure 存储过程、function 存储函数、trigger 触发器、event 事件调度器、user 用户、权限。3.2 SQL 发展历史1970 年 Codd 提出关系模型1974 诞生 SEQUEL后续改名 SQL1986 ANSI 标准化 SQL后续迭代 SQL‑89、SQL‑92、SQL‑1999 等版本。各数据库不完全 100% 标准兼容Oracle 有 PL/SQLSQL Server 有 T‑SQL 方言。3.3 SQL 书写规范SQL 关键字不区分大小写库名、表名在 Linux 下区分大小写。默认以分号;作为语句结束符支持跨行写。注释-- 单行注释 /* 多行注释 */ # mysql风格单行注释3.4 SQL 语句五大分类完整定义、关键字 示例表格分类全称作用关键字DDL数据定义语言 Data Definition Language定义 / 修改 / 删除数据库对象的结构库、表、索引、视图等不操作表里行数据CREATE、ALTER、DROPDML数据操纵语言 Data Manipulation Language操作表内部的行记录数据增、删、改表数据不修改表结构INSERT、DELETE、UPDATEDQL数据查询语言 Data Query Language查询表数据不会修改库和数据使用频率最高SELECTDCL数据控制语言 Data Control Language用户权限管理授权、回收权限GRANT、REVOKETCL事务控制语言 Transaction Control Language管理事务保证数据一致性提交、回滚事务BEGIN、COMMIT、ROLLBACK、SAVEPOINT重要区分DDL改结构库、表长什么样执行会隐式提交事务DDL 执行完事务自动提交不能 rollback 回滚 DDL 操作。DML改表里的行数据InnoDB 引擎下 DML 可以被事务控制可以回滚。DQL只查不改。DCL管账号权限。TCL专门管事务。① DDL 数据定义语言操作对象结构库、表、索引、视图⚠️注意DDL 执行会隐式提交事务执行完不能回滚谨慎执行 drop-- 1. CREATE 创建对象 CREATE DATABASE IF NOT EXISTS testdb DEFAULT CHARACTER SET utf8mb4; CREATE TABLE student ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(20) NOT NULL, age INT ); CREATE INDEX idx_stu_name ON student(name); CREATE VIEW v_student AS SELECT id,name FROM student; -- 2. ALTER 修改对象结构 ALTER DATABASE testdb CHARACTER SET utf8mb4; ALTER TABLE student ADD COLUMN gender CHAR(1); ALTER TABLE student MODIFY COLUMN age TINYINT; ALTER TABLE student CHANGE COLUMN gender sex CHAR(1); ALTER TABLE student DROP COLUMN sex; ALTER TABLE student RENAME TO stu; --3. DROP 删除对象数据彻底丢失 DROP DATABASE IF EXISTS testdb; DROP TABLE IF EXISTS student; DROP INDEX idx_stu_name ON student; DROP VIEW IF EXISTS v_student;② DML 数据操纵语言操作表行记录增删改InnoDB 引擎DML 支持事务可以 COMMIT 提交 / ROLLBACK 回滚不修改表结构。-- INSERT 插入数据 INSERT INTO student(name,age) VALUES (张三,18); INSERT INTO student(name,age) VALUES (李四,19),(王五,20); -- UPDATE 更新⚠️不加WHERE更新全表 UPDATE student SET age22 WHERE id1; -- DELETE 删除行⚠️不加WHERE删除全表 DELETE FROM student WHERE id2; DELETE FROM student;补充TRUNCATE TABLE student属于 DDL清空全表重建表隐式提交不可回滚速度快于 delete。③ DQL 数据查询语言 SELECT只读查询SELECT [字段|*] FROM 表名 [WHERE 行过滤] [GROUP BY 分组] [HAVING 分组后过滤] [ORDER BY 排序] [LIMIT 行数]; --示例 SELECT * FROM student; SELECT id,name FROM student WHERE age18; SELECT age,COUNT(*) FROM student GROUP BY age HAVING COUNT(*)1; SELECT * FROM student ORDER BY age DESC LIMIT 2;WHERE分组之前过滤原始行HAVINGGROUP BY之后过滤分组结果。④ DCL 数据控制语言权限管理-- GRANT授予权限 GRANT SELECT,INSERT ON testdb.* TO user1localhost IDENTIFIED BY 123456; GRANT ALL PRIVILEGES ON *.* TO admin% IDENTIFIED BY Admin123; -- REVOKE回收权限 REVOKE INSERT ON testdb.* FROM user1localhost; REVOKE ALL PRIVILEGES ON *.* FROM admin%; FLUSH PRIVILEGES; --刷新权限生效 --删除用户属于DDLDROP USER user1localhost;⑤ TCL 事务控制语言仅 InnoDB 支持MyISAM 不支持事务表格关键字作用BEGIN/START TRANSACTION开启事务COMMIT提交事务修改永久生效不可回滚ROLLBACK回滚整个事务撤销全部未提交 DMLSAVEPOINT 名字事务内创建保存点ROLLBACK TO SAVEPOINT 名字回滚到指定保存点之前操作保留--普通事务示例 BEGIN; INSERT INTO student(name,age) VALUES (小明,17); UPDATE student SET age18 WHERE name小明; COMMIT; --提交或者 ROLLBACK;回滚全部操作 --保存点局部回滚 BEGIN; INSERT INTO student(name,age) VALUES (A,16); SAVEPOINT sp1; INSERT INTO student(name,age) VALUES (B,17); SAVEPOINT sp2; INSERT INTO student(name,age) VALUES (C,18); ROLLBACK TO SAVEPOINT sp2; --撤销C保留A、B COMMIT; --查看自动提交开关 SHOW VARIABLES LIKE autocommit;重要DDL 会触发隐式COMMITMyISAM 引擎不支持事务。3.5 字符集与排序规则 collationMySQL8.0 默认字符集utf8mb4完整支持 4 字节 Unicode包含全部 emoji 表情。旧版本默认 latin1。字符集定义文字怎么二进制存储。排序规则 collation定义字符的比较、排序规则依附字符集。查看命令show charset; --查看全部支持字符集 show collation; --查看排序规则 show variables like character%; --查看当前系统字符集变量配置文件my.cnf.d/mysql‑server.cnf修改character‑set‑server修改服务端默认字符集。3.6 SQL 帮助系统help contents; --查看全部帮助分类 help Data Definition; --查看DDL分类帮助 help CREATE DATABASE; --查看具体语法帮助