primarykey(primary key与UNIQUE有什么区别)
本文目录
primary key与UNIQUE有什么区别
primary key 与 unique 的区别 定义了 UNIQUE 约束的字段中不能包含重复值, 可以为一个或多个字段定义 UNIQUE 约 束。因此,UNIQUE 即可以在字段级也可以在表级定义, 在 UNIQUED 约束的字段上可 以包含空值。 ORACLE 自动会为具有 PRIMARY KEY 约束的字段(主码字段)建立一个唯一 索引和一个 NOT NULL 约束,定义 PRIMARY KEY 约束时可以为它的索引; UNIQUED 可空,可以在一个表里的一个或多个字段定义;PRIMARY KEY 不可空不可重 复,在一个表里可以定义联合主键; 简单的说,primary key = unique + not null unique 就是唯一, 当你需要限定你的某个表字段每个值都唯一,没有重复值时使用。 比如说, 如果你有一个 person 表,并且表中有个身份证的 column,那么你就可以指定该字段为 unique。 从技术的角度来看,Primary Key 和 Unique Key 有很多相似之处。但还是有以下 区别: 一、作为 Primary Key 的域/域组不能为 null,而 Unique Key 可以。 二、在一个表中只能有一个 Primary Key,而多个 Unique Key 可以同时存在。 更大的区别在逻辑设计上。Primary Key 一般在逻辑设计中用作记录标识,这也是设置 Primary Key 的本来用意,而 Unique Key 只是为了保证域/域组的唯一性。 oracle 的 constraint 中有两种约束,都是对列的唯一性限制――unique 与 primary key,但 其中是有区别的: 1、unique key 要求列唯一,但不包括 null 字段,也就是约束的列可以为空且仅要求列中的 值除 null 之外不重复即可; 2、 primary key 也要求列唯一, 同时又限制字段的值不能为 null, 相当于 Primary Key=unique + not null。 创建一个 primary key 和 unique key 都会相应的创建一个 unique index。 0primary key 的语法:alter table table name add constraint key name primary key( columns); unique key 的语法:alter table table name add constraint key name unique( columns); 一个表只能有一个主键,但是可以有好多个 UNIQUE,而且 UNIQUE 可以为 NULL 值,如 员工的电话号码一般就用 UNIQUE,因为电话号码肯定是唯一的,但是有的员工可能没有 电话。 主键肯定是唯一的,但唯一的不一定是主键; 不要总把 UNIQUE 索引和 UNIQUE 约束混为一谈 1、primary key = unique + not null 2、唯一约束和主键一样都是约束的范畴,而且都可以作为外键的参考,不同的是,一张表 只能有一个主键 3、主键和唯一约束的创建需要依靠索引,如果在创建主键或唯一约束的时候没有已经建好 的索引可以使用的话,Oracle 会自动建立一个唯一的索引。
Oracle primary key和unique key的区别与联系
primary key与unique key都是唯一性约束。但二者有很大的区别: 1.作为primary key的1个或多个列必须为NOT NULL, 如果建表时此列设为NULL,在增加PRIMARY KEY时,列自动更改为NOT NULL。 而unique key约束的列可以为null,这是primary key与unique key最大的区别。 2.一个表只能有一个primary key(单列或多列,多列主键叫联合主键),但可以有多个unique key。 实例1: create table t(c1 number(2),c2 date,c3 varchar2(5),c4 int); desc t; Name Type Nullable Default Comments ---- ----------- -------- ------- -------- C1 NUMBER(2) Y C2 DATE Y C3 VARCHAR2(5) Y C4 INTEGER Y // 实例2:添加primary key alter table t add constraint t_pk primary key(c1,c2); desc t; Name Type Nullable Default Comments ---- ----------- -------- ------- -------- C1 NUMBER(2) C2 DATE C3 VARCHAR2(5) Y C4 INTEGER Y 我们看到,将c1,c2列设为联合主键后,他们变为not null; 如果在建表时就指定了主键的话,主键列将会默认为not null。 // 如果我们在添加一个primary key,那么我们将会得到一个错误: alter table t add constraint t_pk_2 primary key(c3,c4) ORA-02260: table can have only one primary key // 实例3:添加unique key alter table t add constraint unique_key_t unique(c3,c4); 实例4:添加数据 insert into t(c1,c2,c3,c4) values(10,sysdate,’abc’,3); 1 row inserted // insert into t(c1,c2,c3,c4) values(11,sysdate,’abc’,3); ORA-00001: unique constraint (SCOTT.UNIQUE_KEY_T) violated 我们看到,添加的第二条数据违反了刚刚创建的唯一键约束; 将unique_key_t删除,添加就能成功了。 实例5:删除unique key alter table t drop constraint unique_key_t; insert into t(c1,c2,c3,c4) values(11,sysdate,’abc’,3); 1 row inserted // 实例6:删除primary key alter table t drop constraint t_pk; Table altered // desc t; Name Type Nullable Default Comments ---- ----------- -------- ------- -------- C1 NUMBER(2) Y C2 DATE Y C3 VARCHAR2(5) Y C4 INTEGER Y 删除主键约束后,c1,c2列由恢复了原来的默认值null。 // 3.其实primary key也是unique key,被primary key约束的列not null,并且不允许重复 实例7: truncate table t; Table truncated // alter table t add constraint t_pk primary key(c1,c2); Table altered // insert into t(c1,c2,c3,c4) values(1,to_date(’2011-01-01’,’yyyy-mm-dd’),’csdn’,10); 1 row inserted // insert into t(c3,c4) values(’china’,1); ORA-01400: cannot insert NULL into (“SCOTT“.“T“.“C1“) // insert into t(c1,c2,c3,c4) values(1,to_date(’2011-01-01’,’yyyy-mm-dd’),’csdn’,10); ORA-00001: unique constraint (SCOTT.T_PK) violated 这里,我们看到primary key t_pk变成了unique约束,证明了主键约束也是唯一约束。
更多文章:

abstract和interface的区别(interface 和 abstract 的区别)
2025年4月3日 22:00

java资源网站(谁有传智播客Java就业班资源,可以分享一下)
2025年3月31日 21:10

forehead ornament(春节习俗有哪些 带英语的)
2025年2月26日 19:20

flex教程(flex2中文云端怎么用/flex2中文云端源/flex2中文云端源使用图文教程)
2025年3月18日 17:00

fastreport4(c++builder6怎么安装fastreport 4)
2025年2月19日 07:40

在线教学的利弊(线上教育有什么弊端你是如何看待线上教育和线下教育)
2025年4月15日 13:30

frontpage是干嘛的(请问FrontPage是什么软件啊)
2025年4月10日 01:00