oracle和mysql的唯⼀约束_Oracle数据库添加主键和unique约
Oracle⼀直⽤了将近四年了,但是从没有做过数据库设计,所以到⽬前为⽌还是在和select,update 和delete,alter 打交道,当然创建表也是能操作的。但是对表的约束确实了解甚少。
除了知道主键是唯⼀性约束,并且创建主键就Oracle⾃动创建主键索引外,其余知之甚少。今天要建⼀张表,主键是sequence,但是还有其他⼏个重要的字段,templateid,decltype,customflow,要是不能重复的。所以隐约记起oracle中有unique这个关键字。所以⽂档学来看看。
⾸先,建表:
create table custtempdelc(
mysql删除重复的数据保留一条unid    number(18),
templateid  varchar2(50),
description  varchar2(300)
customdecltype varchar(50),
customflow varchar(50),
partyid  varcahar(10)
) using tablespace als_data2;
接着创建主键:
alter table custtempdelc add constraint primary key PK_CUSTTEMPDECL using tablespace als_index2;
下来就是创建 unique了;
alter table  custtempdelc add constraint  unique UK_CUSTTEMPDECL  using tablespace als_index2;
执⾏玩上⾯语句后,去查看已经创建好的表,在check中发现了两项,⼀个是PK的约束,还有⼀个是UK的约束,接着查看index,发现有两个index,⼀个是unid,还有⼀个则是创建unique的⼏个字段。
但是虽然学会创建unique,依然搞不清楚为什么要创建unique,他和pk有什么本质区别,为什么还要建⼀个uk字段组成的索引,在数据检索时,是优先使⽤那个索引呢?
带着这样的疑问⼜开始了百度和google。但是只得到以下答案,虽然不是我问的,但是也是我不知道的,所以记录在案以备忘。
PK 和 unique的区别:
1.PK字段必须是not null的,虽然在建表时没有将pk字段设置为not null,但是在创建PK后,oracle会⾃动给PK字段加上not null check。unique的字段可是null的。
2.⼀张表的PK只能有⼀个,但是unique却可以多个,以⽅便创建不同字段组合的唯⼀性约束。
3.对于给unique插⼊数据,如果是数值都不是null,那么数据是不可重复的,但是如果数据是null,那么可以插⼊重复的null数据,oracle 在处理⼀条记录全部是空值时,⾃动忽略,所以空值的unique数据是可以重复的。(待测试,unique字段为空,pk不重复的数据是否能够插⼊)。
创建玩主表之后,开始建⼦表:
create table custtempdelcdetail(
templateid  number(18),
sno            number(18),
nodemane  varchar(100),
value          varchar(400)
) using tablespace als_data2;
⼦表主键:
alter table custtempdelcdetail add constraint primary key PK_CUSTTEMPDECLDETAIL using tablespace als_index2;
因为是主从表关系,所以为⼦表创建外键,约束数据完整性,即从表有和主表关联的数据,主表的该条数据不能被删除。
alter table custtempdelcdetail add constraint foreign key FK_CUSTTEMPDECLDETAIL (templateid) refrences custtempdecl (unid);
这次使⽤之后对主键外键和unique有了⽐较清晰的认识,虽然还有问题要挖掘,但是它们不再只是个熟悉的名词了,也没有那么多敬畏⼼⾥,原来了解了也是和select delete差不多⽽已。嘿嘿,有点⾃⼤,但是也是信⼼的来源,不错不错,⾰命尚未成功,同志仍需努⼒。。。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。