从索引的角度考虑:
我知道主键也是唯一索引,只是它强制非空了。那么主键与非空唯一索引(对唯一索引的列设置非空)有什么区别?假设某字段,将其设置为非空和唯一索引,与将其设置为主键有何区别?create table t1(id1 int not null,id2 int,id3 int not null,unique key(id2),unique key(id3));
desc t1;
#id3自动成为主键。这说明非空唯一索引与主键本质上是相同的吗?
那么,又为什么为自动成为主键?

解决方案 »

  1.   

    1、MyISAM引擎有聚集索引的概念?看一些材料上说,只在InnorDB引擎中有?2、主键不允许空值,那唯一索引相关的列设置not null,不就一个意思了吗?3、说到底,就想问明白,只考虑对查询效率的影响的话,是否存在主键比唯一索引更好这么个说法,我指在使用MyISAM引擎中?
      

  2.   

    补充:1、MyISAM引擎有聚集索引的概念?看一些材料上说,只在InnorDB引擎中有?2、主键不允许空值,那唯一索引相关的列设置not null,不就一个意思了吗?3、说到底,就想问明白,只考虑对查询效率的影响的话,是否存在设置某个列为主键比设置为唯一索引更好这么个说法,我指在使用MyISAM引擎中?
      

  3.   

    在数据库理论中,主键是唯一的了,一个表只能设置一个主键。主键中的值必须是唯一并且非空。而唯一键在一张表中可以有多个,并且允许为空。允许多个空值,因为在数据库中NULL <>  NULL
    这个MYSQL的特色,因为从理论上和数据库设计原理,要求所有的表都必须有主键。
      

  4.   

    1、MyISAM引擎有聚集索引的概念?看一些材料上说,只在InnorDB引擎中有?
    MYISAM中没有,只有INNODB中有。2、主键不允许空值,那唯一索引相关的列设置not null,不就一个意思了吗?
    是的。主键=UNIQUE KEY + NOT NULL, 但一个表中只能有一个主键,但可以有多个唯一索引3、说到底,就想问明白,只考虑对查询效率的影响的话,是否存在设置某个列为主键比设置为唯一索引更好这么个说法,我指在使用MyISAM引擎中?
    MYISAM中没有这个说法。但PK显然会比UK好一些,如果UK+NOT NULL,则效率上相同。