主键的作用主要是对一个表中的记录进行唯一标识,既然是唯一标识,自然就不能允许有重复了,这样根据主键可以识别任何一条记录,大部分情况下,主键一个字段就可以了,但在某些情况下,一个字段并不能对记录进行唯一标识,所以就需要通过多个字段的组合来进行唯一标识,比如订单明细表中,主键一般是【订单号】和【产品编号】这两个字段的组合。
一个表只能有一个主键的,是因为主键也叫做主索引,一个表中可以有多个索引,但用作主索引的只能有一个,有多个就不应该叫“主索引”了。
按照关系数据库理论来说,每个表都必须要有主键的,另外在ACCESS中以链接表的方式访问SQL SERVER数据库,如果表中没有主键,则数据会是只读的,不能编辑。
一个表中没有主键多半是下面的几种情况:
1、不是一个数据库系统,或者说不完全是一个数据库系统,这时表只用来存放数据,数据的有效性不是通过数据库引擎来检验的,而是通过程序代码来检验的
2、这是一个临时表,在临时表中为了使用方便,经常会不设临时表
3、这是一个特殊用途的表,比如保存某些设置,它其实都不能算是严格意义上的表了,而是相当于配置文件
……
如果表中没有适合设为主键的字段,这时一般建议创建一个自动编号字段来做为主键
先从第三个问题说起。主键对于数据表不是必须的,也就说数据表不设主键完全可以。撇开主键的问题,我们说部电影吧。看过成龙演的《我是谁》这部电影吧,还记得哪个忘记自己名字和身份的警察吧。我们假设一下,如果成龙扮演的这个警察身上还有一个证件的话,即使他不记得自己是谁,他身边出现的美女应该是可以知道他是谁的。也就是说警察证或者身份证或者护照或者什么本本上,总是会有一个编号,这个编号可以通过查询得到这个人的信息,并唯一的定义这个人是谁。
你会想这个电影和主键有什么关系呢?其实我们讨论这个电影的时候已经在讨论主键问题了。什么是主键呢?通俗的讲,主键就是用来唯一定义一条记录的那个东西。这就说明,主键的作用是用来唯一定义一条记录的,当然你不唯一定义这个记录,他依然存在。就像电影中的成龙同志,在失去身份的很长一段时间中依然存在一样。只是这种存在有了很多麻烦,带来很多冲突,也就构成了电影的崎岖的情节。
现在讨论第二个问题。主键用来唯一定义记录,因此必然数据不能重复。可是为什么要这样呢?这就要讲讲《西游记》了,还记得那个假悟空六耳猕猴吗?这斯能将大圣扮得维妙维肖,最后还是被如来说破。这就看出来,如果描述悟空不是唯一的,真假就说不清楚了。也许你想着让他(真悟空)保护唐僧取经,却可能让他(假悟空)吃了唐僧肉了。
在后两个问题讲解完了,第一个问题也就不成其为一个问题了。比如说用成龙这个名字是否能准确的定义一个人呢?答案是不能,因为重名的可能有很多,所以人名不具有唯一性。用人名加出生日期是否可以定义一个人呢?这个也可能不安全,因为还可能有姓名相同生日相同的人存在,只是这个概率很小了而已。那么我们多加几个字段,在你的数据库范围内能保证数据唯一,这时候就可以以这几个字段一起来作为主键唯一的定义这条记录了。不过通常这样干很累,于是人们多数情况下是单独设立一个字段作为主键。
关于武凡同志的问题已经不存在了。因为我们可以不管表中是否存在一组数据能成为主键,都可以另外加一个做为主键的字段。而且大部分情况下,人们都是这样干的。
两位老师讲的很透彻了,学习了……
索引就是通过它能够快速地找到她.相当于目录或地址一样.至于有重复索引和有无重复索引,也可能这样理解:有重复索引就是几个东东都可以通过这个索引就能找到.
学习了!!!
总记录:6篇 页次:1/1 9 1 :