怎么把复合主键改为单一主键
比方
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,如何办呢,学生的名字、年龄、班级都大概反复,没法使用单个字段来独一标识,这时,我们可以将多个字段设定为主键,构成复合主键,这多个字段结合标识独一性,其中,某几个主键字段值显现反复是没有问题的,只要不是有多笔记录的所有主键值完全一样,就不算反复。
如何把复合主键改为简单主键
一个表只能有一个主键:
基于一列的主键:
alter table test add constraint PK_TEST primary key(ename);
基于多列的结合主键:
alter table test add constraint PK_TEST primary key(ename,birthday);
以上就是如何把复合主键改为简单主键的具体内容,更多请关注百分百源码网其它相关文章!