84669 人学习
152542 人学习
20005 人学习
5487 人学习
7821 人学习
359900 人学习
3350 人学习
180660 人学习
48569 人学习
18603 人学习
40936 人学习
1549 人学习
1183 人学习
32909 人学习
我想要保持数据库记录的不重复,现在有两种方案,一种是给这一个(或多个)字段添加唯一性约束,一种是程序先去查询数据库是否存在给个字段值的记录,再决定是否插入?请问这两种方式该如何抉择?有更好的方式么?
认证高级PHP讲师
靠程序保证唯一不可靠,因为在高并发情况下,以下2步会重叠,导致重复插入:
数据库里查询是否已经有记录
如果没有则插入记录
选择唯一性约束比较好:
简化应用逻辑。
建立唯一性约束的时候,系统一般会自动创建一个索引,在确保唯一的同时增加查询性能。(PostgreSQL 文档)
Adding a unique constraint will automatically create a unique B-treeindex on the column or group of columns listed in the constraint.
楼主要明白数据库存在的目的是什么,数据库系统从文件系统发展而来,如果按照第二种方案,可以直接存储为文件,何必使用数据库呢?数据库不仅仅是简单的SQL,作为DBMS他还提供了很多其它的功能,让你集中精力解决应用问题,同时优化系统的底层访问。
靠程序保证唯一不可靠,因为在高并发情况下,以下2步会重叠,导致重复插入:
数据库里查询是否已经有记录
如果没有则插入记录
选择唯一性约束比较好:
简化应用逻辑。
建立唯一性约束的时候,系统一般会自动创建一个索引,在确保唯一的同时增加查询性能。(PostgreSQL 文档)
楼主要明白数据库存在的目的是什么,数据库系统从文件系统发展而来,如果按照第二种方案,可以直接存储为文件,何必使用数据库呢?数据库不仅仅是简单的SQL,作为DBMS他还提供了很多其它的功能,让你集中精力解决应用问题,同时优化系统的底层访问。