MYSQL主键索引、普通索引、唯一索引、全文索引 的增加/修改/更新/删除 以及其实例

主键索引

唯一 且 不能为空 ,可多列。

主键语法:在原表已有主键时,如果在进行ALTER ADD 增加主键会报错, Multiple primary key defined,需要删除原先的主键后,再进行创建。

创建表的时候指定主键: CREATE TABLE tablename ( [...],  PRIMARY KEY ('数据库字段名称','数据库字段名称')); 
创建主键: ALTER TABLE tablename ADD PRIMARY KEY (数据库字段名称);
删除主键: ALTER TABLE tablename DROP PRIMARY KEY ; # 删除主键时需直接删除整个主键

//实例
ALTER TABLE `py_etl_private_fund_base_info_2_1` ADD PRIMARY KEY (py_private_id,full_name)
ALTER TABLE `py_etl_private_fund_base_info_2_1` drop PRIMARY KEY 
普通索引

没有任何限制,可多列,可为空。用于加快字段查询速度。

普通索引语法

创建索引: CREATE INDEX <索引的名字> ON tablename (数据库字段名称); # 这里只能使用INDEX
修改索引: ALTER TABLE tablename ADD INDEX/KEY [索引的名字] (数据库字段名称);  // KEY/INDEX 也可不写
创建表的时候指定索引: CREATE TABLE tablename ( [...], KEY ['索引的名字'] ('数据库字段名称','数据库字段名称'));
删除索引:ALTER TABLE tablename DROP INDEX/KEY [索引的名字] 

//实例
CREATE index name_index3 ON `py_etl_private_fund_base_info_2_1`  (full_name) 
ALTER TABLE `py_etl_private_fund_base_info_2_1` ADD INDEX name_index(full_name)
ALTER TABLE `py_etl_private_fund_base_info_2_1` ADD KEY name_index2(short_name)
ALTER TABLE `py_etl_private_fund_base_info_2_1` DROP INDEX name_index3
ALTER TABLE `py_etl_private_fund_base_info_2_1` DROP KEY name_index2
唯一索引

索引列的所有值都只能出现一次,即必须唯一,字段内容可为空。用有自增ID的表时,最好是建立唯一索引,防止数据重复。

唯一索引语法

创建唯一索引: CREATE UNIQUE INDEX <索引的名字> ON tablename (数据库字段名称); # 这里只能使用INDEX
修改唯一索引: ALTER TABLE tablename ADD UNIQUE KEY/INDEX  [索引的名字] (数据库字段名称); // KEY/INDEX 也可不写
创建表的时候指定唯一索引: CREATE TABLE tablename ( [...], UNIQUE KEY ['索引的名字'] ('数据库字段名称'));
删除唯一索引:ALTER TABLE tablename DROP INDEX/KEY [索引的名字] 
//实例
CREATE UNIQUE index unique_3 ON `py_etl_private_fund_base_info_2_1`  (full_name)
ALTER TABLE `py_etl_private_fund_base_info_2_1` ADD unique KEY unique_1(py_private_id,full_name);
ALTER TABLE `py_etl_private_fund_base_info_2_1` ADD unique index unique_2(py_private_id,full_name);

ALTER TABLE `py_etl_private_fund_base_info_2_1` DROP index unique_3
全文索引

针对CHAR、VARCHAR ,TEXT字段类型,使用LIKE通配符时进行查询时,提高其速度。

创建全文索引: CREATE FULLTEXT INDEX <索引的名字> ON tablename (数据库字段名称); # 这里只能使用INDEX
修改全文索引: ALTER TABLE tablename ADD FULLTEXT KEY/INDEX [索引的名字] (数据库字段名称);  // KEY/INDEX 也可不写
创建表的时候指定全文索引: CREATE TABLE tablename ( [...], FULLTEXT KEY ['索引的名字'] ('数据库字段名称','数据库字段名称'));
删除全文索引:ALTER TABLE tablename DROP INDEX/KEY [索引的名字] 

// 实例
ALTER TABLE `py_etl_private_fund_base_info_2_1` ADD FULLTEXT all_index(full_name);
ALTER TABLE `py_etl_private_fund_base_info_2_1` ADD FULLTEXT key all_index1(full_name);
ALTER TABLE `py_etl_private_fund_base_info_2_1` DROP index all_index1
查看索引
show keys from 数据库表名  或者 show index from 数据库表名  # 两者结果一致
show keys from `py_etl_private_fund_base_info_2_1`

其中各主要参数说明如下:

参数 说明
Table 表示创建索引的数据表名,这里是 py_etl_private_fund_base_info_2_1数据表。
Non_unique 表示该索引是否是唯一索引。若不是唯一索引,则该列的值为 1;若是唯一索引,则该列的值为 0。
Key_name 表示索引的名称。
Seq_in_index 表示该列在索引中的位置,如果索引是单列的,则该列的值为 1;如果索引是组合索引,则该列的值为每列在索引定义中的顺序。
Column_name 表示定义索引的列字段。
Collation 表示列以何种顺序存储在索引中。在 MySQL 中,升序显示值“A”(升序),若显示为 NULL,则表示无分类。
Cardinality 索引中唯一值数目的估计值。基数根据被存储为整数的统计数据计数,所以即使对于小型表,该值也没有必要是精确的。基数越大,当进行联合时,MySQL 使用该索引的机会就越大。
Sub_part 表示列中被编入索引的字符的数量。若列只是部分被编入索引,则该列的值为被编入索引的字符的数目;若整列被编入索引,则该列的值为 NULL。
Packed 指示关键字如何被压缩。若没有被压缩,值为 NULL。
Null 用于显示索引列中是否包含 NULL。若列含有 NULL,该列的值为 YES。若没有,则该列的值为 NO。
Index_type 显示索引使用的类型和方法(BTREE、FULLTEXT、HASH、RTREE)。
Comment 显示评注。

也就是说:

主键索引:Key_name 为PRIMARY ,且Index_type为BTREE ;

普通索引 :Non_unique为1,且Key_name 不为PRIMARY,且Index_type为BTREE;

唯一索引:Non_unique为0,且Key_name 不为PRIMARY,且Index_type为BTREE;

全文索引:Key_name 为PRIMARY ,且Index_type为FULLTEXT。

需要注意的点:

1.索引名称之间不能同名;

2.已经添加过得索引第二次仍可以添加成功,因为其可以有不同的索引名称;

你可能感兴趣的:(学习)