问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

数据库中外键的概念及作用是什么?

发布网友 发布时间:2022-04-07 16:14

我来回答

2个回答

懂视网 时间:2022-04-07 20:36

业务需求:用户表r_user保存用户名等信息。现需要给每个用户设置工作基地,一个用户可以有多个工作基地,多个用户也可以有一个工作基地,即多对多关系。(外键,若有两个表A,B,C是A的主键,而B中也有C字段,则C就是表B的外键,外键约束主要用来维护两个表之间数据的一致性)

设计方案:

方案一:建立一张用户基地表,与r_user与用户基地表,保持一对多的关系,如图所示,r_user的主键id做为r_user_base的外键user_id。通过r_user中的id,在r_user_base表中load该用户的所有工作基地。

技术分享

方案二:建立一张个基地表base_info保存目前存在的所有基地,再建一张user_base关系表。如图所示,关系表user_base有两个外键user_id与base_id 

技术分享 

方案一的特点是,只需要键一张表就可以完成业务需求。缺点是不够模块化,如果在其它地方还要用到基地信息,则还要再建基地表

 

方案二的特点是,用一张关系表连接两张信息表。便于信息表的维护与重复利用。

 

基于业务需求与以后扩展及重用性考虑,采用方案二实现需求。

 

在MySQL 3.23.44版本后,InnoDB引擎类型的表支持了外键约束。

外键的使用条件:

1.两个表必须是InnoDB表,MyISAM表暂时不支持外键(据说以后的版本有可能支持,但至少目前不支持);

2.外键列必须建立了索引,MySQL 4.1.2以后的版本在建立外键时会自动创建索引,但如果在较早的版本则需要显示建立; 

3.外键关系的两个表的列必须是数据类型相似,也就是可以相互转换类型的列,比如int和tinyint可以,而int和char则不可以;

 

外键的定义语法:

[CONSTRAINT symbol] FOREIGN KEY [id] (index_col_name, ...)

    REFERENCES tbl_name (index_col_name, ...)

[ON DELETE {RESTRICT | CASCADE | SET NULL | NO ACTION | SET DEFAULT}]

[ON UPDATE {RESTRICT | CASCADE | SET NULL | NO ACTION | SET DEFAULT}]

 cascade方式 

   在父表上update/delete记录时,同步update/delete掉子表的匹配记录 
   On delete cascade从mysql3.23.50开始可用; on update cascade从mysql4.0.8开始可用 。

 set null方式 

   在父表上update/delete记录时,将子表上匹配记录的列设为null 

   要注意子表的外键列不能为not null 

   On delete set null从mysql3.23.50开始可用; on update set null从mysql4.0.8开始可用 
No action方式 

 如果子表中有匹配的记录,则不允许对父表对应候选键进行update/delete操作 
   这个是ANSI SQL-92标准,从mysql4.0.8开始支持 
Restrict方式 

  同no action, 都是立即检查外键约束 

建立人员信息表:

1 CREATE TABLE `r_user` (2 `id` bigint(20) NOT NULL AUTO_INCREMENT,3 `NAME` varchar(20) DEFAULT NULL,4 `PASSWORD` varchar(50) DEFAULT NULL,5 `STAFF_NUM` varchar(20) DEFAULT NULL,6 `USER_NAME` varchar(20) DEFAULT NULL,7 PRIMARY KEY (`id`),8 ) ENGINE=InnoDB AUTO_INCREMENT=54 DEFAULT CHARSET=utf8 

建立基地信息表

1 CREATE TABLE `branch_info` (2 `ID` bigint(20) NOT NULL AUTO_INCREMENT,3 `BRANCH_CODE` varchar(255) DEFAULT NULL,4 `BRANCH_DESC` varchar(255) DEFAULT NULL,5 PRIMARY KEY (`ID`)6 ) ENGINE=InnoDB AUTO_INCREMENT=19 DEFAULT CHARSET=utf8 

关系表:

1 CREATE TABLE `user_work_base` (2 `id` bigint(20) NOT NULL AUTO_INCREMENT,3 `version` int(11) NOT NULL,4 `user_id` bigint(20) NOT NULL ,5 `base_id` bigint(20) NOT NULL ,6 PRIMARY KEY (`id`),7 CONSTRAINT `user_work_base_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `r_user` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,8 CONSTRAINT `user_work_base_ibfk_2` FOREIGN KEY (`base_id`) REFERENCES `branch_info` (`ID`) ON DELETE CASCADE ON UPDATE CASCADE9 ) ENGINE=InnoDB AUTO_INCREMENT=37 DEFAULT CHARSET=utf8

 

删除人员r_user表中人员A,关系表user_base自动删除A的关系数据。

 

如果外键使用Restrict方式,只删除A,则报错。

Cannot delete or update a parent row: a foreign key constraint fails (`maircrew`,`user_work_base`, CONSTRAINT `FK41EB46D32AA89EA0` 

FOREIGN KEY (`user_id`) REFERENCES `r_user` (`id`))

MySql多对多关系中外键的应用

标签:

热心网友 时间:2022-04-07 17:44

如果公共关键字在一个关系中是主关键字,那么这个公共关键字被称为另一个关系的外键。由此可见,外键表示了两个关系之间的联系。以另一个关系的外键作主关键字的表被称为主表,具有此外键的表被称为主表的从表。外键又称作外关键字。

外键的作用就是可以让表B是来自表A中,也就是保证了数据的规范性;如果要删除A表中的某个数据,那么首先要删除B表中同样的数据,这保证了数据的完整。

数据库(Database)是按照数据结构来组织、存储和管理数据的建立在计算机存储设备上的仓库。

简单来说是本身可视为电子化的文件柜——存储电子文件的处所,用户可以对文件中的数据进行新增、截取、更新、删除等操作。

在经济管理的日常工作中,常常需要把某些相关的数据放进这样的“仓库”,并根据管理的需要进行相应的处理。

严格来说,数据库是长期储存在计算机内、有组织的、可共享的数据集合。数据库中的数据指的是以一定的数据模型组织、描述和储存在一起、具有尽可能小的冗余度、较高的数据独立性和易扩展性的特点并可在一定范围内为多个用户共享。

这种数据集合具有如下特点:尽可能不重复,以最优方式为某个特定组织的多种应用服务,其数据结构独立于使用它的应用程序,对数据的增、删、改、查由统一软件进行管理和控制。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
瑞安市塘下航达汽车电器配件厂怎么样? 意尔康公司总部地址在哪里 I only wish to face the sea, with spring blossoms是什么意思 征信五级分类是什么?被纳入黑名单有什么影响? 你好,如果诈骗分子利用你隐私视频和盗取你的通讯录好友威胁你要钱的话... ...对方有我的私密照片还有通讯录,要求我给他五千,要不然就发我家人,我... ...现在已经一个月没有性生活了。但是她平时对我很好 是怎么了?_百度... 女人半年没有性生活正常吗 谁能用英语给我写一段游戏里面的征婚启事? 征婚启事用英文怎么说? 求500道加减乘除混合运算,小学的. 《濒死之眼》pdf下载在线阅读全文,求百度网盘云资源 excel表格一列不连续无规则的数字,如何让他变成按顺序排列的数字? 500道分数加减法混合运算题 带答案的 急急急急急急急急急急急!!!!!! 除了支付宝转账还有别的什么方法可以转账 excel 如何将横排不规则的数字,重新排列 加起来等于500以内的加减法算式 微信可以类似支付宝转账吗?要手续费吗? 《濒死之眼》epub下载在线阅读全文,求百度网盘云资源 10道500以内的加减混合算式,脱式计算。 excel单元格怎么在不规则数字和文字中增加逗号? 《濒死之眼》epub下载在线阅读,求百度网盘云资源 支付宝如何假装转账 怎么excel里面快速输入不规律数字 能不能在excel里面快速的输入一个范围内不规则数字 像图 濒死之眼小说txt全集免费下载 微信有类似支付宝的转账功能吗? 濒死之眼初中生适合看吗? Excel如何提取不规则数据? 《濒死之眼》pdf下载在线阅读,求百度网盘云资源 Excel表格里数字怎么设置不让它四涉五入 跪求濒死之眼 2019年由三浦春马 Haruma Miura主演的百度云资源 excel中怎么样计算同列中位置排列不规则的数字 除了支付宝以外还有什么方法可以转账? 求濒死之眼高清百度云资源 有什么类似于支付宝,财付通这类的平台,可以开网店,平且转账到银行卡的时候是及时转账的? excel表格如何设置不规则隔行递增序列?谢谢! 濒死之眼的介绍 分数加减法的口算题,同分母异分母都行,要500道。不用标号 不要答案,简单点的,尽量排整齐,谢谢。 求一个《东野圭吾-濒死之眼》书籍电子版百度云下载资源 有没有类似支付宝的软件,主要是银行卡转账用,(像京东钱包,百度钱包,财付通,微信钱包,这类这几个小 濒死之眼的作者简介 谁能帮我找500道有理数加减法练习啊 谁知道免费的转账平台,类似支付宝具有转账功能! 我已知的有翼支付 财付通 微信支付 易宝支付 还有 濒死之眼txt下载 一千内加减混合运算500道 濒死之眼 东野圭吾 像支付宝财付通一样的软件可以转账的有哪些,越详细越好 濒死之眼的内容介绍 分数加减法混合运算练习题 200题 求 谁有像支付宝一样转账,自己点看查收金额,(金额看得到的)单机版的一样