天堂1111 发表于 2018-10-2 14:10:19

MySQL索引概述

  MySQL索引概述
  索引的优点:
  1.通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。
  2.可以加快数据的检索速度。
  索引缺点:
  1.当对表中的数据进行增加、删除和修改的时候,索引也要动态的维护,降低了数据的维护速度。
  2.索引需要占据物理空间。
  索引的类型:
  1.INDEX:普通索引
  2.PRIMARY KEY:主键
  3.UNIQUE:唯一索引
  4.FOREIGN KEY:外键
  5.FULLTEXT:群文索引
  1.INDEX:普通索引
  1.1一个表中可以有多个INDEX字段。
  1.2字段的值允许有重复,且可以赋NULL值。
  1.3经常把做查询条件的字段设置为INDEX字段。
  1.4INDEX字段的KEY标志是MUL。
  insert into库名.表名values(值列表);#插入表记录
  select   *   from库名.表名;查看表的所有记录
  

例:建表的时候指定索引字段  
-INDEX(字段1),INDEX(字段2)...
  
mysql>create database ku;
  
mysql>create table ku.abc(
  
>id    int(2) not null,
  
>namevarchar(4)not null,
  
>age   int(3)not null,
  
>index(name),index(age)
  
>);
  

  
mysql>desc ku.abc;
  
FieldTypeNullKey   Default   Extra
  
..   ..   ..      MUL    ..   ..
  

  
mysql>insert into ku.abc values(1,"wang",23);
  
mysql>select * from ku.abc;
  

  在已有创建的表中设置INDEX字段
  格式:create index索引名 on 库名.表名(字段);
  删除指定表的索引字段
  格式:drop index 索引名on库名.表名;
  

例:  
mysql>create indexxixi on ku.abc(id);
  
mysql>dropindexxixi on ku.abc;
  

  查看表的索引信息
  格式:showindex from 库名.表名;
  

例:  
mysql>show index from ku.abc\G;
  
......
  
Index_type: BTREE(默认使用B树算法)
  
......
  

  默认使用的索引类型:BTREE(二叉树)   hash    B+Tree
  2.PRIMARY KEY:主键
  2.1一个表中只能有一个primary key字段
  2.2对应字段的值不允许有重复,且不允许赋NULL值。
  2.3如果有多个字段都作为primary key,称为复合主键,必须一起创建。
  2.4主键字段的KEY标志是PRI。
  2.5通常与AUTO_INCREMENT连用。
  2.6经常把表中能够唯一标示记录的字段设置为主键字段。(如记录编号字段)
  注释:
  主键与auto_increment 连用
  字段值自动增长   +1
  主键 并且 数值类型
  

例:建表的时候指定主键字段  
-PRIMARY KEY(字段名)
  
mysql>create table ku.abc2(
  
>idint(3)auto increment,
  
>namevarchar(5)not null,
  
>age   int(2)not null,
  
>primary key(id)
  
>);
  

  
mysql>desc ku.abc2;
  FieldTypeNullKeyDefault    Extra
  
..    ..    ..   PRI   ..      ..
  

  
mysql>insert into ku.abc2 values(2,"wang",23);
  
mysql>select * from ku.abc2;
  

  在已创建的表中设置PRIMARY KEY字段
  格式:alter table 库名.表名 ADD PRIMARY KEY(字段名);
  删除指定表的PRIMARY KEY字段
  格式:alter table 库名.表名 DROPPRIMARY KRY;
  注意:如果有自增属性(AUTO_INCREMENT),必须先删除。
  

例:  
mysql>alter tabel ku.abc2drop primary key;
  
mysql>alter table ku.abc2 add primary key(id);
  

  3.UNIQUE:唯一索引
  3.1一个表中可以有多个UNIQUE字段。
  3.2对应字段的值不允许有重复。
  3.3UNIQUE字段的KEY标志是UNI。
  3.4UNIQUE字段的值允许为NULL,当将其修改为不允许为NULL时,则此字段限制于主键相同,KEY会变为PRI。
  

例:建表的时候指定UNIQUE字段  
-UNIQUE(字段1),UNIQUE(字段2)...
  
mysql>create table ku.abc3(
  
>id char(6),
  
>namevarchar(4)not null,
  
>age int(3)not null,
  
>unique(id),unique(name),unique(age)
  
>);
  

  
mysql>desc ku.abc3;
  
Field   Type    Null      Key    Default   Extra
  
..   ..    YES    UNI   ..      ..
  

  
mysql>insert into ku.abc3 values(3,"wang",23);
  
mysql>insert into ku.abc values(4,"lisi",23);
  
mysql>select * from ku.abc3;
  

  在已创建的表中设置UNIQUE字段
  格式:create unique index unique字段名 on库名.表名(字段名);
  删除指定表的UNIQUE字段
  格式:drop indexunique字段名 on库名.表名(字段名);
  

例:  
mysql>dropindex name onku.abc3; #于删除INDEX索引的方法相同。
  
mysql>create uniqueindex name on ku.abc3(age);
  

  4.FOREIGN KEY:外键
  4.1让当前表字段的值在另一个表字段的值中的范围内选择。
  外键的使用条件:
  1.表的存储引擎必须是innodb。
  2.两表的字段类型要一致。
  3.被参照字段必须要是主键类型(PRIMARY KEY)。
  基本用法:
  格式:foreign key(表A的字段名)references 表B(字段名)
  on updatecascade    ondelete cascade   #参照表为B,即从B表字段的值中的范围内选择。
  

例:  
提示:被参照字段必须要是主键类型(PRIMARY KEY)。
  
mysql>create tableku.abc4(
  
>idint(4),
  
>name char(5),
  
>foreign key(name),
  
>referencesabc3(name),
  
>on updatecascade
  
>ondelete cascade
  
>engine=innodb
  
>);
  

  删除外键字段
  格式:alter table 表名 drop foreign key 约束名;
  

例:  
mysql>show create tableku.abc4\G;
  
...
  
CONSTRAINT `xxx`    #`xxx`里面是约束名
  
.....
  

  
mysql>alter table ku.abc4 drop foreigen key xxx ;


页: [1]
查看完整版本: MySQL索引概述