简介这篇文章主要介绍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的区别。
一、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区别详解的详细内容。
下载链接:网站源码/小程序源码/网站模板下载