MySQL数据库表的创建

时间:2015-05-30 19:11:22

标签: mysql sql database

在MySQL数据库中,创建了一个表,如下所示:

CREATE TABLE IF NOT EXISTS `sub` (
`s_id` int(3) NOT NULL AUTO_INCREMENT COMMENT 'Standard id',
`std` int(10) NOT NULL COMMENT 'Standard',
`sub_nm` varchar(25) NOT NULL COMMENT 'Subject Name',
 PRIMARY KEY (`s_id`),
 KEY `sub_nm` (`sub_nm`),
 KEY `sub_nm_2` (`sub_nm`),
 KEY `sub_nm_3` (`sub_nm`)
 )    ENGINE=InnoDB  DEFAULT CHARSET=latin1 COMMENT='All Subjects with
     corresponding standerds.' AUTO_INCREMENT=21 ;

我的问题是,最后三个KEY值是什么意思?我的意思是:KEY sub_nmsub_nm),KEY sub_nm_2sub_nm)和KEY sub_nm_3sub_nm

3 个答案:

答案 0 :(得分:1)

  

KEY通常是INDEX的同义词。当在列定义中给出时,键属性PRIMARY KEY也可以被指定为KEY。这是为了与其他数据库系统兼容而实现的。

For more

答案 1 :(得分:1)

有了这条指令     KEY sub_nmsub_nm),     KEY sub_nm_2sub_nm),     KEY sub_nm_3sub_nm) 为sub_nm列创建3个索引,名为sun_nm,sub_nm_2和sub_nm_3

答案 2 :(得分:0)

以前的答案已经解决了KEYINDEX个关键字是同义词的问题。除此之外,还有几个例子。

在创建表格时使用INDEXKEY关键字创建索引

CREATE TABLE IF NOT EXISTS `sub` (
  `s_id` int(3) NOT NULL AUTO_INCREMENT COMMENT 'Standard id',
  `std` int(10) NOT NULL COMMENT 'Standard',
  `sub_nm` varchar(25) NOT NULL COMMENT 'Subject Name',
   PRIMARY KEY (`s_id`),
   INDEX `sub_nm` (`sub_nm`),
   INDEX `sub_nm_2` (`sub_nm`),
   INDEX `sub_nm_3` (`sub_nm`)
 );

在同一个字段上创建3个索引是不明智的。 sub_nm就足够了一个索引。

创建表格后创建索引

CREATE TABLE IF NOT EXISTS `sub` (
  `s_id` int(3) NOT NULL AUTO_INCREMENT COMMENT 'Standard id',
  `std` int(10) NOT NULL COMMENT 'Standard',
  `sub_nm` varchar(25) NOT NULL COMMENT 'Subject Name',
   PRIMARY KEY (`s_id`)
 );

 create index sub_nm on `sub`(sub_nm);
 -- create key sub_nm2 on `sub`(sub_nm); WILL ERROR OUT
 alter table `sub` add index sub_nm3 (sub_nm); 
 alter table `sub` add key sub_nm4 (sub_nm); 

请注意可以在表上创建索引的不同方法。我通常使用这样的索引名称:idx_tablename_fieldname(例如idx_sub_sub_nm)。

sub_nm上的索引可以提高在过滤,排序和分组中利用sub_nm的查询的性能。 EXPLAIN有助于识别数据库是否认为将使用索引。如果数据库不使用您非常强烈认为应该的查询,则可以在查询中提供index hints,如下所示:

select s_id from sub use index (idx_sub_sub_nm) where sub_nm = 'test';