当前位置: 首页 > news >正文

关系型数据库核心概念与 MySQL 操作

1. 核心术语

  • 关系:二维表结构,类似 Excel 表格,行列顺序无关紧要
  • :单条数据记录,例如"张三,20岁,男"
  • :数据字段,如"姓名"字段
  • 主键:表唯一标识,不可重复且非空(类似身份证号)
  • 唯一键:可设置多个,允许空值但不可重复(如邮箱、手机号)
  • :字段取值范围限定,如性别只能为"男"或"女"

表关系处理原则

  • 一对一:任选一方添加外键
  • 一对多:在"多"的一方添加外键
  • 多对多:必须建立中间关联表

2. 数据库三大范式

  • 第一范式(1NF):字段原子性,不可再分
  • 第二范式(2NF):非主键字段必须完全依赖主键(复合主键时需特别注意)
  • 第三范式(3NF):消除非主键字段间的传递依赖

提示:范式设计虽能减少冗余,但实际应用中可根据性能需求适当反范式化


3. 数据类型选择指南

3.1 字符串类型

类型特性适用场景
CHAR(n)定长存储,速度快但占用空间固定身份证号、手机号等固定长度数据
VARCHAR(n)变长存储,节省空间姓名、地址等长度不固定数据
TEXT大文本存储文章内容等长文本数据

3.2 数值类型修饰

  • AUTO_INCREMENT:自增属性,需配合主键或唯一键使用
  • UNSIGNED:无符号数值,可扩大正数存储范围

3.3 通用字段约束

  • NOT NULL:非空约束
  • DEFAULT:默认值设置
  • PRIMARY KEY/UNIQUE KEY:主键与唯一键约束

4. 常用管理命令

\s-- 查看服务器状态SHOWDATABASES;-- 列出所有数据库SHOWTABLES;-- 显示当前库所有表DESC表名;-- 查看表结构SHOWCREATETABLE表名;-- 查看建表语句SELECTDATABASE();-- 显示当前使用数据库-- 实用技巧:使用\G竖向显示表信息SHOWTABLESTATUSLIKE'表名'\G

5. 表结构操作

5.1 建表示例

CREATETABLEstudents(idINTUNSIGNEDAUTO_INCREMENTPRIMARYKEYCOMMENT'学号',nameVARCHAR(20)NOTNULLCOMMENT'姓名',ageTINYINTUNSIGNEDCOMMENT'年龄',genderENUM('M','F')DEFAULT'M'COMMENT'性别')AUTO_INCREMENT=10;

5.2 表复制方式

仅复制结构(保留约束):

CREATETABLE新表LIKE旧表;

复制结构及数据(不保留约束):

CREATETABLE新表ASSELECT*FROM旧表;

5.3 表结构修改

ALTERTABLE表名ADD字段名 类型AFTER某字段;-- 添加字段ALTERTABLE表名DROP字段名;-- 删除字段ALTERTABLE表名MODIFY字段名 新类型;-- 修改字段类型ALTERTABLE表名 CHANGE 旧名 新名 类型;-- 重命名字段及类型-- 生产环境修改表结构前请务必备份数据

6. 数据操作

6.1 数据插入

-- 指定字段插入INSERTINTOstudents(name,age)VALUES('小明',20);-- SET语法插入INSERTINTOstudentsSETname='小红',age=18;-- 从其他表导入数据INSERTINTOstudents(name,age)SELECTname,ageFROMteachers;

6.2 数据更新

UPDATEstudentsSETage=21WHEREname='wei';-- 注意:未加WHERE条件将更新全表数据

6.3 数据删除

DELETEFROMstudentsWHEREstuid=30;-- 条件删除TRUNCATETABLEstudents;-- 清空表并重置自增值

7. 数据查询

7.1 基础查询

SELECTname,ageFROMstudents;-- 指定字段查询SELECTDISTINCTageFROMstudents;-- 去重查询SELECT*FROMstudentsWHEREageBETWEEN18AND25;-- 范围查询SELECT*FROMstudentsWHEREnameLIKE'张%';-- 模糊查询

7.2 排序与分页

SELECT*FROMstudentsORDERBYageDESCLIMIT3,4;-- 按年龄降序,跳过3条取4条

7.3 聚合与分组

SELECTgender,AVG(age)FROMstudentsGROUPBYgenderHAVINGAVG(age)>20;-- WHERE用于行过滤,HAVING用于分组结果过滤

8. 多表关联查询

8.1 内连接

SELECTs.name,t.nameFROMstudents sINNERJOINteachers tONs.teacherid=t.tid;

8.2 左外连接

SELECTs.name,IFNULL(t.name,'无老师')FROMstudents sLEFTJOINteachers tONs.teacherid=t.tid;

8.3 自连接

SELECTe.name 员工,IFNULL(l.name,'无上级')领导FROMemp eLEFTJOINemp lONe.leader_id=l.emp_id;

8.4 联合查询

SELECTstuid,nameFROMstudentsUNIONSELECTtid,nameFROMteachers;

8.5 三表关联

SELECTs.name,c.Course,sc.ScoreFROMstudents sJOINscores scONs.StuID=sc.StuIDJOINcourses cONsc.CourseID=c.CourseID;

9. 视图应用

将复杂查询保存为虚拟表:

CREATEVIEWv_score_detailASSELECTs.name,c.Course,sc.ScoreFROMstudents sJOINscores scONs.StuID=sc.StuIDJOINcourses cONsc.CourseID=c.CourseID;-- 视图使用SELECT*FROMv_score_detailWHEREScore>80;

10. 实用技巧

  1. 养成添加COMMENT注释的习惯
  2. NULL值判断必须使用IS NULL而非= NULL
  3. 使用\G竖向显示多字段查询结果
  4. 避免在索引列上使用函数或前导通配符,以免索引失效
http://www.jsqmd.com/news/641647/

相关文章:

  • CSS 背景图滑动切换:实现无闪烁、方向可控的平滑轮播效果
  • C#进阶知识 反射
  • 多模态大模型量化压缩技术白皮书(2024Q2权威实测报告:12种算法在COCO-VQA/ScienceQA双基准上的吞吐-精度帕累托前沿)
  • 实战指南:用Markdown Viewer浏览器扩展高效管理技术文档的完整方案
  • 视频帧图片提取工具使用说明:按时间间隔/帧间隔/关键帧/指定时间点/首尾中间帧批量提取,支持并行与保持目录结构
  • 秃头/光头别慌!植发与纹发新思路 - 品牌测评鉴赏家
  • 四轮差速移动机器人圆弧正弦直线轨迹跟踪
  • IDEA如何使用教育网账号激活
  • 脱发自救指南:治疗方法与靠谱机构大揭秘 - 品牌测评鉴赏家
  • 解决 Bookmarklet 中 %0A 换行符导致的跨环境执行失败问题
  • 2026执医技能操作培训机构参考:3家机构客观解析 - 品牌测评鉴赏家
  • 用系统提示词工程替代部分 Agent 框架的激进实践
  • 企业不想花钱转型?试试这个免费排班系统,上手快还好用!
  • League-Toolkit:英雄联盟客户端全能工具包终极配置指南
  • 告别双系统!用PhyFusion在麒麟V10上无缝融合Win11,文件互传、GPU加速全搞定
  • 基于ADS的微带线等效电感设计与仿真验证
  • 深入剖析 Flash 存储机制:扇区、页与擦写操作背后的硬件原理
  • 高精度模板
  • SITS2026多模态预训练终极提速方案:GPU显存降低63%,吞吐提升2.8倍——这是今年最后一批实测参数
  • Flowise效果展示:不同Embedding模型(BGE/bge-m3)在中文场景表现
  • [开源]飞书CLI skill-22 大实战 增加CRM和ERP- 对接龙虾openclaw
  • 加深理解神经元的工作原理:感知机预测的实现
  • Ubuntu2024编译CMake时OpenSSL缺失问题全解析
  • 离心脱油后的滴鸡精:零脂肪滋补,口感与营养能否兼得?
  • 【国家级AI安全实验室内部报告】:多模态模型训练数据残留痕迹可恢复率高达68.3%——你还在用默认配置部署吗?
  • 网盘直链下载助手完整指南:八大网盘真实链接一键获取,告别下载限速烦恼
  • QOJ 14601
  • DETR目标检测实战:用PyTorch从零搭建你的第一个Transformer检测模型
  • 启用 Hyper-V
  • 为什么你的多模态模型在仿真中跑分99.2%,实车却触发127次紧急接管?:基于200万km真实路测数据的跨域泛化失效根因图谱