如何防止数据库中的重复记录

时间:2013-04-21 22:34:00

标签: primary-key duplicate-data

问题:

如何阻止网站的两个不同管理员用户创建具有相同客户ID的客户记录。

背景资料:

我正在使用的网站根据执行以下操作的例程/方法自动生成一个名为“客户编号”的编号:

  1. 使用cust_number_range表检查允许的数字范围。
  2. 计算出客户表中使用的最高数字。
  3. 在“创建新客户”表单中显示下一个可用号码。
  4. 单击提交按钮时,在尝试保存记录之前,我再次仔细检查客户表,以确保我已计算的数字为下一个可用的数字未被使用。如果它仍然可以,那么我保存到数据库。
  5. 这是数据库的样子:

    customer table
    =====================
    id           integer - primary key
    custnumber   integer
    fname        varchar(255)
    lname        varchar(255)
    
    cust_number_range
    ====================
    lower_range integer
    upper_range integer
    id  integer - primary key
    

    我遇到的问题是,如果两个管理员在同一时间单击“提交”新的cust记录,系统将创建具有相同保留号的两个记录。 以下是我的一些问题:

    1. 是否将custnumber字段作为pk的一部分可选?意思是,这真的是“正确的”解决方案吗?
    2. 我有什么方法可以解决这个问题?
    3. 感谢。

2 个答案:

答案 0 :(得分:0)

您应该使用唯一列。但是我也会从代码中检查,然后在将用户添加到数据库之前,检查用户是否不存在,如果没有,则只添加。

答案 1 :(得分:0)

您需要按顺序排列数字吗? 您可以创建“索引”表。

index_table
====================
index_type integer (possible values - 1 for customers, 2 for orders, etc.)
last_index integer

每次创建新客户时,都可以通过推进last_index id字段从索引表中为用户创建索引。 如果用户未保存记录,则只需跳过ID。

大多数数据库都有一个具有类似机制的record_id,所以我建议使用它。