84669 Lernen von Personen
152542 Lernen von Personen
20005 Lernen von Personen
5487 Lernen von Personen
7821 Lernen von Personen
359900 Lernen von Personen
3350 Lernen von Personen
180660 Lernen von Personen
48569 Lernen von Personen
18603 Lernen von Personen
40936 Lernen von Personen
1549 Lernen von Personen
1183 Lernen von Personen
32909 Lernen von Personen
我想要保持数据库记录的不重复,现在有两种方案,一种是给这一个(或多个)字段添加唯一性约束,一种是程序先去查询数据库是否存在给个字段值的记录,再决定是否插入?请问这两种方式该如何抉择?有更好的方式么?
认证高级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他还提供了很多其它的功能,让你集中精力解决应用问题,同时优化系统的底层访问。