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

时间:2022-09-16 08:42:49
CREATE TABLE pre_forum_post (  
pid int(10) unsigned NOT NULL COMMENT '帖子id',  
fid mediumint(8) unsigned NOT NULL default '0' COMMENT '论坛id',  
tid mediumint(8) unsigned NOT NULL default '0' COMMENT '主题id',  
`first` tinyint(1) NOT NULL default '0' COMMENT '是否是首贴',  
author varchar(15) NOT NULL default COMMENT '作者姓名',  
authorid mediumint(8) unsigned NOT NULL default '0' COMMENT '作者id',  
`subject` varchar(80) NOT NULL default COMMENT '标题',  
dateline int(10) unsigned NOT NULL default '0' COMMENT '发表时间',  
message mediumtext NOT NULL COMMENT '消息',  
useip varchar(15) NOT NULL default COMMENT '发帖者IP',  
invisible tinyint(1) NOT NULL default '0' COMMENT '是否通过审核',  
anonymous tinyint(1) NOT NULL default '0' COMMENT '是否匿名',  
usesig tinyint(1) NOT NULL default '0' COMMENT '是否启用签名',  
htmlon tinyint(1) NOT NULL default '0' COMMENT '是否允许HTML',  
bbcodeoff tinyint(1) NOT NULL default '0' COMMENT '是否关闭BBCODE',  
smileyoff tinyint(1) NOT NULL default '0' COMMENT '是否关闭表情',  
parseurloff tinyint(1) NOT NULL default '0' COMMENT '是否允许粘贴URL',  
attachment tinyint(1) NOT NULL default '0' COMMENT '附件',  
rate smallint(6) NOT NULL default '0' COMMENT '评分分数',  
ratetimes tinyint(3) unsigned NOT NULL default '0' COMMENT '评分次数',  
`status` int(10) NOT NULL default '0' COMMENT '帖子状态',  
tags varchar(255) NOT NULL default '0' COMMENT '新增字段,用于存放tag',  
`comment` tinyint(1) NOT NULL default '0' COMMENT '是否存在点评',  
replycredit int(10) NOT NULL default '0' COMMENT '回帖获得积分记录',  
`position` int(8) unsigned NOT NULL auto_increment COMMENT '帖子位置信息',  
PRIMARY KEY (tid, `position`),//就是这里  
KEY fid (fid),  
KEY authorid (authorid,invisible),  
KEY dateline (dateline),  
KEY invisible (invisible),  
KEY displayorder (tid,invisible,dateline),  
KEY `first` (tid,`first`),  
UNIQUE KEY pid (pid)  
) ENGINE=MyISAM COMMENT='帖子表';  
unique Key是唯一键,而Primary key是主键
Primary key 与Unique Key都是唯一性约束。但二者有很大的区别:
1、Primary key的1个或多个列 必须为NOT NULL,如果列为NULL,在增加PRIMARY KEY时,列自动更改为NOT NULL。而UNIQUE KEY 对列没有此要求。
2、一个表只能有一个PRIMARY KEY,但可以有多个UNIQUE KEY。

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

http://www.jb51.net/article/93981.htm

http://zccst.iteye.com/blog/1697043

总结: 
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的用途:主要是用来加快查询速度的。