数据库中的外键是什么意思

数据库中的外键是什么意思,第1张

主外键的存在是依托两个实体之间的关系而存在的;

比如班级与学生的关系:

一个班级可以有多个学生,并且一个学生只能属于一个班级,这就是一对多的关系;

那么设计数据库的时候就应该在学生表内存放班级的ID作为外键,为什么不在班级表内放学生呢?

因为,你想一想班级表内如果放学生那么记录可能就是这样:

1班ID 1班 xx同学id

1班ID 1班 xx同学id

这是不允许的,班级表内班级为主键,是唯一的不允许相同记录的;

下面简单给你讲下大概建成的表结构

--建班级表

create table class(

classid int primary key,--定义班级ID为主键

classname varchar(15)

)

--建学生表

create table students(

studentid int primary key,--定义学生ID为主键

classid int ,--外键值,跟班级表classid 属性类型相同

stuname varchar(20),--学生姓名

---定义外键

foreign key(classid) references class(classid) --本表classid是基于class表classid的外键

)

---------

如上定义了主外键后,两个表间的关系就是一对多的关系了,并且学生表内的classid必须依托班级表的classid存在,也就是说外键必须要主键存在的时候才能创建,例如:

--在班级表为空的情况往学生表插入一条记录是不允许的:

insert into students(studentid,classid,stuname)values(1,1,'小明')

系统会抛出异常提示主键表班级表内班级ID不存在这样是不允许插入的;

必须要先往班级表内插入一条记录:

insert into class(classid,classname)values(1,'一班')

后才能执行插入前面一条往学生表插入信息的语句

--------------可了解一些了?真累啊

外键的设计初衷是为了在数据库端保证对逻辑上相关联的表数据在 *** 作上的一致性与完整性。

优点:

精简关联数据,减少数据冗余

避免后期对大量冗余处理的额外运维 *** 作。

降低应用代码复杂性,减少了额外的异常处理

相关数据管理全由数据库端处理。

增加文档的可读性

特别是在表设计开始,绘制 ER 图的时候,逻辑简单明了,可读性非常强。

缺点:

性能压力

外键一般会存在级联功能,级联更新,级联删除等等。在海量数据场景,造成很大的性能压力。比如插入一条新记录,如果插入记录的表有 10 个外键,那势必要对关联的 10 张表逐一检查插入的记录是否合理,延误了正常插入的记录时间。并且父表的更新会连带子表加上相关的锁。

其他功能的灵活性不佳

比如,表结构的更新等。

主键是定义一个表中起主要作用的数据项,这些数据项的数据在表中是唯一的,同时系统按主键为表建立索引。\x0d\\x0d\外键是定义一个表中的某数据项的数据,要参照另一个表的主键数据。既没有在另一个表的主键数据中出现的数据,不允许在这个表的外键数据项中出现。\x0d\\x0d\主键:表中记录的唯一标识\x0d\\x0d\外键:依赖于别的表的数据\x0d\\x0d\唯一键:在表中唯一\x0d\\x0d\键是一个或多个字段的组合\x0d\\x0d\唯一键:可以确定一条记录的字段(或字段组合),一张表可以有多个唯一键,正如可以识别你的身份的可以是身份z,学生证,军人证\x0d\\x0d\主键:你把唯一键的一个选做主键,一张表只能有一个主键\x0d\\x0d\外键:所定义的外键是另一张表的主键,\x0d\\x0d\主键:表中记录的唯一标识,外键:依赖于别的表的数据,唯一键:在表中唯一。\x0d\\x0d\主键和唯一键的一个区别:主键是不允许为NULL的,唯一键则可以,当然你可以加上NOT NULL来限制它\x0d\\x0d\主键:能够唯一表示数据表中的每个记录的字段或者字段的组合就称为主键。一个主键是唯一识别一个表的每一行记录,但这只是其作用的一疗分,主键的主要作用是将记录和存放在其他表中的数据进行关联,在这一点上,主键是不同表中各记录间的简单指针,主键约整就是确定表中的每一条记录,主键不能是空值,唯一约束是用于指定一个或多个列的组合值具有唯一性,以防止在列中输入重复的值,所以,主键的值对用户而言是没有什么意义,并且和它赋予的值也没有什么特别联系。\x0d\\x0d\外键:\x0d\\x0d\若有两个表A,B,C是A的主键,而B中也有C字段,则C就是表B的外键,外键约束主要用来维护两个表之间数据的一致性。\x0d\\x0d\A为基本表,B为信息表。\x0d\\x0d\在数据库中,常常不只是一个表,这些表之间也不是相互独立的,不同的表之间需要建立一种关系,才能将它们的数据相互沟通,而在这个沟通过程中,就需要表中有一个字段作为标志,不同的记录对应的字段取值不能相同,也不能是空白的,通过这个字段中不同的值可以区别各条记录,就像我们区别不同的人,每个人都有名字,但它却不能作为主键,因为人名很容易出现重复,而身份z号是每个人都不同的,所以可以根据它来区别不同的人,数据库的表中作为主键的段段就要像人的身份z号一样,必须是每个记录的值都不同,这才能根据主键的值来确定不同的记录。\x0d\\x0d\什么是外键?\x0d\\x0d\说明你的表A中的某项a,是引用表B的某列b\x0d\\x0d\为什么要使用外键?\x0d\RDBMS的基本概念,可以维护数据库的完整。\x0d\\x0d\如何来用,涉及到数据库的定义。\x0d\\x0d\唯一约束和主键的区别是什么?\x0d\\x0d\唯一性约束\x0d\\x0d\唯一性约束所在的列允许空值,但是主键约束的列不允空值。\x0d\\x0d\可以把唯一约束放在一个或者多个列上,但是,唯一性约束所在的列并不是表的主键列。\x0d\\x0d\唯一性约束强制在指定的列上创建一个唯一性索引,在默认情况下,创建唯一性的非聚簇索引,但是,也可以指定所创建的索引是聚簇索引。\x0d\\x0d\主键:\x0d\\x0d\用于标识某行而且与之相关\x0d\\x0d\是不可能更新\x0d\\x0d\不应该允许空\x0d\\x0d\唯一域/字段\x0d\\x0d\用于作为访问某行的可选手段。\x0d\\x0d\只要唯一就可以更新\x0d\\x0d\可以为空\x0d\\x0d\注意唯一和主键的区别,它们都是创建一个唯一的索引,一个表格仅含有一个主键约束列,但是,它有可能在其他列中含有许多的唯一约束。

首先楼主要明白不同表中的相同字段是没有任何关系的 ,然后也没看到你的B表

你的问题:你的第一个问题你自己不觉得是自相矛盾吗?

A表中的主键是B表的外键,那么这个外键在B表中可以是主键吗? 这句话你的意思就相当于问 主键和外键可以是一个字段吗? 那么回答肯定是否定的 。一个字段要么是主键 要么是外键 不可能又是主键又是外键 ,然后主键和主键是同一级别的 没有谁约束谁,只有主键可以约束外键,然后我给楼主讲解一下主外键的关系,不要死记硬背定义,要理解。

比如a表的主键 如果是b表的外键的话 那么这个外键的每一个值都必须在a的主键里存在,如果b的这个外键定义可以为空的话,那么b这个外键的值只有两个情况:要么值在a的主键里选,要么为空。

就这么简单的一句话。

现在的数据库大部分都是关系型数据库,既然是关系型数据库。那么一定会有一定的标识来表示数据库之间的关系。这个关系就是以主外键来标识的。关系主要分一对一,一对多,和多对多的关系

。一对一的关系就是一个两个表,一个存的是登陆信息表。另一个存人员信息表。假定一个人只有一个登陆账号,那么两个表就是一对一的关系。那么最简单的设置约束的方式就是另一张表的主键也是外键。这样就一对一对应起来。但是大部分的关系都是一对多和多对多。先回答你的问题,一张表如果某一列是外键,那么他相对引用的另一张表的列中的数据

一定是唯一的。很简单的道理,如果不唯一,数据库不知道具体关联到是哪个行,哪条数据。大部分在设计数据库时,除非对数据库有特殊要求,基本都是不设置主外键的(项目中)。因为设置主外键后,数据库进行更改就会受到限制。这种关系完全可以在程序中来体现

两个办法

1、先主表插入数据,再从表插入数据集

2、先禁用外键约束

ALTER

TABLE

表名

NOCHECK

CONSTRAINT

外键约束名

然后插入数据

然后再启用约束

ALTER

TABLE

表名

CHECK

CONSTRAINT

外键约束名

查看mysql外键方式主要是通过第三方工具或者是sql语句,主要有以下三种方式

1、使用Navicateformysql,打开数据库、查看数据库表、查看设计表、选择外键选项卡,就可以查看外键

2、使用sql语句

showcreatetable表名;这个命令可以查看表的所有信息,包括一些字段类型,字段的约束,外键,主键,索引,字符编码等等。

3、查看某个表或者某个列的外键信息

selectTABLE_NAME,COLUMN_NAME,CONSTRAINT_NAME,

REFERENCED_TABLE_NAME,REFERENCED_COLUMN_NAME from KEY_COLUMN_USAGE where REFERENCED_TABLE_NAME = '<table>';

如果需要查看某一列上的外键关系,需要添加列的条件REFERENCED_COLUMN_NAME.xx=xx

方法一比较直观,方法三比较准确!

扩展资料:

MySQL是一种开放源代码的关系型数据库管理系统(RDBMS),MySQL数据库系统使用最常用的数据库管理语言--结构化查询语言(SQL)进行数据库管理。

由于MySQL是开放源代码的,因此任何人都可以在GeneralPublicLicense的许可下下载并根据个性化的需要对其进行修改。MySQL因为其速度、可靠性和适应性而备受关注。大多数人都认为在不需要事务化处理的情况下,MySQL是管理内容最好的选择。

参考资料来源:百度百科——mySQL

以上就是关于数据库中的外键是什么意思全部的内容,包括:数据库中的外键是什么意思、数据库中外键的概念及作用。、数据库的主键和外键有什么区别等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9792557.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-02
下一篇 2023-05-02

发表评论

登录后才能评论

评论列表(0条)

保存