MySQL笔记——外键约束和表关系(一对一,多对一,多对多)

一、外键约束

		概念:外键用来让两个表的数据之间建立链接,保证数据的一致性和完整性。语法:(1)添加约束-- 创建表是添加外键约束CREATE TABLE 表名(列名 数据类型,…[CONSTRAINT] [外键名称] FOREIGN KEY(外键列名) REFERENCE 主表(主表列名));-- 建完表后添加外键约束ALTER TABLE 表名 ADD CONSTRAINT 外键名称 FOREIGN KEY (外键字段名称) REFERENCE 主表名称(主表列名称)(2)删除约束ALTER TABLE 表名 DROP FOREIGN KEY 外键名称;

案例

首先创建员工信息表和部门信息表,并在员工表中添加外键。(把员工表当作从表,部门表当作主表),员工表和部门表就是一个多对一的案例
-- 员工表
CREATE TABLE emp(id int PRIMARY KEY auto_increment, -- idname VARCHAR(20),-- 姓名age int, -- 年龄dep_id int, -- 部门-- 添加外键dep_id,关联dept表的id主键CONSTRAINT fk_emp_dept FOREIGN KEY(dep_id) REFERENCES dept(id)
);-- 部门表
CREATE TABLE dept(id int PRIMARY KEY auto_increment, -- 部iddep_name VARCHAR(20), -- 部门名称addr VARCHAR(20) -- 地址
);INSERT INTO emp(NAME,age,dep_id) VALUES
('张三',20,1),
('李四',20,1),
('王五',20,1),
('赵六',20,2),
('田七',22,2),
('周八',18,2);INSERT INTO dept(dep_name,addr) VALUES
('研发部','广州'),
('销售部','深圳');-- 删除外键
ALTER TABLE emp DROP FOREIGN KEY fk_emp_dept;

按照如下图所示顺序执行sql语句:部门表–>员工表–>部门信息–>员工信息
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

执行完毕后如下图点击对象选中这两个表,点击鼠标右键,选中‘逆向表到模型’。

在这里插入图片描述

可以看到这两个表的模型中间有一条线,这条线代表外键。

在这里插入图片描述

此时我们执行删除外键的语句

在这里插入图片描述

然后再次执行上述‘逆向表到模型’ 可以看到线消失了,表示我们删除成功。

在这里插入图片描述

二、表关系之一对多

1、一对多(多对一)如:部门和员工,一个部门对应多个员工,一个员工对应一个部门2、实现方式:在多的一方建立外键,指向一的一方的主键3、具体实现参照上例,部门和员工。

三、表关系之多对多

	1、多对多如:商品和订单,一个商品对应多个订单,一个订单包含多个商品2、实现方式建立第三张中间表,中间表至少包含两个外键,分别关联两方主键3、实现案例:
-- 订单表
CREATE TABLE tb_order(id int PRIMARY KEY auto_increment, -- idpayment double(10,2),payment_type TINYINT,status TINYINT
);-- 商品表
CREATE TABLE tb_goods(id int PRIMARY KEY auto_increment,title VARCHAR(100),price DOUBLE(10,2)
);-- 订单商品中间表
CREATE TABLE tb_order_goods(id int PRIMARY KEY auto_increment,order_id int,goods_id int,count int
);-- 添加外键,向订单商品中间表添加两个外键,关联商品表和订单表的主键。
ALTER TABLE tb_order_goods ADD CONSTRAINT fk_order_id FOREIGN KEY(order_id) REFERENCES tb_order(id);
ALTER TABLE tb_order_goods ADD CONSTRAINT fk_goods_id FOREIGN KEY(goods_id) REFERENCES tb_goods(id);
如图执行创建三个表

在这里插入图片描述

执行添加外键的语句

在这里插入图片描述

再次执行上述‘逆向表到模型’  具体对应关系如图标注。

在这里插入图片描述

四、表关系之一对一

	1、一对一如:用户信息和用户详情信息一对一关系多用于表拆分,将一个实体中经常使用的字段放一张表,不经常使用的字段放另一张表,用于提升查询能力2、实现方式:在任意一方加入外键,关联另一方主键,并且设置外键为唯一(UNIQUE)3、实现案例
-- 创建用户表
CREATE TABLE tb_user(id int PRIMARY KEY auto_increment,photo VARCHAR(30),nickname VARCHAR(20),age int,sex char(2),desc_id int NOT NULL UNIQUE -- 设置关联的用户详情表主键不为空且唯一
);-- 创建用户详情表CREATE TABLE tb_user_desc(id int PRIMARY KEY auto_increment,city VARCHAR(10),edu VARCHAR(10),income DOUBLE(7,2),status VARCHAR(10)
);-- 添加用户
INSERT INTO TABLE tb_user(photo,nickname,age,sex,desc_id) VALUES
('a.jpg','一场梦',23,'女',1),
('b.png','风清扬',35,'男',2),
('c.jpg','赵云',41,'男',3),-- 添加用户详情信息
INSERT INTO TABLE tb_user_desc(city,edu,income,status) VALUES
('广州','硕士',300000,'单身'),
('湖北','本科',100000,'离异'),
('河南','本科',200000,'单身'),-- 添加外键
ALTER TABLE tb_user ADD CONSTRAINT fk_user_userdesc FOREIGN KEY(desc_id) REFERENCES tb_user_desc(id);
如图执行语句创建用户表和用户详情表

在这里插入图片描述

往两张表中添加数据

在这里插入图片描述

添加外键

在这里插入图片描述

再次执行上述‘逆向表到模型’  具体对应关系如图。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/433677.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

asterisk 学习笔记1

一: Asterisk为特定的目标指定了一些extension名称。 i:Invalid s:Start h:Hangup t:Timeout T:AbsoluteTimeout o:Operator 一般常用的是i和t 二: asterisk拨号方案的调试可以用NoOp()函数,这个函数什么也不做,…

hashCode()方法的作用使用分析

一直以来都想写篇文章来说明下hashCode的作用以及相关的知识,许久没动笔,最近找了点资料,自己整理了一下,于是就诞生了下面的东西! (1)前言,想要明白hashCode的作用,你必须要先知道Java中的集合…

仿个人税务 app html5_【注意】你下载的可能是个假的个税App

新个税法从1月初开始实施。国家税务总局推出“个人所得税”APP,方便纳税人线上填报资料进行专项抵扣。几天来,这款APP的下载量和注册量大幅增长。随之而来的是,很多商业公司制作的各类“个税”APP也成为热门。这其中有不少纯属蹭热点&#xf…

MySQL笔记——多表查询

多表查询不能使用 SELECT * from emp, dept; 会产生笛卡尔积。 笛卡尔积,有A,B两个集合,A中有5条信息,B中有4条信息,那么查询结果就是5*420条一、内连接查询 -- 隐式内连接SELECT 字段列表 FROM 表1,表2,… WHERE 条件…

遇见王沥川的人生感悟_23岁酱油泡饭默默无闻,31岁逆袭人生,王彦霖有何魅力?...

文/小白说娱S姐 原创精品,请勿转载如果兜里只剩下1块钱,生活所迫你会怎样过?王彦霖23岁刚毕业熬过了1元危机,他永远都不会想到当年咬牙坚持熬成就了如今的综艺诸葛。《元气满满的哥哥》连播六期多次排名第一,成为芒果台…

antd vue form 手动校验_参与《开课吧》vue训练营笔记(Day1)

大神说的目标:Vue 挑战20k组件间通信component 官网 详解组件间的传递方式:父传子 直接属性传递子传父 this.$emit 时间传递兄弟组件 利用父组件搭桥组件和子孙 provide / inject子孙 -> 祖先 this.$dispatch 或provide 获取组件元素实例$listeners $…

细学PHP 14 mysql-4

预留转载于:https://www.cnblogs.com/cnmice/archive/2013/04/17/3027102.html

Asterisk针对Mysql的extconfig.conf配置

Asterisk针对Mysql的extconfig.conf配置,这其中涉及到的表的structure [setting] sipusers > mysql,general,sip_buddies sippeers > mysql,general,sip_buddies queues > mysql,general,queue_table queue_members >mysql,general,queue_member_tabl…

ipfs 云服务器_IPFS加速云服务生机和分布式存储

如果能把一个安卓系统或IOS系统安装到分布式存储里,不管人们在做什么,各项数据都可以通过面部识别就可以确认ID,数据的响应性快,安全性和便捷性更高。IPFS的节点上,未来访问网站不再需要HTTP,而是IPFS。分布…

MySQL笔记——打开日志

在my.ini文件中输入如下命令:log_outputFILE general_logon general_log_file"D:\\SoftwareTools\\Mysql\\mysqllog\\mysql.log" slow_query_logon long_query_time 2 slow_query_log_file"D:\\SoftwareTools\\Mysql\\mysqllog\\mysql_slow.log"…

链表怎么输出最后一个元素无空格_剑指offer系列----从尾到头打印链表

从尾到头打印链表信息卡片时间:2020-03-23题目:从尾到头打印链表tag:list题目描述输入一个链表,按链表从尾到头的顺序返回一个 ArrayList。01调用 reverse 函数解题思路这是一种简单粗暴的解法。先遍历一遍链表,在遍历…

a20_v2.0_k70运行在xhda20开发板

修改sys_config.fex文件两个地方 [clock] pll3 297 pll4 300 pll6 600 pll7 297 pll8 336 [dram_para] dram_baseaddr 0x40000000 dram_clk 408 d…

EntiyFramework :Update model from database引起的两个问题

EntiyFramework一大特点就是Code first,但难免有时候因特殊原因需要Update model from database。此次使用该功能时遇到两个问题,且记之。 [问题一] Error 3027: No mapping specified for the following EntitySet/AssociationSet - XXXXXXX. [起因] 在…

MySQL笔记——JDBC入门

(一)JDBC简介 JDBC概念:(1)JDBC就是使用Java语言操作关系型数据库的一套API(2)全称:(Java DataBase Connectivity)Java数据库连接(二)…

python统计汉字个数是_Python中文词频统计

今天看到的一个统计,统计的金庸小说里面的高频词语。想着看了一周python,试试看能不能统计。 网上找的代码,调整顺序拼接了一下,分词库是结巴分词。 解决了python2.7中字典显示中文乱码的问题 分词代码:https://github…

cpu个数核数查看 服务器_服务器如何查看cpu核数

{"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],"search_count":[{"count_phone":6,"count":6}]},"card":[{"des":"云服务器 ECS(Elastic Compute Service)是一…

SQL语句大全-珍藏首选

下列语句部分是Mssql语句,不可以在access中使用。 SQL分类: DDL—数据定义语言(CREATE,ALTER,DROP,DECLARE)   DML—数据操纵语言(SELECT,DELETE,UPDATE,INSERT)   DCL—数据控制…

Maven笔记——maven下载与配置

(一)Maven简介 Apache Maven是一个项目管理和构建的工具,它基于项目对象模型(POM)的概念。通过一小段描述信息来管理项目的构建,报告和文档。○ 项目对象模型○ 依赖管理模型○ 插件• 仓库分类&#xff1a…

Telerik Reporting之生成报表

本文为原创文,难免会有一些小得瑕疵,敬请谅解。所有示例均是博主测试过的,如有转载请标明出处,谢谢。第一步:建立一个普通类库。 第二步:在此类库中,新建项——Telerik Report报表。 第三步&…

python相对路径下的shell_shell,python获取当前路径(脚本的当前路径) (aso项目记录)...

一、shell获取脚本当前路径 cur_dir$(cd "$(dirname "$0")"; pwd) #获取当前脚本的绝对路径,参数$0是当前脚本对象 等同于cd dirname $0; pwd 但是,cd "dirname $0";pwd是错的,因为dirname不能用双引号 代码实…