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

如果只是key的话,就是普通索引

         mysql的key和index多少有点令人迷惑,单独的key和其它关键词结合的key(primary key)实际表示的意义是不同,这实际上考察对数据库体系结构的了解的。
1 :

key 是数据库的物理结构,它包含两层意义和作用,

一是约束(偏重于约束和规范数据库的结构完整性),

二是索引(辅助查询用的)。

包括primary key, unique key, foreign key 等。

primary key 有两个作用,一是约束作用(constraint),用来规范一个存储主键和唯一性,但同时也在此key上建立了一个主键索引;    

                          PRIMARY KEY 约束:唯一标识数据库表中的每条记录;

                                                                 主键必须包含唯一的值;

                                                                 主键列不能包含 NULL 值;

                                                                 每个表都应该有一个主键,并且每个表只能有一个主键。(PRIMARY KEY 拥有自动定义的 UNIQUE 约束)

unique key 也有两个作用,一是约束作用(constraint),规范数据的唯一性,但同时也在这个key上建立了一个唯一索引;

UNIQUE 约束:唯一标识数据库表中的每条记录。
                                                    UNIQUE 和 PRIMARY KEY 约束均为列或列集合提供了唯一性的保证。
                                                    (每个表可以有多个 UNIQUE 约束,但是每个表只能有一个 PRIMARY KEY 约束)

foreign key也有两个作用,一是约束作用(constraint),规范数据的引用完整性,但同时也在这个key上建立了一个index;

 

可见,mysql的key是同时具有constraint和index的意义,这点和其他数据库表现的可能有区别。

(至少在oracle上建立外键,不会自动建立index),因此创建key也有如下几种方式:
(1)在字段级以key方式建立, 如 create table t (id int not null primary key);
(2)在表级以constraint方式建立,如create table t(id int, CONSTRAINT pk_t_id PRIMARY key (id));
(3)在表级以key方式建立,如create table t(id int, primary key (id));

其它key创建类似,但不管那种方式,既建立了constraint,又建立了index,只不过index使用的就是这个constraint或key。

 


2: index是数据库的物理结构,它只是辅助查询的,它创建时会在另外的表空间(mysql中的innodb表空间)以一个类似目录的结构存储。索引要分类的话,分为前缀索引、全文本索引等;
        因此,索引只是索引,它不会去约束索引的字段的行为(那是key要做的事情)。如,create table t(id int,index inx_tx_id (id));


3 总结,最后的释疑:
(1)我们说索引分类,分为

主键索引(必须指定为“PRIMARY KEY”,没有PRIMARY Index)、

唯一索引(unique index,一般写成unique key)、

普通索引(index,只有这一种才是纯粹的index)等,也是基于是不是把index看作了key
           比如 create table t(id int, unique indexinx_tx_id (id));--index当作了key使用

(2)最重要的也就是,不管如何描述,需要理解index是纯粹的index(普通的key,或者普通索引index),还是被当作key(如:unique index、unique key和primary key),若当作key时则会有两种意义或起两种作用。

————————————————————————————————————————————————————————一、key与primary key区别 
解析: 
KEY wh_logrecord_user_name (user_name) 
本表的user_name字段与wh_logrecord_user_name表user_name字段建立外键 
括号外是建立外键的对应表,括号内是对应字段 
类似还有 KEY user(userid) 
当然,key未必都是外键 

总结: 
Key是索引约束,对表中字段进行约束索引的,都是通过primary foreign unique等创建的。常见有foreign key,外键关联用的。 

KEY forum (status,type,displayorder)  # 是多列索引(键) 
KEY tid (tid)                         # 是单列索引(键)。 

如建表时: KEY forum (status,type,displayorder) 
select * from table group by status,type,displayorder 是否就自动用上了此索引, 
而当 select * from table group by status 此索引有用吗? 

key的用途:主要是用来加快查询速度的。 


主键,两个列组合在一起,是唯一的,内建唯一性索引,并且不能为NULL
另外,两个Key定义,相当于分别对这两列建立索引。

 

 

innodb
primary key   主键聚集索引
key 普通索引

 

二、KEY与INDEX区别 
 

KEY通常是INDEX同义词。如果关键字属性PRIMARY KEY在列定义中已给定,则PRIMARY KEY也可以只指定为KEY。

这么做的目的是与其它数据库系统兼容。

PRIMARY KEY是一个唯一KEY,此时,所有的关键字列必须定义为NOT NULL。

如果这些列没有被明确地定义为NOT NULL,MySQL应隐含地定义这些列。一个表只有一个PRIMARY KEY。 



MySQL 中Index 与Key 的区别 
 

Key即键值,是关系模型理论中的一部份,比如有主键(Primary Key),外键(Foreign Key)等,用于数据完整性检否与唯一性约束等。

而Index则处于实现层面,比如可以对表的任意列建立索引,那么当建立索引的列处于SQL语句中的Where条件中时,就可以得到快速的数据定位,从而快速检索。

至于Unique Index,则只是属于Index中的一种而已,建立了Unique Index表示此列数据不可重复,猜想MySQL对Unique Index类型的索引可以做进一步特殊优化吧。 


于是乎,在设计表的时候,Key只是要处于模型层面的,而当需要进行查询优化,则对相关列建立索引即可。 

另外,在MySQL中,对于一个Primary Key的列,MySQL已经自动对其建立了Unique Index,无需重复再在上面建立索引了。 


三、mysql中UNIQUE KEY和PRIMARY KEY有什么区别 

1,Primary key的1个或多个列必须为NOT NULL,如果列为NULL,在增加PRIMARY KEY时,列自动更改为NOT NULL。

而UNIQUE KEY 对列没有此要求 

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

3,主键和唯一键约束是通过参考索引实施的,如果插入的值均为NULL,

则根据索引的原理,全NULL值不被记录在索引上,所以插入全NULL值时,可以有重复的,而其他的则不能插入重复值。 

alter table t add constraint uk_t_1 unique (a,b); 
insert into t (a ,b ) values (null,1);    # 不能重复 
insert into t (a ,b ) values (null,null);#可以重复 

四、使用UNIQUE KEY 
UNIQUE KEY的用途:主要是用来防止数据插入的时候重复的。 
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值