MySQL多表&外键&数据库设计阿胖的阿多

2)数据库中创建一个员工表emp,1)包含如下列eid,ename,age,dep_name,dep_location2)eid为主键并自动增长,添加5条数据

--创建emp表主键自增CREATETABLEemp(eidINTPRIMARYKEYAUTO_INCREMENT,enameVARCHAR(20),ageINT,dep_nameVARCHAR(20),dep_locationVARCHAR(20));--添加数据INSERTINTOemp(ename,age,dep_name,dep_location)VALUES('张百万',20,'研发部','广州');INSERTINTOemp(ename,age,dep_name,dep_location)VALUES('赵四',21,'研发部','广州');INSERTINTOemp(ename,age,dep_name,dep_location)VALUES('广坤',20,'研发部','广州');INSERTINTOemp(ename,age,dep_name,dep_location)VALUES('小斌',20,'销售部','深圳');INSERTINTOemp(ename,age,dep_name,dep_location)VALUES('艳秋',22,'销售部','深圳');INSERTINTOemp(ename,age,dep_name,dep_location)VALUES('大玲子',18,'销售部','深圳');1.2.2单表的问题1)冗余,同一个字段中出现大量的重复数据

1.多表方式设计department部门表:id,dep_name,dep_locationemployee员工表:eid,ename,age,dep_id2.删除emp表,重新创建两张表

--创建部门表--一方,主表CREATETABLEdepartment(idINTPRIMARYKEYAUTO_INCREMENT,dep_nameVARCHAR(30),dep_locationVARCHAR(30));--创建员工表--多方,从表CREATETABLEemployee(eidINTPRIMARYKEYAUTO_INCREMENT,enameVARCHAR(20),ageINT,dept_idINT);3.添加部门表数据

--添加2个部门INSERTINTOdepartmentVALUES(NULL,'研发部','广州'),(NULL,'销售部','深圳');SELECT*FROMdepartment;4.添加员工表数据

--添加员工,dep_id表示员工所在的部门INSERTINTOemployee(ename,age,dept_id)VALUES('张百万',20,1);INSERTINTOemployee(ename,age,dept_id)VALUES('赵四',21,1);INSERTINTOemployee(ename,age,dept_id)VALUES('广坤',20,1);INSERTINTOemployee(ename,age,dept_id)VALUES('小斌',20,2);INSERTINTOemployee(ename,age,dept_id)VALUES('艳秋',22,2);INSERTINTOemployee(ename,age,dept_id)VALUES('大玲子',18,2);SELECT*FROMemployee;1.3.2表关系分析1)员工表中有一个字段dept_id与部门表中的主键对应,员工表的这个字段就叫做外键2)拥有外键的员工表被称为从表,与外键对应的主键所在的表叫做主表

解决方案:

语法格式:1.新建表时添加外键

[CONSTRAINT][外键约束名称]FOREIGNKEY(外键字段名)REFERENCES主表名(主键字段名)1.已有表添加外键

ALTERTABLE从表ADD[CONSTRAINT][外键约束名称]FOREIGNKEY(外键字段名)REFERENCES主表(主键字段名);1)重新创建employee表,添加外键约束

--先删除employee表DROPTABLEemployee;--重新创建employee表,添加外键约束CREATETABLEemployee(eidINTPRIMARYKEYAUTO_INCREMENT,enameVARCHAR(20),ageINT,dept_idINT,--添加外键约束CONSTRAINTemp_dept_fkFOREIGNKEY(dept_id)REFERENCESdepartment(id));2)插入数据

--正常添加数据(从表外键对应主表主键)INSERTINTOemployee(ename,age,dept_id)VALUES('张百万',20,1);INSERTINTOemployee(ename,age,dept_id)VALUES('赵四',21,1);INSERTINTOemployee(ename,age,dept_id)VALUES('广坤',20,1);INSERTINTOemployee(ename,age,dept_id)VALUES('小斌',20,2);INSERTINTOemployee(ename,age,dept_id)VALUES('艳秋',22,2);INSERTINTOemployee(ename,age,dept_id)VALUES('大玲子',18,2);--插入一条有问题的数据(部门id不存在)--Cannotaddorupdateachildrow:aforeignkeyconstraintfailsINSERTINTOemployee(ename,age,dept_id)VALUES('错误',18,3);1.4.3删除外键约束语法格式

altertable从表dropforeignkey外键约束名称1)删除外键约束

--删除employee表中的外键约束,外键约束名emp_dept_fkALTERTABLEemployeeDROPFOREIGNKEYemp_dept_fk;2)再将外键添加回来

语法格式

ALTERTABLE从表ADD[CONSTRAINT][外键约束名称]FOREIGNKEY(外键字段名)REFERENCES主表(主键字段名);--可以省略外键名称,系统会自动生成一个ALTERTABLEemployeeADDFOREIGNKEY(dept_id)REFERENCESdepartment(id);1.4.4外键约束的注意事项1)从表外键类型必须与主表主键类型一致否则创建失败.

2)添加数据时,应该先添加主表中的数据.

--添加一个新的部门INSERTINTOdepartment(dep_name,dep_location)VALUES('市场部','北京');--添加一个属于市场部的员工INSERTINTOemployee(ename,age,dept_id)VALUES('老胡',24,3);3)删除数据时,应该先删除从表中的数据.

--删除数据时应该先删除从表中的数据--报错Cannotdeleteorupdateaparentrow:aforeignkeyconstraintfails--报错原因不能删除主表的这条数据,因为在从表中有对这条数据的引用DELETEFROMdepartmentWHEREid=3;--先删除从表的关联数据DELETEFROMemployeeWHEREdept_id=3;--再删除主表的数据DELETEFROMdepartmentWHEREid=3;1.4.5级联删除操作(了解)1)删除employee表,重新创建,添加级联删除

--重新创建添加级联操作CREATETABLEemployee(eidINTPRIMARYKEYAUTO_INCREMENT,enameVARCHAR(20),ageINT,dept_idINT,CONSTRAINTemp_dept_fkFOREIGNKEY(dept_id)REFERENCESdepartment(id)--添加级联删除ONDELETECASCADE);--添加数据INSERTINTOemployee(ename,age,dept_id)VALUES('张百万',20,1);INSERTINTOemployee(ename,age,dept_id)VALUES('赵四',21,1);INSERTINTOemployee(ename,age,dept_id)VALUES('广坤',20,1);INSERTINTOemployee(ename,age,dept_id)VALUES('小斌',20,2);INSERTINTOemployee(ename,age,dept_id)VALUES('艳秋',22,2);INSERTINTOemployee(ename,age,dept_id)VALUES('大玲子',18,2);--删除部门编号为2的记录DELETEFROMdepartmentWHEREid=2;2.多表关系设计实际开发中,一个项目通常需要很多张表才能完成。例如:一个商城项目就需要分类表(category)、商品表(products)、订单表(orders)等多张表。且这些表的数据之间存在一定的关系,接下来我们一起学习一下多表关系设计方面的知识

1)分析:省和市之间的关系是一对多关系,一个省包含多个市

2)SQL是实现

#创建省表(主表,注意:一定要添加主键约束)CREATETABLEprovince(idINTPRIMARYKEYAUTO_INCREMENT,NAMEVARCHAR(20),descriptionVARCHAR(20));#创建市表(从表,注意:外键类型一定要与主表主键一致)CREATETABLEcity(idINTPRIMARYKEYAUTO_INCREMENT,NAMEVARCHAR(20),descriptionVARCHAR(20),pidINT,--添加外键约束CONSTRAINTpro_city_fkFOREIGNKEY(pid)REFERENCESprovince(id));3)查看表关系

2)SQL实现

#创建演员表CREATETABLEactor(idINTPRIMARYKEYAUTO_INCREMENT,NAMEVARCHAR(20));#创建角色表CREATETABLErole(idINTPRIMARYKEYAUTO_INCREMENT,NAMEVARCHAR(20));#创建中间表CREATETABLEactor_role(--中间表自己的主键idINTPRIMARYKEYAUTO_INCREMENT,--指向actor表的外键aidINT,--指向role表的外键ridINT);3)添加外键约束

--为中间表的aid字段,添加外键约束指向演员表的主键ALTERTABLEactor_roleADDFOREIGNKEY(aid)REFERENCESactor(id);--为中间表的rid字段,添加外键约束指向角色表的主键ALTERTABLEactor_roleADDFOREIGNKEY(rid)REFERENCESrole(id);4)查看表关系

1)创建db3_2数据库

--创建db3_2数据库,指定编码CREATEDATABASEdb3_2CHARACTERSETutf8;2)创建分类表与商品表

3)插入数据

1)语法格式

SELECT字段名FROM表1,表2;2)使用交叉连接查询商品表与分类表

SELECT*FROMcategory,products;3)观察查询结果,产生了笛卡尔积(得到的结果是无法使用的)

2)笛卡尔积

假设集合A={a,b},集合B={0,1,2},则两个集合的笛卡尔积为{(a,0),(a,1),(a,2),(b,0),(b,1),(b,2)}。

from子句后面直接写多个表名使用where指定连接条件的这种连接方式是隐式内连接.使用where条件过滤无用的数据

SELECT字段名FROM左表,右表WHERE连接条件;1)查询所有商品信息和对应的分类信息

2)查询商品表的商品名称和价格,以及商品的分类信息可以通过给表起别名的方式,方便我们的查询(有提示)

SELECTp.`pname`,p.`price`,c.`cname`FROMproductsp,categorycWHEREp.`category_id`=c.`cid`;3)查询格力空调是属于哪一分类下的商品

使用innerjoin...on这种方式,就是显式内连接语法格式

SELECT字段名FROM左表[INNER]JOIN右表ON条件--inner可以省略1)查询所有商品信息和对应的分类信息

#显式内连接查询SELECT*FROMproductspINNERJOINcategorycONp.category_id=c.cid;2)查询鞋服分类下,价格大于500的商品名称和价格

#查询鞋服分类下,价格大于500的商品名称和价格--我们需要确定的几件事--1.查询几张表products&category--2.表的连接条件从表.外键=主表的主键--3.查询的条件cname='鞋服'andprice>500--4.要查询的字段pnamepriceSELECTp.pname,p.priceFROMproductspINNERJOINcategorycONp.category_id=c.cidWHEREp.price>500ANDcname='鞋服';3.4.2外连接查询3.4.2.1左外连接1)语法格式

2)左外连接,查询每个分类下的商品个数

SELECT查询字段FROM表WHERE字段=(子查询);1.通过子查询的方式,查询价格最高的商品信息

#通过子查询的方式,查询价格最高的商品信息--1.先查询出最高价格SELECTMAX(price)FROMproducts;--2.将最高价格作为条件,获取商品信息SELECT*FROMproductsWHEREprice=(SELECTMAX(price)FROMproducts);2.查询化妆品分类下的商品名称商品价格

#查询化妆品分类下的商品名称商品价格--先查出化妆品分类的idSELECTcidFROMcategoryWHEREcname='化妆品';--根据分类id,去商品表中查询对应的商品信息SELECTp.`pname`,p.`price`FROMproductspWHEREp.`category_id`=(SELECTcidFROMcategoryWHEREcname='化妆品');3.查询小于平均价格的商品信息

--1.查询平均价格SELECTAVG(price)FROMproducts;--1866--2.查询小于平均价格的商品SELECT*FROMproductsWHEREprice<(SELECTAVG(price)FROMproducts);4.3子查询的结果作为一张表语法格式

SELECT查询字段FROM(子查询)表别名WHERE条件;1.查询商品中,价格大于500的商品信息,包括商品名称商品价格商品所属分类名称

--1.先查询分类表的数据SELECT*FROMcategory;--2.将上面的查询语句作为一张表使用SELECTp.`pname`,p.`price`,c.cnameFROMproductsp--子查询作为一张表使用时要起别名才能访问表中字段INNERJOIN(SELECT*FROMcategory)cONp.`category_id`=c.cidWHEREp.`price`>500;注意:当子查询作为一张表的时候,需要起别名,否则无法访问表中的字段。

SELECT查询字段FROM表WHERE字段IN(子查询);1.查询价格小于两千的商品,来自于哪些分类(名称)

1.查询家电类与鞋服类下面的全部商品信息

#查询家电类与鞋服类下面的全部商品信息--先查询出家电与鞋服类的分类IDSELECTcidFROMcategoryWHEREcnameIN('家电','鞋服');--根据cid查询分类下的商品信息SELECT*FROMproductsWHEREcategory_idIN(SELECTcidFROMcategoryWHEREcnameIN('家电','鞋服'));

1.子查询如果查出的是一个字段(单列),那就在where后面作为条件使用.2.子查询如果查询出的是多个字段(多列),就当做一张表使用(要起别名).

1,尽量遵循范式理论的规约,尽可能少的冗余字段,让数据库设计看起来精致、优雅、让人心醉。2,合理的加入冗余字段这个润滑剂,减少join,让数据库执行性能更高更快。

THE END
1.家用电器的分类,家用电器的分类有哪些大家好,今天小编关注到一个比较有意思的话题,就是关于家用电器的分类的问题,于是小编就整理了3个相关介绍家用电器的分类的解答,让我们一起看看吧。 家用电器属于什么品? 家电都有什么啊? 现代化生活需要哪些家用电器? 家用电器属于什么品? 家用电器属于耐用消费品的一种。 http://xundian.scandiatrailers.com/post/1498.html
2.小型家用电器的分类与选择在日常生活中,随着科技的发展和消费品的多样化,小型家用电器成为了人们不可或缺的一部分。它们通常体积较小,功能特定,能够帮助我们完成各种琐碎但又实用的任务。 二、小型家用电器的分类 根据使用目的和功能,小型家用电器可以分为几大类: 1.厨房小型家用电器:如微波炉、食物烘箱、手持式料理机等,它们不仅节省空间,还https://www.zjhazxz.cn/wei-bo-lu/393383.html
3.补贴家电类型包含什么?冰箱(含冰柜)、洗衣机(含洗烘一体机)、电视、空调、电脑(含学习机)、热水器(含壁挂炉)、家用灶具(含集成灶)、吸油烟机等8类家电产品。 扫一扫在手机打开当前页关于我们 建议意见 站点地图 法律声明 客服信箱:sjsxxgkb@bjsjs.gov.cn 政务服务热线:12345 石景山12345接诉即办 北京石景山 主办:北京市石景山区人民https://www.bjsjs.gov.cn/gongkai/zwgkpd/ztzl/2024/yjhx/jdyjhx/nwwd/202411/t20241120_87420.shtml
4.小家电种类全解析从生活必需到时尚潮流小家电种类全解析从生活必需到时尚潮流 智能家居设备 智能家居设备是现代生活中不可或缺的一部分,它们能够通过无线网络连接,实现远程控制和自动化操作。这些设备包括智能灯泡、智能插座、中央空调、恒温器等,可以让用户在手机或平板电脑上轻松调整室内的环境,提高生活的便捷性和舒适度。例如,一款高级恒温器不仅可以根据https://www.afffqcvi.cn/re-dian-zi-xun/432982.html
5.家电产品种类全解析日常生活中不可或缺的家用电器家电的重要性有哪些? 在现代生活中,日用家电已经成为人们日常生活中的必需品。它们不仅能够提高我们的生活效率,还能提供舒适和便捷。从冰箱到洗衣机,从空调到电视,每一种设备都在不同的程度上影响着我们的每一天。 冰箱:食品储存与保鲜的最佳伙伴 冰箱是我们最基本的家庭用品之一,它通过低温环境来延长食物的保质期。https://www.firedslze.cn/ji-qi-ren/349926.html
6.html家电分类,电器有哪些种类?家用电器都有哪些类型?html家电分类,电器有哪些种类?家用电器都有哪些类型? 现在生活条件在不断的变好人们家庭条件也越来越好。在生活中每个家庭中到处都能够看到家电的存在。给生活提供了很多的方便。家用电器的种类和品牌也是多,在购买之前做个简单的了解还是挺有必要的。接下来,就来看看电器有哪些种类及家用电器都有哪些类型。https://blog.csdn.net/weixin_42362146/article/details/118205926
7.家用电器有哪些种类和区别,家用电器有那些分别给我介绍一下朋友,家用电器的分类有交流供电和直流供电,具体只要是使用220伏的就是交流类,其它使用的比如手机手电这些就是直流类。 6,家电包含有哪些 日常家电有:加湿器、电磁炉、饼档、微波炉、电水壶、电吹风、热水器、空调、音箱、电脑、电扇、豆浆机、电煎盘、榨汁机、压力锅、电饭包、油烟机、炉灶等。家用电器分类:制冷http://www.jiebohui.com/znjd/jdzs/224010.html
8.小家电都有哪些种类家用电子产品的丰富分类与应用小家电都有哪些种类- 家用电子产品的丰富分类与应用 在当今快节奏的生活中,小家电已经成为我们日常生活中不可或缺的一部分。它们不仅能够提高我们的工作效率,也能让我们的生活更加便捷和舒适。那么,小家电都有哪些种类呢?下面,我们就来一一探讨。 首先,智能小家电是最受欢迎的类型之一。这类产品通常集成了人工智能https://www.3oh2lnsk.com/ji-qi-ren/411029.html
9.空调类型分类全解从窗式到中央制冷懂得选择的艺术空调类型分类全解:从窗式到中央制冷,懂得选择的艺术 空调的基本分类 在讨论空调类型之前,我们需要了解空调的基本分类。空调主要可以分为三大类:单机式、多机组联控和中央制冷系统。 单机式空調 单机式空調是最常见的一种,它通常安装在房间内部,可以独立工作,不需要与https://www.pvo6fxiso.cn/xi-yi-ji/187120.html
10.空调类型分类详解从窗式到中央分体全面了解家用与商用空调种类空调类型分类详解:从窗式到中央分体,全面了解家用与商用空调种类 空调的基本类型 空调是根据其安装位置和功能来进行分类的。首先,我们需要了解空调的基本类型,这包括了窗式、壁挂式、吊装式以及地面型。 窗式空調:小户型家庭之选 窗式空調因其设计简洁且安装方便,通常https://www.smmokxkyd.cn/bing-xiang/285193.html
11.小家电的种类有哪些从日常生活中不可或缺的冰箱洗衣机到便捷生活小家电通常指的是那些用于家庭和个人使用的小型电子设备,它们能够提供一定程度的便利性,如节省时间、提高效率或者改善居住环境。在分类上,小家电可以根据其功能和用途分为多个类型。 二、厨房小家电 1. 烹饪辅助工具 微波炉:快速加热食物,适合忙碌的人群。 https://www.kc4hfm3p3.cn/re-dian-zi-xun/430053.html
12.空调类型分类详解分为窗型分体柜式和吊装等多种空调类型的分类 什么是空调? 首先,我们要了解空调的基本概念。空调全称为“空气調節”,是一种用于控制室内外环境温度、湿度和风速等条件的设备。在炎热的夏季或寒冷的冬季,人们通过使用空调来创造一个舒适宜人的居住环境。随着技术的发展,空调已经成为现代生活中不可或缺的一部分。 https://www.gppwqveja.cn/chu-wei/103447.html
13.空调类型分类详解从窗式到中央制冷揭秘各种家用与商用空调种类通过上述分类,我们可以更好地理解不同类型空调所具备的一些优势和适用的场景,从而做出更加符合自己需求的选择。此外,每一种类型都不断地进行创新和升级,使得我们的生活更加舒适,也为绿色环保提供了一定的支持。 标签:荣事达洗衣机、全自动洗衣机怎么清理污垢、全自动洗衣机怎么用教程、三星电冰箱、对开门冰箱https://www.872wudjs.cn/xi-yi-ji/489059.html
14.空调类型分类详解从直流到分体全面了解家用与商用差异空调类型分类详解:从直流到分体,全面了解家用与商用的差异 空调的基本分类 空调按照其工作原理和结构可以分为两大类:机械式空调和蒸发式空调。机械式空调又可进一步细化为直流冷暖机、循环热泵等多种型号。 直流冷暖机的特点与应用 直流冷暖机是通过电磁铁控制风扇旋转方向实现换向,从而在不同的季节提供制冷或制热服务https://www.xcucvodv.cn/chu-wei/278628.html
15.2024年白色家电的发展趋势通过对白色家电细分市场的划分和重点企业的剖析,揭示了行业竞争格局、品牌影响力和市场集中度。此外,白色家电报告还为投资者提供了关于白色家电行业未来发展趋势的权威预测,以及潜在风险和应对策略,旨在助力各方做出明智的投资与经营决策。 第一部分 白色家电行业发展分析 第一章 白色家电相关概述 第一节 家电的分类 一https://www.cir.cn/R_JiaDianJiaJu/11/BaiSeJiaDianDeFaZhanQuShi.html
16.空调类型的分类与应用概述从传统技术到现代智能系统在全球化和城市化进程加速的今天,空气 Conditioning(空调)已经成为人们生活中不可或缺的一部分。随着科技的不断发展,空调不仅仅局限于室内冷却,还能够提供多种功能,如除湿、净化以及节能等。因此,对于不同的需求和环境条件,我们需要对空调进行分类,以便更好地适应各种场合。 https://www.r5ist07p.cn/chu-wei/99903.html
17.常用家用电器的分类与选择常用家用电器的分类与选择 电冰箱 在现代家庭中,电冰箱是不可或缺的一种家用电器,它的主要功能是保持食物和饮料的新鲜,并且能够根据需要冷冻或者保存在适宜温度下。市场上有多种类型的冰箱,从小型单门冰箱到大型三开门甚至五门冰箱,不同大小和功能满足了不同用户需求。https://www.dzvj5vem.cn/wei-bo-lu/50242.html
18.家用电器行业定义及分类分析.docx家电行业家用电器行业定义及分类分析.docx 24页VIP内容提供方:187***5710 大小:30.99 KB 字数:约1.17万字 发布时间:2022-11-24发布于重庆 浏览人气:190 下载次数:仅上传者可见 收藏次数:0 需要金币:*** 金币 (10金币=人民币1元)家用电器行业定义及分类分析.docx 关闭预览 想预览更多内容,点击免费https://m.book118.com/html/2022/1121/5034230124010022.shtm
19.空调类型的分类在炎热的夏季,空调成为我们不可或缺的家电之一。然而,在选择和使用时,我们是否真正了解不同的空调类型及其特点呢?今天,我们就来探索一下家用、商用和中央三种常见的空调类型,以及它们如何帮助我们迎接酷暑。 家用空调(分为单体式和多机房式) 家用的主要是指安装在家庭住宅中的小型冷暖设备,这类产品通常较为普遍且价https://www.amppp.cn/ke-yan-dong-tai/114629.html
20.常见的空调种类分为哪几种怎样选购合适的空调空调是我们家居必备的家用电器,因此选择一个合适的空调是很有必要的,市场上的空调类型很多,参差不齐,常常让人无从下手,下面就来给大家介绍一下常见的空调种类分为哪几种,怎样选购合适的空调。 一、常见的空调种类分为哪几种 1、壁挂式空调 壁挂式空调*,一般人都会用壁挂式空调。壁挂式空调使用舒适,主要静音功能https://www.qizuang.com/gonglue/kt/136562.html