开发者

mysql之key和index的区别及创建删除索引方式

目录
  • 区别分析
    • 1.key 是数据库的物理结构
    • 2.index是数据库的物理结构
  • 创建索引
    • 1.ALTER TABLE
    • 2.CREATE INDEX
    • 3.索引类型
  • 总结

    区别分析

    1.key 是数据库的android物理结构

    它包含两层意义:

    • 一是约束(偏重于约束和规范数据库的结构完整性)
    • 二是索引(辅助查询用的)。包括primary key, unique key, foreign key 等

    primary key 有两个作用,一是约束作用(constraint),用来规范一个存储主键和唯一性,但同时也在此key上建立了一个index;

    unique key 有两个作用,一是约束作用(constraint),规范数据的唯一性,但同时也在这个key上建立了一个index;

    foreign key 有两个作用,一是约束作用(constraint),规范数据的引用完整性,但同时也在这个key上建立了一个index;

    可见,mysql的key是同时具有constraint和index的意义,这点和其他数据库表现的可能有区别。(至少在oracle上建立外键,不会自动建立index),因此创建key也有如下几种方式:

    (1)在字段级以key方式建立, 如

    create table t (id int not null primary key);

    (2)在表级以constraint方式建立,如

    create table t(id int, CONSTRAINT pk_t_id PRIMARY key (id));

    (3)在表级以key方式建立,如

    create table t(id int, primary key (id));

    其它key创建类似,但不管那种方式,既建立了constraint,又建立了index,只不过index使用的就是这个constraint或key。

    2.index是数据库的物理结构

    它只是辅助查询的,它创建时会在另外的表空间(mysql中的innodb表空间)以一个类似目录的结构存储。

    索引要分类的话,分为前缀索引、全文本索引等;

    因此,索引只是索引,它不会去约束索引的字段的行为(那是key要做的事情)。

    如:

    create table t(id int, index inx_tx_id  (id));

    总结:

    1、我们说索引分类,分为主键索引、唯一索引、普通索引(这才是纯粹的index)等,也是基于是不是把index看作了key。比如:

    create table t(id int, unique index inx_tx_id  (id));  --index当作了key使用

    2、最重要的也就是,不管如何描述,理解index是纯粹的index,还是被当作key,当作key时则会有两种意义或起两种作用。

    创建索引

    在执行CREATE TABLE语句时可以创建索引,也可以单独用CREATE INDEX或ALTER TABLE来为表增加索引。

    1.ALTER TABLE

    ALTER TABLE用来创建普通索引、UNIQUE索引或PRIMARY KEY索引。

    ALTER TABLE table_name ADD INDEX index_name (column_list)
    
    ALTER TABLE table_name ADD UNIQUE (column_list)
    
    ALTER TABLE table_name ADD PRIMARY KEY (column_list)
    

    其中table_name是要增加索引的表名,column_list指出对哪些列进行索引,多列时各列之间用逗号分隔。

    索引名index_name可选,缺省时,MySQL将根据第一个索引列赋一个名称。

    另外,ALTER TABLE允许在单个语句中更改多个表,因此可以在同时创建多个索引。

    2.CREATE INDEX

    CREATE INDEX可对表增加普通索引或UNIQUE索引。
    
    CREATE INDEX index_name ON table_name (column_list)
    
    CREATE UNIQUE INDEX index_name ON table_name (column_list)
    

    table_name、index_name和column_list具有与ALTER TABLE语句中相同的含义,索引名不可选。

    php

    另外,不能用CREATE INDEX语句创建PRIMARY KEY索引。

    3.索引类型

    在创建索引时,可以规定索引能否包含重复值。如果不包含,则索引应该创建为PRIMARY KEY或UNIQUE索引。对于单列惟一性索引,这保证单列不包含重复的值。对于多列惟一性索引,保证多个值的组合不重复。

    PRIMARY KEY索引和UNIQUE索引非常类似。事实上,PRIMARY KEY索引仅是一个具有名称PRIMARY的UNIQUE索引。这表示一个表只能包含一个PRIMARY KEY,因为一个表中不可能具有两个同名的索引。

    下面的SQL语句对students表在sid上添加PRIMARY KEY索引。

    ALTER TABLE students ADD PRIMARY KEY (sid)

    13.4.3 删除索引

    可利用ALTER TABLE或DROP INDEX语句来删除索引。类似于CREATE INDEX语句,DROP INDEX可以在ALTER TABLE内部作为一条语句处理,语法如下。

    DROP INDEX index_name ON talbe_name
    
    ALTER TABLE table_name DROP INDEX index_name
    
    ALTER TABLE table_name DROP PRIMARY KEY
    

    其中,前两条语句是等价的,删除掉table_name中的索引index_name。

    第3条语句只在删除PRIMARY KEY索引时使用,因为一个表只可能有一个PRIMARY KEY索引,因此不需要指定索引名。如果没有创建PRIMARY KEY索引,msSZKPbkP但表具有一个或多个UNIQUE索引,则MySQL将删除第一个UNIQUE索引。

    如果从表中删除了某列,则索引会受到影响。对于多列组合的索引,如果删除其中的某列,则该列也会从索引中删除。如果删除组成索引的所有列,则整个索引将被删除。

    总结

    以上为个人经验,希http://www.devze.com望能给大家一个参考,也希望大家多js多支持编程客栈(www.devze.com)。

    0

    上一篇:

    下一篇:

    精彩评论

    暂无评论...
    验证码 换一张
    取 消

    最新数据库

    数据库排行榜