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

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

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

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

一、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,describesyourtableanddatabasedesign(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区别详解的详细内容。

产品猿社区致力收录更多优质的商业产品,给服务商以及软件采购客户提供更多优质的软件产品,帮助开发者变现来实现多方共赢;

日常运营的过程中我们难免会遇到各种版权纠纷等问题,如果您在社区内发现有您的产品未经您授权而被用户提供下载或使用,您可按照我们投诉流程处理,点我投诉

本文来自用户发布投稿,不代表产品猿立场 ;若对此文有疑问或内容有严重错误,可联系平台客服反馈;

部分产品是用户投稿,可能本文没有提供官方下下载地址或教程,若您看到的内容没有下载入口,您可以在我们产品园商城搜索看开发者是否有发布商品;若您是开发者,也诚邀您入驻商城平台发布的产品,地址:点我进入

如若转载,请注明出处:https://www.chanpinyuan.cn/38477.html;
(0)
上一篇 2023年3月5日 下午4:18
下一篇 2023年3月5日 下午4:18

相关推荐

发表回复

登录后才能评论
分享本页
返回顶部