1. MySQL DDL/DML/DQL语句实战解析
作为一名数据库开发工程师,我经常需要处理各种SQL语句的编写和优化工作。今天我想分享一个实际案例:如何为王者荣耀英雄榜单数据设计完整的数据库操作流程。这个案例涵盖了DDL(数据定义语言)、DML(数据操作语言)和DQL(数据查询语言)三大类SQL语句,非常适合MySQL初学者系统学习。
1.1 项目背景与需求分析
我们接到一个需求:需要为王者荣耀游戏设计一个英雄数据统计系统,记录每个英雄在不同时间段的使用率、击杀率、胜率等关键指标。这些数据将用于游戏平衡性分析和玩家行为研究。
核心需求包括:
- 存储英雄基础信息(名称、类型)
- 记录各项战斗指标(使用率、击杀率等)
- 支持按日期查询历史数据
- 防止同一英雄同一天的数据重复录入
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 数据表设计与DDL语句详解
2.1 表结构设计思路
在设计honor_of_kings_hero_ranking表时,我考虑了以下几个关键点:
-
字段类型选择:
- 英雄名称(hero_name):使用VARCHAR(50),足够容纳所有英雄名称
- 各项比率字段:使用DECIMAL(5,2),可以存储0.00-999.99范围的值,精度到小数点后两位
- 日期字段:使用DATE类型而非DATETIME,因为我们只需要精确到天
-
索引设计:
- 自增主键id:标准做法,确保每条记录唯一标识
- 唯一索引uk_hero_date:防止同一英雄同一天的数据重复录入
-
时间戳管理:
- create_time:记录创建时间,默认当前时间
- update_time:记录更新时间,自动更新
2.2 完整建表语句
sql复制CREATE TABLE IF NOT EXISTS honor_of_kings_hero_ranking (
id INT AUTO_INCREMENT PRIMARY KEY COMMENT '主键ID,自增',
hero_name VARCHAR(50) NOT NULL COMMENT '英雄名称',
hero_type VARCHAR(20) NOT NULL COMMENT '英雄类型(坦克/法师/射手/刺客/辅助/战士)',
usage_rate DECIMAL(5,2) NOT NULL COMMENT '使用率(百分比,如25.50表示25.50%)',
kill_rate DECIMAL(5,2) NOT NULL COMMENT '击杀率(百分比)',
death_rate DECIMAL(5,2) NOT NULL COMMENT '死亡率(百分比)',
assist_rate
