【网络转载】http://blog.csdn.net/yaoxy/archive/2009/07/16/4353115.aspx

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 unique和key_MYSQL的primary key和unique key的区别相关推荐

  1. mysql数据库中key 、primary key 、unique key 与index区别

    所有的MySQL索引(PRIMARY.UNIQUE和INDEX)在B树中存储.字符串是自动地压缩前缀和结尾空间. 下面是建表的语句: CREATE TABLE `phpcolor_ad` ( `id` ...

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

    文章目录 一.背景知识 二.MySQL 中 KEY 与 INDEX 区别 三.key的总结和分类 四.INDEX索引介绍 五.PRIMARY KEY 和 UNIQUE KEY 的区别 六.操作索引 一 ...

  3. Mysql中key 、primary key 、unique key 与index区别

    https://www.cnblogs.com/zjfjava/p/6922494.html 索引被用来快速找出在一个列上用一特定值的行.没有索引,MySQL不得不首先以第一条记录开始并然后读完整个表 ...

  4. key mysql_mysql中key 、primary key 、unique key 与index区别

    mysql中索引是非常重要的知识点,相比其他的知识点,索引更难掌握,并且mysql中的索引种类也有很多,比如primary key .unique key 与index等等,本文章向大家介绍mysql ...

  5. MYSQL的索引类型:PRIMARY, INDEX,UNIQUE,FULLTEXT,SPAIAL 有什么区别?各适用于什么场合?...

    一.介绍一下索引的类型 Mysql常见索引有:主键索引.唯一索引.普通索引.全文索引.组合索引 PRIMARY KEY(主键索引) ALTER TABLE `table_name` ADD PRIMA ...

  6. MYSQL的索引类型:PRIMARY, INDEX,UNIQUE,FULLTEXT,SPAIAL 有什么区别?各适用于什么场合?

    一.MySQL索引类型 MySql常见索引类型有:主键索引.唯一索引.普通索引.全文索引.组合索引 PRIMARY KEY(主键索引)  ALTER TABLE `table_name` ADD PR ...

  7. mysql 创建索引 key_Mysql中创建索引的INDEX和KEY

    一.问题 被问到,mysql为什么用key创建索引,而不是index.这个被难住了. 二.查一下 关于key和index只有三个页面,primary key,foreign key和create in ...

  8. key 、primary key 、unique key 与index区别

    一.key与primary key区别  CREATE TABLE wh_logrecord (  logrecord_id int(11) NOT NULL auto_increment,  use ...

  9. mysql中的key和UNIQUE关键字

    #mysql中的key和UNIQUE关键字# CREATE TABLE testTable( id INT KEY, #使用key关键字 email VARCHAR(50) UNIQUE, #使用UN ...

最新文章

  1. 刻意练习:Python基础 -- Task08. 异常处理
  2. 2018-2019-2 网络对抗技术 20165230 Exp9 :Web安全基础
  3. 分享实录|争议不断地EOS,我们如何才能理性看待?
  4. SpringCloud Config 分布式配置
  5. css 浏览器调试中不可见_前端入门必会的初级调试技巧
  6. android动画笔记二
  7. 计算机专业论文范文精选,计算机毕业论文提纲范文精选
  8. KDB支持单步调试功能(ARM架构)
  9. css-动画-transition-过渡动画
  10. How do I UPDATE from a SELECT in SQL Server?
  11. js正则匹配闭合标签_我从Vue源码中学到的一些JS编程技巧
  12. 安装redis3.2.4集群时出现的一些坑
  13. 基本数据结构之Sort
  14. WinDbg常用命令For Kernel Debug
  15. 项目汇报模板—再也不怕撕逼了
  16. 深度学习入门_对ORL数据集进行特征提取降维后SVM分类
  17. C++实现化学方程式配平
  18. 关于物联网模组fota远程升级的说明
  19. Pandas 实用技能,数据筛选 query 函数详细介绍
  20. 论文笔记目录(ver2.0)

热门文章

  1. 各种当下编程风格一览,看一看你属于哪一种?
  2. Windows中的进程和线程
  3. mysql通过订单量排序_mysql-关于PHP中订单按照从大到小的顺序排序的思路.
  4. 另存为里面没有jpg_CAD图不会转JPG?教你两个方法,从此CAD格式转换不再烦恼
  5. 推荐:万能模板,十分钟打造电商首焦Banner
  6. UI设计素材干货模板|手机app夜间模式相关素材
  7. UI素材干货模板|线框图wireframe线框图iOS设计稿
  8. C++设计模式解析之单例模式解析
  9. 直接插入排序(C语言)实现
  10. DELL戴尔服务器RAID磁盘阵列默认识别更换后的硬盘