数据库中主键、外键和索引有什么区别?
1.主键
主键是一种唯一标识表中每一条记录的约束条件。一个表只能定义一个主键,且主键不能为NULL。它用来保证表中记录的唯一性,也可以用来快速查找和定位记录。
主键的特点:
- 主键必须唯一,不允许重复;
- 主键值不能为空,不能设置为NULL;
- 一个表只能有一个主键,可以由一个字段或多个字段组成(复合主键)
定义主键:
-
创建表时定义主键:create table table_name(
id int primary key,
name varchar(20)
)
-
在修改表时添加主键:alter table table_name add primary key(id);
2.外键
外键是一种参照其他表的键,它限制了一个表中某个字段的取值必须是另一个表中某一个字段的取值。外键可以用来建立两个表之间的关联,从而实现数据的一致性。
外键的特点如下:
- 表示与另一张表的关联关系
- 用于保持数据的一致性
- 可以有重复值,也可以为空
定义外键:
-
创建表时定义外键:create table table_name(
id int,
name varchar(20),
department_id int,
foreign key (department_id) references department(id)
)
3.索引
索引是一种增加查询效率的数据结构,它是在数据表上建立的。索引可以快速定位表中的数据行,提高查询速度和排序速度。常用的索引类型包括B-Tree索引、Hash索引和全文索引。
索引的特点如下:
- 用于提高查询效率
- 可以唯一或非唯一
- 索引会占用磁盘空间,建议只对频繁搜索或排序的列创建索引
- 索引会影响数据的插入、更新和删除速度
索引的定义
-
创建表时定义索引:create table table_name(
id int,
name varchar(20),
index index_name(id)
);
-
修改表添加索引:alter table table_name add index index_name(id);
比较:
主键和外键:
- 主键用于保证表中记录的唯一性,而外键用于建立两个表之间的关联关系,实现数据的一致性;
- 主键必须为唯一且不能为空,而外键可以重复或为空
- 主键只能定义一个,而一个表可以有多个外键。
索引:
- 表示对某个字段或字段组的值进行排序的快速查询方式
- 具有快速检索和排序的作用
- 索引会占用磁盘空间,建议只对频繁搜索或排序的列创建,否则会降低更新、插入和删除数据的性能;
- B-Tree索引支持高效的范围查找,Hash索引只支持等值查找;
- 全文索引可以对文本内容进行搜索