首先了解一下什么是索引,索引通常用来快速定位到某一行的数据,MySQL的索引是存在B树中的。
候选码 : 若关系中的某一属性或属性组的值能唯一的标识一个元组,而其任何、子集都不能再标识,则称该属性组为候选码。例如:在学生实体中,“学号”是能唯一的区分学生实体的,同时又假设“姓名”、“班级”的属性组合足以区分学生实体,那么{学号}和{姓名,班级}都是候选码。
主码 : 主码也叫主键。主码是从候选码中选出来的。 一个实体集中只能有一个主码,但可以有多个候选码。
外码 : 外码也叫外键。如果一个关系中的一个属性是另外一个关系中的主码则这个属性为外码。
主属性 : 候选码中出现过的属性称为主属性。比如关系 工人(工号,身份证号,姓名,性别,部门). 显然工号和身份证号都能够唯一标示这个关系,所以都是候选码。工号、身份证号这两个属 性就是主属性。如果主码是一个属性组,那么属性组中的属性都是主属性。
非主属性: 不包含在任何一个候选码中的属性称为非主属性。比如在关系——学生(学号,姓名,年龄,性别,班级)中,主码是“学号”,那么其他的“姓名”、“年龄”、“性别”、“班级”就都可以称为非主属性
index(唯一索引)
1.一般为普通索引,没啥特殊,通常是作为辅助查询
使用语法:
ALTER TABLE 表名 ADD INDEX 索引名称(索引字段);
primary key(主键约束)
1.可以为一列或者多列为主键,但主键只能有一个
2.没有重复值且不允许为空(NULL)
3.可以作为外键
4.一般不会去更新,因为更新的代价很大,对损耗很多性能
使用语法:
- 在表中
PRIMARY KEY (`id`) USING BTREE
unique key(唯一性约束)
1.一张表可以有多个唯一性约束,通常限制非主键列
2.没有重复值但允许为空(NULL)
3.不可作为外键
4.只要唯一就可以更新
使用语法:
CREATE [ UNIQUE | FULLTEXT ] INDEX index_name ON table_name (index_col_name, ...);
foreign key
1.起约束作用(constraint)
2.通常是联系其他表(两个以上)的主键,组合在一起成为本表的主键
使用语法:
FOREIGN KEY(user_id) REFERENCES user(id),
primary key和unique key区别
primary key = unique key +不能为null
index(唯一索引)和unique key(唯一性约束)区别
唯一约束是通过创建唯一索引来实现,删除唯一约束时可以只删除约束而不删除对应的索引