`
lzk562209141
  • 浏览: 38759 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

Primary Key与Unique Key 区别

阅读更多
Primary key 与Unique Key都是唯一性约束。

区别:

1、Primary key的1个或多个列必须为NOT NULL,如果列为NULL,在增加PRIMARY KEY时,列自动更改为NOT NULL;而UNIQUE KEY 对列没有此要求。

2、一个表只能有一个PRIMARY KEY,但可以有多个UNIQUE KEY。

下面以测试说明:

SQL> create table t (a int,b int,c int,d int);

Table created.

SQL> desc t
Name                                      Null?    Type
----------------------------------------- -------- -----------

A                                                  NUMBER(38)
B                                                  NUMBER(38)
C                                                  NUMBER(38)
D                                                  NUMBER(38)

SQL> alter table t add constraint pk_t primary key (a,b);

Table altered.

SQL> desc t
Name                                      Null?    Type
----------------------------------------- -------- ----------------

A                                         NOT NULL NUMBER(38)
B                                         NOT NULL NUMBER(38)
C                                                  NUMBER(38)
D                                                  NUMBER(38)

可以看到A、B两个列都自动改为了NOT NULL

SQL> alter table t modify (a int null);
alter table t modify (a int null)
                      *
ERROR at line 1:
ORA-01451: column to be modified to NULL cannot be modified to NULL
可以看到,列A不允许改为NULL

SQL> alter table t drop constraint pk_t;

Table altered.

SQL> alter table t add constraint uk_t_1 unique (a,b);

Table altered.

SQL> desc t
Name                                      Null?    Type
----------------------------------------- -------- -----------

A                                                  NUMBER(38)
B                                                  NUMBER(38)
C                                                  NUMBER(38)
D                                                  NUMBER(38)

我们看到列A又变回了NULL。

注意到,在删除主键时,列的NULLABLE会回到原来的状态。如果在创建主键后,对原来为NULL的主键列,显式设为NOT NULL,在删除主键后仍然是NOT NULL。比如在创建主键后,执行下面的操作,可以看到:

SQL> alter table t modify (b int not null);

Table altered.

SQL> alter table t drop constraint pk_t;

Table altered.

SQL> desc t
Name                                      Null?    Type
----------------------------------------- -------- ----------

A                                                  NUMBER(38)
B                                         NOT NULL NUMBER(38)
C                                                  NUMBER(38)
D                                                  NUMBER(38)

再做如下的实验:

SQL> drop table t;

Table dropped.

SQL> create table t (a int,b int,c int,d int);

Table created.

SQL> alter table t add constraint uk_t_1 unique (a,b);

Table altered.

SQL> alter table t add constraint uk_t_2 unique (c,d);

Table altered.

可以看到可以增加两个UNIQUE KEY。看看能不能增加两个主键:

SQL> alter table t add constraint pk_t primary key (c);

Table altered.

SQL> alter table t add constraint pk1_t primary key (d);
alter table t add constraint pk1_t primary key (d)
                                  *
ERROR at line 1:
ORA-02260: table can have only one primary key
由此可以看到一个表只能有一个主键。

SQL> alter table t drop constraint pk_t;

Table altered.

SQL> insert into t (a ,b ) values (null,null);

1 row created.

SQL> /

1 row created.

SQL> insert into t (a ,b ) values (null,1);

1 row created.

SQL> /
insert into t (a ,b ) values (null,1)
*
ERROR at line 1:
ORA-00001: unique constraint (SYS.UK_T_1) violated


SQL> insert into t (a ,b ) values (1,null);

1 row created.

SQL> /
insert into t (a ,b ) values (1,null)
*
ERROR at line 1:
ORA-00001: unique constraint (SYS.UK_T_1) violated

主键和唯一键约束是通过参考索引实施的,如果插入的值均为NULL,则根据索引的原理,全NULL值不被记录在索引上,所以插入全NULL值时,可以有重复的,而其他的则不能插入重复值。

分享到:
评论

相关推荐

    mysql中key 、primary key 、unique key 与index区别

    在MySQL数据库中,`key`、`primary key`、`unique key`和`index`都是与数据表结构和查询性能紧密相关的概念。了解它们的区别对于优化数据库操作至关重要。 1. **Key** - Key是一种索引约束,它限制了表中特定列的...

    MySQL中KEY、PRIMARY KEY、UNIQUE KEY、INDEX 的区别

    总的来说,理解 PRIMARY KEY、UNIQUE KEY 和 INDEX 的区别,以及如何适当地在数据库设计中使用它们,对于优化数据库性能和保证数据完整性至关重要。在创建索引时,应考虑查询模式、存储需求和性能平衡,确保数据库在...

    数据库技术与应用 Primary Key学习任务书.doc

    在《数据库技术与应用》的学习任务书中,主要探讨了Primary Key的含义、它与Unique Key的区别,以及如何使用SQL语言来设置主键约束。 1. **Primary Key的含义** 主键是表中的一个或一组字段,它们的值在整个表中都...

    数据库技术与应用 Primary Key语言习题与作业.doc

    2. PRIMARY KEY 与唯一约束的区别: - 唯一约束(Unique Constraint)也保证了字段值的唯一性,但一个表可以有多个唯一约束,而主键只有一个。 - 主键字段自动成为索引,有助于提高查询效率,而唯一约束字段默认不...

    数据库技术与应用 Primary Key名称解析与常见问题.doc

    - 唯一约束(Unique Constraint)与主键约束相似,都保证字段值的唯一性,但唯一约束允许字段为空值,而主键不允许。 - 多个唯一约束可以在同一表中定义,而每个表只能有一个主键约束。 - 当创建主键约束时,系统...

    SQL UNIQUE 约束

    UNIQUE 和 PRIMARY KEY 约束均为列或列集合提供了唯一性的保证。 PRIMARY KEY 约束拥有自动定义的 UNIQUE 约束。 请注意,每个表可以有多个 UNIQUE 约束,但是每个表只能有一个 PRIMARY KEY 约束。 CREATE TABLE 时...

    基于unique与primary约束的区别分析

    除了这些基本差异,`UNIQUE`和`PRIMARY KEY`在实际应用中还有一些其他区别: 1. **索引类型**:`PRIMARY KEY`约束会自动创建一个聚集索引(在某些数据库系统中),这意味着数据行的物理顺序与主键值的顺序一致,这...

    SQL Server2008创建约束图解

    与 Primary Key 约束类似,Unique 约束也强制唯一性,但 Unique 约束用于非主键的一列或者多列的组合,且一个表可以定义多个 Unique 约束。右键单击要设置的列选择索引 / 键,然后单击添加按钮,选择需要设置的列,...

    解析SQL语句中Replace INTO与INSERT INTO的不同之处

    如果插入的行与表中的任何现有行在 PRIMARY KEY 或 UNIQUE 索引上没有冲突,那么新行就会被成功插入。如果有冲突,即存在相同的 PRIMARY KEY 或 UNIQUE 索引值,`INSERT INTO` 语句将会失败,并抛出错误。 相比之下...

    MySQL使用UNIQUE实现数据不重复插入

    UNIQUE 和 PRIMARY KEY 约束均为列或列集合提供了唯一性的保证。 PRIMARY KEY 拥有自动定义的 UNIQUE 约束。 请注意,每个表可以有多个 UNIQUE 约束,但是每个表只能有一个 PRIMARY KEY 约束。 下面的 SQL 在 ...

    api文档查询

    Check,Unique,Primary key,not null,Foreign key)。 示例: create table stu( s_id number(8) PRIMARY KEY, s_name varchar2(20) not null, s_sex varchar2(8), clsid number(8), constraint u_1 unique(s_name), ...

    mysql unique key在查询中的使用与相关问题

    1、建表语句: CREATE TABLE `employees` ( `emp_no` int(11) NOT NULL, `birth_date` date NOT NULL, `first_name` varchar(14) NOT NULL, ... UNIQUE KEY `idxunique_first_name_gender` (`first_name`

    ORACLE数据库及SQL语言考试题一含答案.pdf

    createtablecourse (课程号varchar2(6)notnull, 课程名varchar2(50) not null, 先行课 varchar2(6) , 学分 number(3) not null , primarykey(课程号 ) ); createtablestudent_course (学号varchar2(10)notnull, ...

    2009达内SQL学习笔记

    set pause "please put an enter key" 且 set pause on:设置带有提示的分屏 oerr ora 904 :查看错误 set head off :去掉表头 set feed off :去掉表尾 保存在oracle数据库中的所有操作细节: spool ...

    SQLServer中防止并发插入重复数据的方法详解

    1. **使用Primary Key和Unique Key** 主键(Primary Key)是表中的一个或一组字段,其值必须唯一且不能为NULL,它用于标识表中每条记录的唯一身份。创建主键约束可以确保不会有任何两条记录具有相同的主键值。同样...

    SQL语言辅1(约束).ppt

    - 列约束如`S# Varchar2(10) Constraint PK_S Primary Key`,而表约束如`Constraint UQ_S Unique(Sname)`,两者在定义位置和作用范围上有所区别。 - 主键(PRIMARY KEY)约束确保了列的唯一性和非空性,如`...

    ORACLE、MySQL、SqlServer,三大数据库区别整理以及常用语句

    **与PRIMARY KEY的区别**: - 每个表可以有多个UNIQUE约束。 - 每个表只能有一个PRIMARY KEY约束。 - PRIMARY KEY约束也自动具有UNIQUE属性,但它还增加了自动索引和不允许NULL值的特点。 **创建UNIQUE约束的方法**...

Global site tag (gtag.js) - Google Analytics