mysql unique和key_MYSQL的primary key和unique key的区别
【网络转载】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的区别相关推荐
- mysql数据库中key 、primary key 、unique key 与index区别
所有的MySQL索引(PRIMARY.UNIQUE和INDEX)在B树中存储.字符串是自动地压缩前缀和结尾空间. 下面是建表的语句: CREATE TABLE `phpcolor_ad` ( `id` ...
- MySQL中KEY、PRIMARY KEY、UNIQUE KEY、INDEX 的区别
文章目录 一.背景知识 二.MySQL 中 KEY 与 INDEX 区别 三.key的总结和分类 四.INDEX索引介绍 五.PRIMARY KEY 和 UNIQUE KEY 的区别 六.操作索引 一 ...
- Mysql中key 、primary key 、unique key 与index区别
https://www.cnblogs.com/zjfjava/p/6922494.html 索引被用来快速找出在一个列上用一特定值的行.没有索引,MySQL不得不首先以第一条记录开始并然后读完整个表 ...
- key mysql_mysql中key 、primary key 、unique key 与index区别
mysql中索引是非常重要的知识点,相比其他的知识点,索引更难掌握,并且mysql中的索引种类也有很多,比如primary key .unique key 与index等等,本文章向大家介绍mysql ...
- MYSQL的索引类型:PRIMARY, INDEX,UNIQUE,FULLTEXT,SPAIAL 有什么区别?各适用于什么场合?...
一.介绍一下索引的类型 Mysql常见索引有:主键索引.唯一索引.普通索引.全文索引.组合索引 PRIMARY KEY(主键索引) ALTER TABLE `table_name` ADD PRIMA ...
- MYSQL的索引类型:PRIMARY, INDEX,UNIQUE,FULLTEXT,SPAIAL 有什么区别?各适用于什么场合?
一.MySQL索引类型 MySql常见索引类型有:主键索引.唯一索引.普通索引.全文索引.组合索引 PRIMARY KEY(主键索引) ALTER TABLE `table_name` ADD PR ...
- mysql 创建索引 key_Mysql中创建索引的INDEX和KEY
一.问题 被问到,mysql为什么用key创建索引,而不是index.这个被难住了. 二.查一下 关于key和index只有三个页面,primary key,foreign key和create in ...
- key 、primary key 、unique key 与index区别
一.key与primary key区别 CREATE TABLE wh_logrecord ( logrecord_id int(11) NOT NULL auto_increment, use ...
- mysql中的key和UNIQUE关键字
#mysql中的key和UNIQUE关键字# CREATE TABLE testTable( id INT KEY, #使用key关键字 email VARCHAR(50) UNIQUE, #使用UN ...
最新文章
- 刻意练习:Python基础 -- Task08. 异常处理
- 2018-2019-2 网络对抗技术 20165230 Exp9 :Web安全基础
- 分享实录|争议不断地EOS,我们如何才能理性看待?
- SpringCloud Config 分布式配置
- css 浏览器调试中不可见_前端入门必会的初级调试技巧
- android动画笔记二
- 计算机专业论文范文精选,计算机毕业论文提纲范文精选
- KDB支持单步调试功能(ARM架构)
- css-动画-transition-过渡动画
- How do I UPDATE from a SELECT in SQL Server?
- js正则匹配闭合标签_我从Vue源码中学到的一些JS编程技巧
- 安装redis3.2.4集群时出现的一些坑
- 基本数据结构之Sort
- WinDbg常用命令For Kernel Debug
- 项目汇报模板—再也不怕撕逼了
- 深度学习入门_对ORL数据集进行特征提取降维后SVM分类
- C++实现化学方程式配平
- 关于物联网模组fota远程升级的说明
- Pandas 实用技能,数据筛选 query 函数详细介绍
- 论文笔记目录(ver2.0)
热门文章
- 各种当下编程风格一览,看一看你属于哪一种?
- Windows中的进程和线程
- mysql通过订单量排序_mysql-关于PHP中订单按照从大到小的顺序排序的思路.
- 另存为里面没有jpg_CAD图不会转JPG?教你两个方法,从此CAD格式转换不再烦恼
- 推荐:万能模板,十分钟打造电商首焦Banner
- UI设计素材干货模板|手机app夜间模式相关素材
- UI素材干货模板|线框图wireframe线框图iOS设计稿
- C++设计模式解析之单例模式解析
- 直接插入排序(C语言)实现
- DELL戴尔服务器RAID磁盘阵列默认识别更换后的硬盘