MySQL:多表概述
时间:2021-07-15
本文章向大家介绍MySQL:多表概述,主要包括MySQL:多表概述使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
1. 多表简述
实际开发中,一个项目通常需要很多张表才能完成。
例如一个商城项目的数据库,需要有很多张表:用户表、分类表、商品表、订单表....
2. 单表的缺点
数据准备
1) 创建一个数据库 db3
CREATE DATABASE db3 CHARACTER SET utf8;
2) 数据库中 创建一个员工表 emp
包含如下列 eid, ename, age, dep_name, dep_location
eid 为主键并 自动增长, 添加 5 条数据
-- 创建emp表 主键自增 CREATE TABLE emp( eid INT PRIMARY KEY AUTO_INCREMENT, ename VARCHAR(20), age INT , dep_name VARCHAR(20), dep_location VARCHAR(20) );
-- 添加数据 INSERT INTO emp (ename, age, dep_name, dep_location) VALUES ('张百万', 20, '研发部', '广州'); INSERT INTO emp (ename, age, dep_name, dep_location) VALUES ('赵四', 21, '研发部', '广州'); INSERT INTO emp (ename, age, dep_name, dep_location) VALUES ('广坤', 20, '研发部', '广州'); INSERT INTO emp (ename, age, dep_name, dep_location) VALUES ('小斌', 20, '销售部', '深圳'); INSERT INTO emp (ename, age, dep_name, dep_location) VALUES ('艳秋', 22, '销售部', '深圳'); INSERT INTO emp (ename, age, dep_name, dep_location) VALUES ('大玲子', 18, '销售部', '深圳');
3) 单表的问题
冗余, 同一个字段中出现大量的重复数据
3. 解决方案
设计为两张表
<1> 多表方式设计
department 部门表 : id, dep_name, dep_location
employee 员工表: eid, ename, age, dep_id
<2> 删除emp表, 重新创建两张表
-- 创建部门表 -- 一方,主表 CREATE TABLE department( id INT PRIMARY KEY AUTO_INCREMENT, dep_name VARCHAR(30), dep_location VARCHAR(30) ); -- 创建员工表 -- 多方 ,从表 CREATE TABLE employee( eid INT PRIMARY KEY AUTO_INCREMENT, ename VARCHAR(20), age INT, dept_id INT );
<3> 添加部门表数据
-- 添加2个部门 INSERT INTO department VALUES(NULL, '研发部','广州'),(NULL, '销售部', '深圳'); SELECT * FROM department;
<4> 添加员工表数据
-- 添加员工,dep_id表示员工所在的部门 INSERT INTO employee (ename, age, dept_id) VALUES ('张百万', 20, 1); INSERT INTO employee (ename, age, dept_id) VALUES ('赵四', 21, 1); INSERT INTO employee (ename, age, dept_id) VALUES ('广坤', 20, 1); INSERT INTO employee (ename, age, dept_id) VALUES ('小斌', 20, 2); INSERT INTO employee (ename, age, dept_id) VALUES ('艳秋', 22, 2); INSERT INTO employee (ename, age, dept_id) VALUES ('大玲子', 18, 2); SELECT * FROM employee;
<5> 表关系分析
部门表与员工表的关系
1) 员工表中有一个字段dept_id 与部门表中的主键对应,员工表的这个字段就叫做 外键
2) 拥有外键的员工表 被称为 从表 , 与外键对应的主键所在的表叫做 主表
4. 目前的多表设计的问题
当我们在 员工表的 dept_id 里面输入不存在的部门id ,数据依然可以添加!
显然,这是不合理的.
-- 插入一条 不存在部门的数据
INSERT INTO employee (ename,age,dept_id) VALUES('无名',35,3);
- 实际上我们应该保证,员工表所添加的 dept_id , 必须在部门表中存在.
解决方案:
- 使用外键约束,约束 dept_id ,必须是 部门表中存在的id
原文地址:https://www.cnblogs.com/JasperZhao/p/15014735.html
- 批量下载Coursera及其他场景上的文件
- 深度学习动手入门:GitHub上四个超棒的TensorFlow开源项目
- [产品与技术] Flight data recorder
- [技术与产品] Bower & Brunch
- 计算机视觉识别简史:从 AlexNet、ResNet 到 Mask RCNN
- [技术产品] 用node-webkit做桌面应用
- [技术] 谈谈Python
- [技术] 谈谈编程思想
- DeepLearning.ai学习笔记(五)序列模型 -- week1 循环序列模型
- 黑客马拉松
- python select模块详解
- 轮询、长轮询、长连接、websocket
- Python中的栈溢出及解决办法
- CentOS下Redis的安装
- MySQL 教程
- MySQL 安装
- MySQL 管理与配置
- MySQL PHP 语法
- MySQL 连接
- MySQL 创建数据库
- MySQL 删除数据库
- MySQL 选择数据库
- MySQL 数据类型
- MySQL 创建数据表
- MySQL 删除数据表
- MySQL 插入数据
- MySQL 查询数据
- MySQL where 子句
- MySQL UPDATE 查询
- MySQL DELETE 语句
- MySQL LIKE 子句
- mysql order by
- Mysql Join的使用
- MySQL NULL 值处理
- MySQL 正则表达式
- MySQL 事务
- MySQL ALTER命令
- MySQL 索引
- MySQL 临时表
- MySQL 复制表
- 查看MySQL 元数据
- MySQL 序列 AUTO_INCREMENT
- MySQL 处理重复数据
- MySQL 及 SQL 注入
- MySQL 导出数据
- MySQL 导入数据
- MYSQL 函数大全
- MySQL Group By 实例讲解
- MySQL Max()函数实例讲解
- mysql count函数实例
- MYSQL UNION和UNION ALL实例
- MySQL IN 用法
- MySQL between and 实例讲解
- 逐行阅读Spring5.X源码(五) 初探BeanFactoryPostProcessor后置处理器,难,特别难。
- 逐行阅读Spring5.X源码(六) ClassPathBeanDefinitionScanner扫描器
- 逐行阅读Spring5.X源码(番外篇)自定义扫描器, Mybatis是如何利用spring完成Mapper扫描的
- 逐行阅读Spring5.X源码(七)扫描和注册神器 ConfigurationClassPostProcessor ,学此类者,胜过学九阳神功!胆小勿入!
- 「Mysql索引原理(三)」Mysql中的Hash索引原理
- RNN、lstm、gru详解
- 「Mysql索引原理(四)」单列索引
- 「Mysql索引原理(五)」多列索引
- 「Mysql索引原理(六)」聚簇索引
- 「Mysql索引原理(七)」覆盖索引
- 「Mysql索引原理(八)」使用索引扫描做排序
- 「Mysql索引原理(九)」前缀压缩索引
- 「Mysql索引原理(十)」冗余和重复索引
- 「Mysql索引原理(十一)」索引和锁
- 「Mysql索引原理(十二)」索引案例1-支持多种过滤条件