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,
>name varchar(4) not null,
>age int(3) not null,
>index(name),index(age)
>);
mysql>desc ku.abc;
Field Type Null Key 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 index xixi on ku.abc(id);
mysql > drop index xixi on ku.abc;
查看表的索引信息
格式: show index 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(
>id int(3) auto increment,
>name varchar(5) not null,
>age int(2) not null,
>primary key(id)
>);
mysql>desc ku.abc2;
Field Type Null Key Default 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 库名. 表名 DROP PRIMARY KRY;
注意: 如果有自增属性 (AUTO_INCREMENT), 必须先删除.
例:
mysql > alter tabel ku.abc2 drop 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),
>name varchar(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 index unique 字段名 on 库名. 表名 (字段名);
例:
mysql>drop index name on ku.abc3; #于删除 INDEX 索引的方法相同.
mysql>create unique index name on ku.abc3(age);
4.FOREIGN KEY: 外键
4.1 让当前表字段的值在另一个表字段的值中的范围内选择.
外键的使用条件:
1. 表的存储引擎必须是 innodb.
2. 两表的字段类型要一致.
3. 被参照字段必须要是主键类型 (PRIMARY KEY).
基本用法:
格式: foreign key(表 A 的字段名) references 表 B(字段名)
on update cascade on delete cascade #参照表为 B, 即从 B 表字段的值中的范围内选择.
例:
提示: 被参照字段必须要是主键类型 (PRIMARY KEY).
mysql>create table ku.abc4(
>id int(4),
>name char(5),
>foreign key(name),
>references abc3(name),
>on update cascade
>on delete cascade
>engine=innodb
>);
删除外键字段
格式: alter table 表名 drop foreign key 约束名;
例:
mysql>show create table ku.abc4\G;
...
CONSTRAINT `xxx` #`xxx` 里面是约束名
.....
mysql>alter table ku.abc4 drop foreigen key xxx ;
来源: http://www.bubuko.com/infodetail-2477725.html