结合主键和复合主键的区别
所谓的复合主键 就是指你表的主键含有一个以上的字段组成,不使用无业务含义的自增id作为主键。
例如:
create table test ( name varchar(19), id number, value varchar(10), primary key (name,id) )
上面的name和id字段组合起来就是你test表的复合主键 ,它的显现是由于你的name字段大概会显现重名,所以要加上ID字段这样就可以包管你记载的独一性 ,一样状况下,主键的字段长度和字段数目要越少越好 。
这里就会有一个迷惑? 主键是独一的索引,那么为什么一个表可以创立多个主键呢?
其实“主键是独一的索引”这话有点歧义的。举个例子,我们在表中创立了一个ID字段,主动增长,并设为主键,这个是没有问题的,由于“主键是独一的索引”,ID主动增长包管了独一性,所以可以。
此时,我们再创立一个字段name,类型为varchar,也设定为主键,你会发明,在表的多行中你是可以填写雷同的name值的,这岂不是有违“主键是独一的索引”这句话么?
所以我才说“主键是独一的索引”是有歧义的。应当是“当表中只要一个主键时,它是独一的索引;当表中有多个主键时,称为复合主键,复合主键结合包管独一索引”。
为什么自增长ID已经可以作为独一标识的主键,为啥还需要复合主键呢。由于,并不是所有的表都要有ID这个字段,比方,我们建一个学生表,没有独一能标识学生的ID,如何办呢,学生的名字、年龄、班级都大概反复,没法使用单个字段来独一标识,这时,我们可以将多个字段设定为主键,构成复合主键,这多个字段结合标识独一性,其中,某几个主键字段值显现反复是没有问题的,只要不是有多笔记录的所有主键值完全一样,就不算反复。
二、结合主键
结合主键望文生义就是多个主键结合构成一个主键组合(主键原则上是独一的,别被独一值所困扰。)
结合主键的意义:用2个字段(或者多个字段,后面详细都是用2个字段组合)来肯定一笔记录,说明,这2个字段都不是独一的,2个字段可以离别反复,这么设定的好处,可以很直不雅的看到某个反复字段的记载条数。
一个简便的例子 :
主键A跟主键B组成结合主键
主键A跟主键B的数据可以完全雷同,结合就在于主键A跟主键B构成的结合主键是独一的。
下例主键A数据是1,主键B数据也是1,结合主键其实是11,这个11是独一值,绝对不充许再显现11这个独一值。(这就是多对多关系)
主键A数据 主键B数据
1 1
2 2
3 3
主键A与主键B的结合主键值最多也就是
11
12
13
21
22
23
31
32
33
总结: 以我来看复合主键就是含有一个以上的字段组成,如ID+name,ID+phone等,而结合主键要同时是两个表的主题组合起来的。这是和复合主键最大的不同!
相理解更多相关问题请拜访PHP中文网:mysql视频教程
以上就是结合主键和复合主键的不同的具体内容,更多请关注百分百源码网其它相关文章!