Mysql索引约束讲解
索引
什么是索引?
索引是系统内部自动维护的隐藏的“数据表”,它的作用是,可以极大地加快数据的查找速度!
这个隐藏的数据表,其中的数据是自动排好序的,其查找速度就是建立在这个基础上。

通常,所谓建立索引,其实是指定一个表的某个或某些字段作为“索引数据字段”就可以了,形式为:
索引类型(要建立索引的字段名)
索引类型有如下几个:
普通索引: 形式: key(字段名)
含义: 就是一个索引而已,没有其他作用,只能加快查找速度;
唯一索引: 形式: unique key(字段名)
含义: 是一个索引,而且还可以设定其字段的值不能重复(唯一性);
主键索引: 形式: primary key (字段名)
含义: 是一个索引,而且,还具有区分该表中的任何一行数据的作用(其实也是唯一性)
它其实比唯一性索引多一点功能:唯一性可以为空null,而主键不能为空;
全文索引: 形式: fulltext (字段名)。
外键索引: 形式: foreign key (字段名) references 其他表(对应其他表中的字段名);
演示索引创建语法:

此时,该表中如果以id,user_name,或email做条件进行查找,就会“很快”,而以age做条件就会“很慢”。
演示100万级数据有索引和无索引的情况下的查找速度:

约束
什么叫做约束?
约束,就是要求数据需要满足什么条件的一种“规定”。
主要有如下几种约束:
主键约束:形式: primary key ( 字段名);
含义(作用):使该设定字段的值可以用于“唯一确定一行数据”,其实就是“主键”的意思。
唯一约束:形式: unique key ( 字段名);
含义(作用):使该设定字段的值具有“唯一性”,自然也是可区分的。
外键约束:形式: foreign key ( 字段名) references 其他表名(对应其他表中的字段名) ;
含义(作用):使该设定字段的值,必须在其谁定的对应表中的对应字段中已经有该值了。
非空约束: 形式: not null,其实就是设定一个字段时写的那个“not null”属性。
这个约束只能写在字段属性上;
默认约束: 形式: default XX值;其实就是设定一个字段时写的那个“default 默认值”属性
这个约束只能写在字段属性上;
检查约束: 形式: check(某种判断语句),比如:
create table tab1 (
age tinyint,
check (age>=0 and age <100) /*这就是检查约束*/
)
其实,主键约束,唯一约束,外键约束,只是“同一件事情的2个不同角度的说法”,他们同时也称为“主键索引”,“唯一索引”,“外键索引”。
浙公网安备 33010602011771号