mysql键和索引

索引的分类

数据库默认会创建索引:  

        并不是给主键建立的索引,是给唯一键创建的    

       主键, 唯一键 , 6字节row_id(自动生成,一个不可见的字段) 这三个都可以被数据库用来创建索引

主键索引: 是唯一且非空的列创建的索引   比唯一键多一个非空

唯一索引: 可以有多个空值  但是不是空值的必须唯一的列创建的索引

普通索引: 给普通的一个列创建的索引   可以空也可以不唯一

全文索引: varchar  char   text   用于全文检索

组合索引: 由多个列一起形成的索引

索引和键的误区

键和索引是两个不同的概念:

键表示一个列的特征:
    主键,  唯一 非空的列
    唯一键, 唯一,可以有多个空的列
    普通键, 可空可不唯一的列
    
索引表示通过什么样的键在内存磁盘上形成一个索引的数据结构:
    主键索引: 是唯一且非空的列创建的索引   比唯一键多一个非空
    唯一索引: 可以有一个空值  的列创建的索引  
    普通索引: 给普通的一个列创建索引   可以空也可以不唯一
    全文索引: varchar  char   text   用于全文检索
    组合索引: 由多个列一起形成的索引

常见的一些误区和混淆:

键的创建往往伴随着索引的产生,当我们的数据库检测到某些键存在时,自动就会进行创建索引了,还有就是某些键需要依赖索引:

唯一键:  如果我们想单纯约束一个列唯一,并且不是为了方便查询,自然想到只创建唯一键,不创建索引
        但是! 键的是否唯一是由索引来约束的,因此不能创建唯一键不创建唯一索引,而是先创建唯一索引作        
        为约束
        因此,唯一键和唯一索引必须一起出现

主键: 同理,如果创建主键,一定伴随着主键索引被数据库自动创建

联合主键: 多个列组成主键,形成联合主键的几个列都不能为空,但是却可以有重复,只要保证几个列都存在时,可以唯一定位到某一行数据

联合主键应用:

在这里使用的id  name 联合主键:
id  name都可以单独重复
但是当id  name都重复是,就无法定位到唯一一行了,这种是不被允许的

组合索引

组合索引在不同索引类型有不同的表现形式:

普通组合索引: 两个都是普通列,组成的索引没有限制,两个列都不限制重复和空值

唯一联合索引: 两个可以都是普通列,也可以为两个列单独创建唯一索引,
	不单独创建的情况下: 两个列随意,可重复,也可以空,但是两个列必须要能够指定唯一的一行 
	某列单独创建的情况: 要遵循不单独创建的要求,还要遵循单独创建的列不能重复  UNIQUE

主键联合索引: 两个都是非空列,但是不可以再为其中的某一列创建主键索引,但是可以创建唯一索引来约束这个列不能重复
	不单独创建的情况下: 两个列随意,可重复,不可以空,但是两个列必须要能够指定唯一的一行
	某列单独创建的情况: 要遵循不单独创建的要求,还要遵循单独创建唯一的列不能重复

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值