设计MySQL数据库常常会遇到的问题
发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,本文主要给大家介绍设计MySQL数据库常常会遇到的问题,文章内容都是笔者用心摘选和编辑的,具有一定的针对性,对大家的参考意义还是比较大的,下面跟笔者一起了解下设计MySQL数据库常常会遇到的问题吧。第
千家信息网最后更新 2026年11月02日设计MySQL数据库常常会遇到的问题
本文主要给大家介绍设计MySQL数据库常常会遇到的问题,文章内容都是笔者用心摘选和编辑的,具有一定的针对性,对大家的参考意义还是比较大的,下面跟笔者一起了解下设计MySQL数据库常常会遇到的问题吧。
第一题:层级数据库设计
题目描述:现在有10万条左右的数据,记录一个部门的员工。大部门下是层级结构,有许多个子部门。比如,一级部分A,二级部门A',B',C',三级部门A",B",C"。试问如何设计数据库,我们需要统计二级部分A'下的所有人数。
分析:
这里用到了一个层级数据库的设计。
CREATE TABLE DEPARTMENT( DEP_ID INT UNSIGNED AUTO_INCREMENT, DEP_NAME VARCHAR(10) NOT NULL, PARENT_ID INT, PRIMARY KEY(DEP_ID))CHARSET=utf8;
插入数据
单个插入INSERT INTO DEPARTMENT (DEP_NAME, PARENT_ID)VALUES('A',NULL);或者批量插入INSERT INTO department VALUES(1,'A',NULL),(2,'B',1),(3,'C',1), (4,'D',2),(5,'E',2),(6,'F',3),(7,'G',3);| dep_id | dep_name | parent_id |
|---|---|---|
| 1 | A | NULL |
| 2 | B | 1 |
| 3 | C | 1 |
| 4 | D | 2 |
| 5 | E | 2 |
| 6 | F | 3 |
| 7 | G | 3 |
显示层级,这里用到了left join,根据这一级的dep_id,寻找它的parent_id,然后通过左连接进行连接,得到当前部门以及他的父部门。
select d1.dep_name as level1, d2.dep_name as level2, d3.dep_name as level3, d4.dep_name as level4from department as d1left join department as d2 on d2.parent_id = d1.dep_id left join department as d3 on d3.parent_id = d2.dep_idleft join department as d4 on d4.parent_id = d3.dep_idwhere d1.dep_name='A';
当存储好了部门的层级信息后,我们就开始设计一个部门人员的表。
创建表,并存储部门人员的信息
create table people( id INT UNSIGNED AUTO_INCREMENT, name varchar(10) not null, dep_id INT UNSIGNED, departname varchar(10), FOREIGN KEY (dep_id) REFERENCES department(dep_id), primary key(id) )charset=utf8;
插入相关的测试数据。
INSERT INTO people VALUES(1,'hgy',4,'D'),(2,'abc',5,'E'),(3,'def',6,'F'), (4,'ddd',2,'B'),(5,'eee',2,'B');
查找二级部门为B的人,并且列出了他的上级部门信息
select p.id, p.name, d1.dep_name as level1, d2.dep_name as level2, d3.dep_name as level3from people as pleft join department as d1 on d1.dep_id = p.dep_idleft join department as d2 on d2.dep_id = d1.parent_idleft join department as d3 on d3.dep_id = d2.parent_idwhere d1.dep_name='B' or d2.dep_name='B' or d3.dep_name='B';
查找二级部门为B的总人数
select count(*) as totalfrom people as pleft join department as d1 on d1.dep_id = p.dep_idleft join department as d2 on d2.dep_id = d1.parent_idleft join department as d3 on d3.dep_id = d2.parent_idwhere d1.dep_name='B' or d2.dep_name='B' or d3.dep_name='B';
| id | name | department_id | departname |
|---|---|---|---|
| 1 | hgy | 4 | D |
| 2 | abc | 5 | E |
| 3 | def | 6 | F |
| 4 | ddd | 2 | B |
| 5 | eee | 2 | B |
应该考虑到有的人在二级部门(可能没有三级部门,没有四级部门),有的人在一级部门,有的人在四级部门(有一级部门,二级部门,三级部门,四级部门)。
第二题:简单的统计
题目描述:现在有一批学生的成绩,求四门学科总分大于200的学生,并且按逆序排列。
CREATE TABLE STUDENT( ID INT UNSIGNED AUTO_INCREMENT, SCORE1 INT NOT NULL, SCORE2 INT NOT NULL, SCORE3 INT NOT NULL, SCORE4 INT NOT NULL, PRIMARY KEY(ID))CHARSET=utf8;
INSERT INTO STUDENT VALUES(1,100,98,10,4),(2,100,9,10,4),(3,70,0,180,40),(4,10,98,1,4),(5,30,7,10,4),(6,8,88,1,43);
根据四门成绩的总分进行排序
SELECT id, score1,score2,score3,score4, score1+score2+score3+score4 as total FROM STUDENTwhere score1+score2+score3+score4 > 200 order by score1+score2+score3+score4 desc;
这里是一个不能直接用别名来排序的知识点,
看完以上关于设计MySQL数据库常常会遇到的问题,很多读者朋友肯定多少有一定的了解,如需获取更多的行业知识信息 ,可以持续关注我们的行业资讯栏目的。
部门
数据
设计
数据库
层级
信息
问题
人员
人数
学生
总分
成绩
知识
笔者
行业
部分
题目
四门
存储
排序
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
互联网金融 科技金融
互联网科技logo设计
新浪科技互联网
互联网 新科技
华脉科技工业互联网产品
山东吉时兔互联网科技有限公司
卫星互联网科技股票
北京大学互联网科技怎么样
温州喔噻互联网科技有限公司
互联网系的金融科技公司
常德市电业局互联网科技部
荆州市昕露互联网络科技有限公司
广西互联网科技孵化中心
银川新华互联网科技学校联系电话
996高科技互联网公司
允成互联网科技有限公司融资
湖北辰鑫科技互联网
版纳互联网科技选哪家
互联网金融运营模式中的金融科技
如何强化互联网金融科技
华服互联网科技靠谱吗
新浪科技互联网
互联网科技公司的市场部门
互联网科技中介
科技与互联网哪个更好
互联网新科技动漫ppt素材
众安科技工业互联网合作
美国互联网科技实力
萌小萌互联网科技河南有限公司
科技互联网企业在行动