oracle 主键 外键与外键的关系

简单来讲 : 主键用来标识记录,索引用来加速查询。&
主键一定是唯一性索引,唯一性索引并不一定就是主键
&&& 所谓主键就是能够唯一标识表中某一行的属性或属性组,一个表只能有一个主键,但可以有多个候选索引。因为主键可以唯一标识某一行记录,所以可以确保执行数据更新、删除的时候不会出现张冠李戴的错误。主键除了上述作用外,常常与外键构成参照完整性约束,防止出现数据不一致。数据库在设计时,主键起到了很重要的作用。
&&& 主键可以保证记录的唯一和主键域非空,数据库管理系统对于主键自动生成唯一索引,所以主键也是一个特殊的索引。
&&& 一个表中可以有多个唯一性索引,但只能有一个主键
&&& 主键列不允许空值,而唯一性索引列允许空值
索引可以提高查询的速度.
其实主键和索引都是键,不过主键是逻辑键,索引是物理键,意思就是主键不实际存在,而索引实际存在在数据库中,主键一般都要建,主要是用来避免一张表中有相同的记录,索引一般可以不建,但如果需要对该表进行查询操作,则最好建,这样可以加快检索的速度
本文来自CSDN博客,转载请标明出处:
&&主键与外键的关系:&&这需要理清几个概念: 1)候选键: 关系中的一个属性组,其值能唯一标识一个元组,若从该属性组中去掉任何一个属性,它就不具有这一性质了,这样的属性组称作候选码。 2)主键:当有多个候选码时,可以选定一个作为主码,选定的候选码称主键 3)外键: 关系R中的一个属性组,它不是R的候选码,但它与另一个关系S的候选码相对应,则称这个属性组为R的外码或外键。举个例子: 有两个关系: student(s#,sname,d#),即学生这个关系有三个属性:学号,姓名,所在系别dep(d#,dname),即院系有两个属性:系号、系名则s#、d#是主键,也是各自所在关系的唯一候选键,d#是student的外键。&&
主键是定义一个表中起主要作用的数据项,这些数据项的数据在表中是唯一的,同时系统按主键为表建立索引。
外键是定义一个表中的某数据项的数据,要参照另一个表的主键数据。既没有在另一个表的主键数据中出现的数据,不允许在这个表的外键数据项中出现。
主键:表中记录的唯一标识
外键:依赖于别的表的数据
唯一键:在表中唯一
键是一个或多个字段的组合
唯一键:可以确定一条记录的字段(或字段组合),一张表可以有多个唯一键,正如可以识别你的身份的可以是身份证,学生证,军人证
主键:你把唯一键的一个选做主键,一张表只能有一个主键
外键:所定义的外键是另一张表的主键,
主键:表中记录的唯一标识,外键:依赖于别的表的数据,唯一键:在表中唯一。
主键和唯一键的一个区别:主键是不允许为NULL的,唯一键则可以,当然你可以加上NOT NULL来限制它
主键:能够唯一表示数据表中的每个记录的字段或者字段的组合就称为主键。一个主键是唯一识别一个表的每一行记录,但这只是其作用的一疗分,主键的主要作用是将记录和存放在其他表中的数据进行关联,在这一点上,主键是不同表中各记录间的简单指针,主键约整就是确定表中的每一条记录,主键不能是空值,唯一约束是用于指定一个或多个列的组合值具有唯一性,以防止在列中输入重复的值,所以,主键的值对用户而言是没有什么意义,并且和它赋予的值也没有什么特别联系。
若有两个表A,B,C是A的主键,而B中也有C字段,则C就是表B的外键,外键约束主要用来维护两个表之间数据的一致性。
A为基本表,B为信息表。
在数据库中,常常不只是一个表,这些表之间也不是相互独立的,不同的表之间需要建立一种关系,才能将它们的数据相互沟通,而在这个沟通过程中,就需要表中有一个字段作为标志,不同的记录对应的字段取值不能相同,也不能是空白的,通过这个字段中不同的值可以区别各条记录,就像我们区别不同的人,每个人都有名字,但它却不能作为主键,因为人名很容易出现重复,而身份证号是每个人都不同的,所以可以根据它来区别不同的人,数据库的表中作为主键的段段就要像人的身份证号一样,必须是每个记录的值都不同,这才能根据主键的值来确定不同的记录。
什么是外键?
说明你的表A中的某项a,是引用表B的某列b
为什么要使用外键?
RDBMS的基本概念,可以维护数据库的完整。
如何来用,涉及到数据库的定义。
唯一约束和主键的区别是什么?
唯一性约束
唯一性约束所在的列允许空值,但是主键约束的列不允空值。
可以把唯一约束放在一个或者多个列上,但是,唯一性约束所在的列并不是表的主键列。
唯一性约束强制在指定的列上创建一个唯一性索引,在默认情况下,创建唯一性的非聚簇索引,但是,也可以指定所创建的索引是聚簇索引。
用于标识某行而且与之相关
是不可能更新
不应该允许空
唯一域/字段
用于作为访问某行的可选手段。
只要唯一就可以更新
注意唯一和主键的区别,它们都是创建一个唯一的索引,一个表格仅含有一个主键约束列,但是,它有可能在其他列中含有许多的唯一约束。
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:16548次
排名:千里之外
原创:23篇
转载:48篇
(3)(20)(48)SQL server 问题,什么是外键,什么是主键?一个表的外键可以是另一个表的主键吗?
SQL server 问题,什么是外键,什么是主键?一个表的外键可以是另一个表的主键吗?
外键(Foreign Key)   如果公共关键字在一个关系中是主关键字,那么这个公共关键字被称为另一个关系的外键。由此可见,外键表示了两个关系之间的联系。以另一个关系的外键作主关键字的表被称为主表,具有此外键的表被称为主表的从表。外键又称作外关键字。换而言之,如果关系模式R中的某属性集不是R的主键,而是另一个关系R1的主键则该属性集是关系模式R的外键,通常在数据库设计中缩写为FK。在SQL SERVER中,主键是一个表中的约束。这个约束,一张表只能有一个,一般作为ID使用,这个约束一般给别人外键引用。这个约束的功能就是,不可重复,保证了唯一性,正是这种特性,使得大多数人都把他作为表中ID的字段使用。一个表的外键可以是另一个表的主键
相关知识等待您来回答
编程领域专家做java项目时的主键和外键是什么啊?_百度知道
做java项目时的主键和外键是什么啊?
提问者采纳
首先要知道一个概念:主键和外键,是针对数据库而言的,只有数据库中的表才有主键外键之说。主键就是一个表中的唯一索引,用于确定一个表中的一条记录,而外键是引用另外一个表中的主键,在当前表中不见得是唯一的,但是在被引用的表中一般是唯一的。例如:表1:用户编号(主键),用户名称 ,部门编号(外键)
表2:部门编号(主键),部门名称那么:对于表1来说,用户编号是主键,部门编号是外键,因为部门编号是引用表2的部门编号字段。希望搞清楚一些基本概念。
提问者评价
其他类似问题
外键的相关知识
其他2条回答
从应用程序开发的角度来讲主键和外键基本说的都是数据库操作。主键是指标识某个表中唯一的一条记录行的列,这个列中填写的值不允许有重复值,实际上主键就代表唯一对象的含义。对于外键来将是指实现关系型数据库系统表之间的关联的唯一实现方式。具体来讲就是某个表可能存在和其他表的关系,如果从比较实际的角度来讲可以这样解释:
一个描述学生的表和一个学生的成绩表,它们是有必然的关系的,一个成绩必需属于某个学生,一个成绩就不可能单独存在,在对于学生表和学生成绩表就要有个描述,来讲清某条成绩记录是属于哪个学生的,要实现这个关系,在当今关系型数据库系统中唯一的方式就是在成绩表中设置一个列,这个列中的值必须是学生表的主键的值,这个描述就会说明这个条成绩是属于哪个学生的,因为对于学生表来讲,主键描述的就是学生。这个引用学生表主键值的列在学生成绩表中就被成为学生表的外键,一句话主键和外键关联实现表之间的关系描述,实现对象之间的关联关系。
只有数据库才有主键和外键主键就是能够唯一确定数据表的字段外键是和其他表有联系的字段目前多使用虚拟外键(方便)
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁数据库表中的主键和外键_百度知道
数据库表中的主键和外键
想弄清楚主键和外键,看了很多都没怎么搞明白,比如我做一个项目,实现多表查询2个表中的数据,那么这2个表是不是就必须有主键和外键。他们是怎么关联的呢?在一个表里设置主键,另一个表设置外键,就可以说他们关联了么?搞不懂额,能不能给我举几个例子,从创建2个或者3个表开始(就是自己CREATE TABLE 表都举例出来),然后查询他们,在说说他们的关系,简单一点,不要书本文字那样我有点蒙,我一定要搞懂这个,要不愁死我了。请师兄们帮帮忙。很急。
提问者采纳
主外键的存在是依托两个实体之间的关系而存在的;比如班级与学生的关系:一个班级可以有多个学生,并且一个学生只能属于一个班级,这就是一对多的关系;那么设计数据库的时候就应该在学生表内存放班级的ID作为外键,为什么不在班级表内放学生呢?因为,你想一想班级表内如果放学生那么记录可能就是这样:1班ID 1班 xx同学id1班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,'一班')后才能执行插入前面一条往学生表插入信息的语句..--------------可了解一些了?真累啊.
其他类似问题
3人觉得有用
按默认排序
其他4条回答
一般每个表建议都有主键,比如表A和表B,A的列式(aid,aa,bb,cc),其中aid就是主键,然后B是(bid,xx,yy,ab)bid为主键,ab是外键对应A表的aid然后你要是,然后你要查询A表中的,aa,bb及B表中的XX,YY,且要是的B中XX,YY所在列的AB要等于A表中的aid,然后即可以这样写select ..... from A a,B
b where b.ab=a.aid外键差不多就是这样的,设置好B中的外键后,此ab的值只能是A中aid范围内的值,不能搞一个aid中都没有的值
它们都是关系数据库表设计的约束方式而已,为了保证数据库中不会出现脏数据的限制方法。主键是数据库表的唯一索引序列,可以由多个字段组成,但每条数据的这几个字段的组合必须唯一;主键约束仅涉及本表数据;外键是本表中该外键字段的取值要求是已经在目标表中存在的数据;假如说,表B有字段b_1是表A中字段a_1的外键,那么插入表B数据的时候,字段b_1的取值要求在表A的字段a_1的当前所有数据的值的范围内。外键是以外表数据约束本表数据的约束条件。此外,外键还有个要求,就是a_1必须是表A的主键。并且必须说得是,外键是一个很烦人的数据库约束。
我给你解释吧!拿你做例子喽^-9,你们一家人在一个表中,你姥姥一家在一个表中,表中有共同的一个人,你妈妈,因为这是你的数据库,所以以你家为主,你妈妈在你家是 你爷爷的儿媳妇,地位是“儿媳妇”,到了你姥姥那边,你妈妈是 女儿,地位是“女儿”,不管到哪边,她们是一个人,是不变的,这样两家就关联起来了。关于表是不是非有主键和外键,不一定哦,其实可以将有主外键关系的表合并,是吧?为什么要分开呢?主要是考虑到当数据量大的时候查询效率的问题,这个就有点难了
楼上的guoweifyj先生,我很看好你!!你讲的非常透彻!@
其他类似问题
3人觉得有用
外键的相关知识
您可能关注的推广
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁

我要回帖

更多关于 主键 的文章

 

随机推荐