我想要保持数据库记录的不重复,现在有两种方案,一种是给这一个(或多个)字段添加唯一性约束,一种是程序先去查询数据库是否存在给个字段值的记录,再决定是否插入?请问这两种方式该如何抉择?有更好的方式么?
认证高级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他還提供了很多其它的功能,讓你集中精力解決應用問題,同時優化系統的底層訪問。