MySQL中key 、primary key 、unique key 与index区别详解

简介这篇文章主要介绍MySQL中key、primarykey、uniquekey与index的区别。一、key与primarykey区别CREATETABLEwh_logrecord(logrecord_idint(11)NOTNULLauto_increment,user_namevarchar(100)defaultNULL,operation_timedatetimedefaultNULL,lo

  

这篇文章主要介绍MySQL中key 、primary key 、unique key 与index的区别。

MySQL中key 、primary key 、unique key 与index区别详解

一、key与primary key区别

CREATETABLEwh_logrecord(logrecord_idint(11)NOTNULLauto_increment,user_namevarchar(100)defaultNULL,operation_timedatetimedefaultNULL,logrecord_operationvarchar(100)defaultNULL,PRIMARYKEY(logrecord_id),KEYwh_logrecord_user_name(user_name))

解析:

KEYwh_logrecord_user_name(user_name)

本表的user_name字段与wh_logrecord_user_name表user_name字段建立外键

括号外是建立外键的对应表,括号内是对应字段

类似还有 KEY user(userid)

当然,key未必都是外键

总结:

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

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

如建表时: KEY forum (status,type,displayorder)

select * from table group by status,type,displayorder 是否就自动用上了此索引,

而当 select * from table group by status 此索引有用吗?

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,无需重复再在上面建立索引了。

搜索到的一段解释:

Notethat“primary”iscalledPRIMARYKEYnotINDEX.KEYissomethingonthelogicallevel,describesyourtableanddata design(i.e.enforcesreferentialintegrity…)INDEXissomethingonthephysicallevel,helpsimproveaccesstimefortableoperations.BehindeveryPKthereis(usually)uniqueindexcreated(automatically).


三、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值时,可以有重复的,而其他的则不能插入重复值。

altertabletaddconstraintuk_t_1unique(a,b);insertintot(a,b)values(null,1);#不能重复insertintot(a,b)values(null,null);#可以重复

四、使用UNIQUE KEY

CREATETABLE`secure_vulnerability_warning`(`id`int(10)NOTNULLauto_increment,`date`dateNOTNULL,`type`varchar(100)NOTNULL,`sub_type`varchar(100)NOTNULL,`domain_name`varchar(128)NOTNULL,`url`textNOTNULL,`parameters`textNOTNULL,`hash`varchar(100)NOTNULL,`deal`int(1)NOTNULL,`deal_date`datedefaultNULL,`remark`text,`last_push_time`datetimedefaultNULL,`push_times`int(11)default'1',`first_set_ok_time`datetimedefaultNULL,`last_set_ok_time`datetimedefaultNULL,PRIMARYKEY(`id`),UNIQUEKEY`date`(`date`,`hash`))ENGINE=InnoDBDEFAULTCHARSET=utf8

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

1、创建表时

CREATETABLEPersons(Id_PintNOTNULL,LastNamevarchar(255)NOTNULL,FirstNamevarchar(255),Addressvarchar(255),Cityvarchar(255),UNIQUE(Id_P))

如果需要命名 UNIQUE 约束,以及为多个列定义 UNIQUE 约束,请使用下面的 SQL 语法:

CREATETABLEPersons(Id_PintNOTNULL,LastNamevarchar(255)NOTNULL,FirstNamevarchar(255),Addressvarchar(255),Cityvarchar(255),CONSTRAINTuc_PersonIDUNIQUE(Id_P,LastName))

2、当表已被创建时,如需在 "Id_P" 列创建 UNIQUE 约束,请使用下列 SQL:

ALTERTABLEPersonsADDUNIQUE(Id_P)

如需命名 UNIQUE 约束,并定义多个列的 UNIQUE 约束,请使用下面的 SQL 语法:

ALTERTABLEPersonsADDCONSTRAINTuc_PersonIDUNIQUE(Id_P,LastName)

3、撤销 UNIQUE 约束

如需撤销 UNIQUE 约束,请使用下面的 SQL:

ALTERTABLEPersonsDROPINDEXuc_PersonID

以上就是mysql中key 、primary key 、unique key 与index区别详解的详细内容。

下载链接:网站源码/小程序源码/网站模板下载

版权声明

   站内部分内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供网络资源分享服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请 联系我们 一经核实,立即删除。并对发布账号进行永久封禁处理。在为用户提供最好的产品同时,保证优秀的服务质量。


本站仅提供信息存储空间,不拥有所有权,不承担相关法律责任。

给TA打赏
共{{data.count}}人
人已打赏
网站技巧

快速理解 JavaScript 的垃圾回收

2024-9-19 19:43:45

网站技巧

inner join用法是什么

2024-9-19 19:43:47

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索