<返回目录     Powered by claud/xia兄

第2课: 数据库操作

数据库设计原理

什么是数据库?

数据库是有组织的数据集合,用于存储、管理和检索信息。在MySQL中,数据库是表的容器,每个数据库包含多个相关的表。

数据库的层次结构:

数据库设计原则

数据库设计范式

范式理论(Normalization):

范式是数据库设计的规范,用于减少数据冗余和提高数据一致性。常见的范式包括:

  1. 第一范式(1NF): 确保每列都是原子的,不可再分解
  2. 第二范式(2NF): 在1NF基础上,确保非主键列完全依赖于主键
  3. 第三范式(3NF): 在2NF基础上,确保非主键列不依赖于其他非主键列
  4. BC范式(BCNF): 在3NF基础上,确保所有决定因素都是候选键

注意: 虽然高范式可以减少数据冗余,但在实际应用中,为了性能考虑,有时会适当反范式化。

数据库范式示意图

数据库范式示意图

创建数据库

基本语法

使用 CREATE DATABASE 语句创建新数据库:

-- 创建数据库
CREATE DATABASE mydb;

-- 创建数据库并指定字符集
CREATE DATABASE mydb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

-- 如果不存在则创建
CREATE DATABASE IF NOT EXISTS mydb;

字符集和校对规则详解

字符集(Character Set):
校对规则(Collation):

高级创建选项

-- 创建数据库并指定存储引擎默认值
CREATE DATABASE mydb 
DEFAULT CHARACTER SET utf8mb4 
DEFAULT COLLATE utf8mb4_unicode_ci;

-- 创建数据库并设置注释
CREATE DATABASE mydb 
COMMENT '这是一个示例数据库';

-- 查看数据库的完整创建语句
SHOW CREATE DATABASE mydb;

查看数据库信息

系统数据库介绍

MySQL安装后会包含几个系统数据库:

系统数据库功能:

查看数据库信息

-- 查看所有数据库(包括系统数据库)
SHOW DATABASES;

-- 查看数据库的详细信息
SELECT * FROM information_schema.SCHEMATA 
WHERE SCHEMA_NAME = 'mydb';

-- 查看数据库创建语句
SHOW CREATE DATABASE mydb;

-- 查看数据库大小和表数量
SELECT 
    table_schema AS '数据库',
    COUNT(*) AS '表数量',
    ROUND(SUM(data_length + index_length) / 1024 / 1024, 2) AS '大小(MB)'
FROM information_schema.tables 
GROUP BY table_schema;

选择和使用数据库

USE命令详解

在操作表之前,需要先选择要使用的数据库:

-- 选择数据库
USE mydb;

-- 查看当前使用的数据库
SELECT DATABASE();

-- 在连接时直接指定数据库
mysql -u root -p mydb

-- 在SQL语句中显式指定数据库
SELECT * FROM mydb.table_name;

数据库上下文管理

最佳实践:

修改数据库属性

ALTER DATABASE命令

使用ALTER DATABASE可以修改数据库的属性:

-- 修改数据库字符集
ALTER DATABASE mydb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

-- 修改数据库注释
ALTER DATABASE mydb COMMENT '修改后的数据库描述';

-- 查看修改后的数据库信息
SHOW CREATE DATABASE mydb;

修改限制和注意事项

重要提醒:

删除数据库

DROP DATABASE命令

警告: 删除数据库会永久删除其中的所有表和数据,操作前请务必备份!
-- 删除数据库
DROP DATABASE mydb;

-- 如果存在则删除
DROP DATABASE IF EXISTS mydb;

-- 删除前确认数据库内容
SHOW TABLES FROM mydb;
SELECT COUNT(*) FROM information_schema.tables 
WHERE table_schema = 'mydb';

删除操作的安全措施

安全删除流程:
  1. 备份重要数据
  2. 确认数据库名称和内容
  3. 停止所有对该数据库的访问
  4. 执行删除操作
  5. 验证删除结果

数据库备份和恢复

-- 备份数据库(命令行)
mysqldump -u root -p mydb > mydb_backup.sql

-- 恢复数据库
mysql -u root -p mydb < mydb_backup.sql

-- 备份所有数据库
mysqldump -u root -p --all-databases > all_databases_backup.sql

数据库命名规范和最佳实践

命名规则

命名最佳实践

推荐的命名模式:

命名反模式

应该避免的命名方式:

数据库设计考虑因素

实践练习:数据库设计与操作

第一部分:基础操作

  1. 创建业务数据库: 创建一个名为 ecommerce 的数据库,使用utf8mb4字符集
  2. 验证创建: 使用 SHOW DATABASES 查看是否创建成功
  3. 选择数据库: 使用 USE ecommerce 选择该数据库
  4. 确认上下文: 使用 SELECT DATABASE() 确认当前数据库
  5. 查看详细信息: 使用 SHOW CREATE DATABASE ecommerce 查看数据库创建语句

第二部分:系统探索

  1. 探索系统数据库: 查看 information_schema 数据库中的表结构
  2. 数据库统计: 查询所有数据库的大小和表数量统计
  3. 字符集验证: 确认新创建数据库的字符集设置是否正确

第三部分:高级操作

  1. 创建测试数据库: 创建 test_backup 数据库用于备份测试
  2. 修改属性: 为测试数据库添加注释说明
  3. 备份操作: 学习使用 mysqldump 备份数据库
  4. 安全删除: 在确认备份后,安全删除测试数据库

第四部分:设计思考

  1. 命名规范: 为以下业务场景设计合适的数据库名称:
    • 在线教育平台
    • 医院管理系统
    • 物流跟踪系统
  2. 架构设计: 思考如何为大型电商系统设计数据库架构
学习要点:
  • 掌握数据库创建、选择、修改、删除的基本操作
  • 理解字符集和校对规则的重要性
  • 熟悉系统数据库的结构和功能
  • 掌握数据库备份和恢复的基本方法
  • 培养数据库设计的思维模式

常见问题与解决方案

问题1:数据库创建失败

可能原因: 权限不足、数据库名冲突、字符集不支持

解决方案: 检查用户权限、确认数据库名唯一性、验证字符集支持

问题2:字符集乱码

可能原因: 客户端字符集不匹配、数据库字符集设置错误

解决方案: 统一字符集设置、使用utf8mb4字符集、检查连接参数

问题3:数据库无法删除

可能原因: 权限不足、数据库正在被使用、存在锁定

解决方案: 检查权限、终止相关连接、重启MySQL服务