原文地址: https://www.cnblogs.com/crazylqy/p/4361394.html
原文地址:https://www.cnblogs.com/interdrp/p/8031087.html
总体分析
PRIMARY, INDEX, UNIQUE 这3种是一类
PRIMARY 主键。 就是 唯一 且 不能为空。
INDEX 索引,普通的
UNIQUE 唯一索引。 不允许有重复。
FULLTEXT 是全文索引,用于在一篇文章中,检索文本信息的。
MYSQL的索引类型:PRIMARY, INDEX,UNIQUE,FULLTEXT,SPAIAL 有什么区别?各适用于什么场合?
举个例子来说,比如你在为某商场做一个会员卡的系统。
这个系统有一个会员表
有下列字段:
Tables | Are |
---|---|
会员编号 INT | 作为主键,使用PRIMARY |
会员姓名 VARCHAR(10) | 普通的 INDEX |
会员身份证号码 VARCHAR(18) | UNIQUE (唯一的,不允许重复) |
会员电话 VARCHAR(10) | |
会员住址 VARCHAR(50) | |
会员备注信息 TEXT | 选择 FULLTEXT,全文搜索。 |
不过 FULLTEXT 用于搜索很长一篇文章的时候,效果最好。
用在比较短的文本,如果就一两行字的,普通的 INDEX 也可以。
普通索引
这是最基本的索引类型,而且它没有唯一性之类的限制。
创建索引,例如 CREATE INDEX <索引的名字> ON tablename (列的列表);
修改表,例如 ALTER TABLE tablename ADD INDEX [索引的名字] (列的列表);
创建表的时候指定索引,例如 CREATE TABLE tablename ( [...], INDEX [索引的名字] (列的列表) );
唯一性索引
这种索引和前面的“普通索引”基本相同,但有一个区别:索引列的所有值都只能出现一次,即必须唯一。
MYSQL主键
MYSQL主键是一种唯一性索引,但它必须指定为“PRIMARY KEY”。
例如“CREATE TABLE tablename ( [...], PRIMARY KEY (列的列表) );
”。
但是,我们也可以通过修改表的方式加入主键,例如“ALTER TABLE tablename ADD PRIMARY KEY (列的列表);
”。
每个表只能有一个主键。
全文索引
MySQL从3.23.23版开始支持全文索引和全文检索。在MySQL中,全文索引的索引类型为FULLTEXT。
全文索引可以在VARCHAR
或者TEXT
类型的列上创建。
它可以通过CREATE TABLE命令创建,也可以通过ALTER TABLE或CREATE INDEX命令创建。
对于大规模的数据集,通过ALTER TABLE(或者CREATE INDEX)命令创建全文索引要比把记录插入带有全文索引的空表更快。
单列索引与多列索引
创建索引,例如CREATE UNIQUE INDEX <索引的名字> ON tablename (列的列表);
修改表,例如ALTER TABLE tablename ADD UNIQUE [索引的名字] (列的列表);
创建表的时候指定索引,例如CREATE TABLE tablename ( [...], UNIQUE [索引的名字] (列的列表) );