约束
约束是定义在字段上的规则,我们可以在建表语句添加字段约束或者表约束(可跨多个字段),也可以在创建完表之后通过alter table语句添加约束。如果用户存储字段数据时违反了约束,那么会抛出错误。
唯一约束可以保证在一个字段或者一组字段中的数据相较于表中其他行的数据是唯一的。这里需要注意下null值问题,null值不被认为是相等。如果唯一约束想要限制单一null值,可以使用部分表达式索引约束单个null值。
索引
索引是数据库中一种快速查询数据的方法。类似一本书前面的目录,可通过页码快速定位到查询的内容。
单独创建索引时可以详细的选项参数,比如使用WHERE条件部分索引,使用表达式索引,使用INCLUDE索引等。
唯一约束与唯一索引
唯一约束与唯一索引都是为了强制唯一,唯一约束是一种约定数据存储的业务规则,它在数据库里是通过唯一索引实现。我们使用唯一约束时并不需要显式去创建唯一索引,它会自动创建,尽管我们可以分成两步来操作。
CREATE UNIQUE INDEX idx_name ...; ALTER TABLE table_name ... USING idx_name;
复制
如果我们分开来创建唯一约束时,第一步先创建索引可以设置更多索引选项参数,使用表达式索引、部分索引及INDEX-INCLUDE等特性。
总结
1.唯一约束与唯一索引从实现唯一的功能性看几乎没有区别。
2.单独去创建索引时可以设置更多额外的特性参数。
参考文章
https://stackoverflow.com/questions/23542794/postgres-unique-constraint-vs-index
https://medium.com/flatiron-engineering/uniqueness-in-postgresql-constraints-versus-indexes-4cf957a472fd
https://www.quora.com/What-is-the-difference-between-a-constraint-and-an-index-in-SQL
https://www.sqlshack.com/difference-between-unique-indexes-and-unique-constraints-in-sql-server/
保持联系
本人组建了一个技术群:PG乐知乐享交流群。欢迎关注文章的小伙伴随缘加入,进群请加微信并备注PG乐知乐享。