根据《MySQL技术内幕》中的解释:
约束更是一个逻辑的概念,用来保证数据的完整性,而索引是一个数据结构,既有逻辑上的概念,在数据库中还代表着物理存储的方式。
那么,我们需要先理解“什么是数据完整性”?
数据完整性
- 概念:很容易理解,就如字面意思,我们需要保证我们存入的数据满足特定的要求。而如果是文件系统的话,我们一般通过程序端进行控制;但关系型数据库(MySQL数据库)本身能够保证数据完整性。
- 数据完整性有以下三种形式:
- 实体完整性保证表中有一个主键。可以通过Primary Key或Unique Key约束,也可以编写一个触发器。
- 域完整性保证数据每列的值满足特定条件。通过几种途径来保证:选择合适的数据类型;外键约束;触发器;DEAFAULT约束。
- 参照完整性保证两张表之间的关系。通过外键或者触发器。
“索引”之于数据结构
MySQL中InnoDB引擎是通过B+树这种数据结构进行数据存取的,而“索引”就是B+树的子叶结点(非树叶)。我们说InnoDB基于B+树查找数据,也可以说基于索引查找数据。利用好索引可以大大提高查询的性能。
总结
最后,再来理解一下开头的那句话。
约束是一个逻辑概念,它更多是指一种功能,用来保证数据完整性。索引是一个数据结构,因为索引是B+树的子叶结点。当用户创建了唯一索引就创建了唯一的约束,我们创建了索引这个数据结构,起到了唯一约束的这个功能从而保证了数据完整性。
以上是我看书时个人观点的总结,仅供参考