如何确保在SQL数据库字段中输入的值是唯一的?

时间:2019-05-20 06:58:20

标签: sql sql-server

我正在从用户那里获取一条线索,并将其输入数据库的表中。但是,如果用户在已经使用的数据字段中输入值,我必须向用户抛出错误。

UPDATE Class_records SET The_number= '456' where class='mech-4B'

因此,这里通过将mech-4B下的每个记录的The_number设置为'456'来更新我的表。

我可以执行哪种查询语句,以便当另一个用户输入相同的数字456说“ cse-4B”时,查询条件应该失败?

3 个答案:

答案 0 :(得分:0)

您可以运行查询并检查受查询影响的行数。如果运行相同的查询,则返回的行数很可能为零。如果为零,则会向用户抛出错误或期望。

if (rowCount() > 0){
    //value is new 
}
else {
    //value is duplicated and throw error.
}

答案 1 :(得分:0)

因此您必须为其编写存储过程:

CREATE PROCEDURE UpdateXYZTableWithUniqueness
    (@The_number AS INT,
     @class AS NVARCHAR)
AS 
BEGIN 
     SET NOCOUNT ON 

     IF ((SELECT COUNT(*)  
          FROM Class_records 
          WHERE The_number = @The_number) == 0)
     BEGIN
         UPDATE Class_records 
         SET The_number = @The_number 
         WHERE class = @class 
     END
     ELSE
     BEGIN
         PRINT 'Already Exits'
     END
END
GO

答案 2 :(得分:0)

如果使用mysql,则可以尝试在更新后添加“忽略”: “更新忽略Class_records集...”。

您可以查看这篇文章:https://chartio.com/resources/tutorials/how-to-insert-if-row-does-not-exist-upsert-in-mysql/

如果使用T-SQL,则可以尝试使用“如果不存在...”: “如果不存在(请从Class_Records中选择*,其中The_number ='456'和class ='mech-4B') 开始     UPDATE Class_records SET The_number ='456'其中class ='mech-4B' 结束”

您可以查看这篇文章:SQL Server 2008 - IF NOT EXISTS INSERT ELSE UPDATE

再见