"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como posso evitar registros de banco de dados duplicados usando restrições e gatilhos exclusivos?

Como posso evitar registros de banco de dados duplicados usando restrições e gatilhos exclusivos?

Postado em 2025-02-26
Navegar:836

How Can I Prevent Duplicate Database Records Using Unique Constraints and Triggers?

use restrições exclusivas para evitar registros duplicados

]

Nas operações do banco de dados, geralmente é necessário garantir a singularidade de combinações específicas de colunas. Por exemplo, considere a tabela a seguir:

ID | Name | Active | PersonNumber

Adicione restrições exclusivas às tabelas existentes

] Para adicionar uma restrição exclusiva a uma tabela existente, você pode usar um dos seguintes métodos:

1.

alter tabela dbo.yourtablename Adicionar restrição uq_yourtablename exclusivo (column1, column2);

ALTER TABLE dbo.yourtablename
ADD CONSTRAINT uq_yourtablename UNIQUE(column1, column2);
Crie índice exclusivo uq_yourtablename No nome dbo.yourtablename (column1, column2);

use gatilhos para evitar a inserção repetida
CREATE UNIQUE INDEX uq_yourtablename
ON dbo.yourtablename(column1, column2);

Crie Trigger DBO.blockDUplicatesyourtable No dbo.yourtable Em vez de inserir COMO COMEÇAR Definir nocorre em; Se não existe ( Selecione 1 De inserido como eu Inner Junst DBO.YourTable como t No i.column1 = t.column1 E i.column2 = t.column2 ) COMEÇAR Insira DBO.YourTable (Column1, Column2, ...) Selecione Column1, Column2, ... de inserido; FIM OUTRO COMEÇAR Imprimir 'Nenhuma ação foi realizada. ' - - Informações rápidas mais amigáveis FIM FIM; IR

Exemplo: Implemente a singularidade para o PERSONNUMBRO E ATIVO
CREATE TRIGGER dbo.BlockDuplicatesYourTable
ON dbo.YourTable
INSTEAD OF INSERT
AS
BEGIN
  SET NOCOUNT ON;

  IF NOT EXISTS (
    SELECT 1
    FROM inserted AS i
    INNER JOIN dbo.YourTable AS t
    ON i.column1 = t.column1
    AND i.column2 = t.column2
  )
  BEGIN
    INSERT dbo.YourTable(column1, column2, ...)
      SELECT column1, column2, ... FROM inserted;
  END
  ELSE
  BEGIN
    PRINT '未执行任何操作。'; -- 更友好的提示信息
  END
END;
GO

use tempdb; IR Crie a tabela dbo.person ( Identidade id int (1,1) chave primária, Nome Nvarchar (32), Bit ativo, PersonNumber Int ); IR Alter tabela dbo.person Adicionar restrição uq_person exclusivo (Pessonesnumber, ativo); IR

Agora, qualquer tentativa de inserção que viole a restrição única falhará com uma mensagem de erro, garantindo que não haja registro duplicado com o mesmo número de personagens e estados ativos.

imprimir 'Nenhuma ação foi executada. A instrução '
USE tempdb;
GO

CREATE TABLE dbo.Person
(
  ID INT IDENTITY(1,1) PRIMARY KEY,
  Name NVARCHAR(32),
  Active BIT,
  PersonNumber INT
);
GO

ALTER TABLE dbo.Person 
  ADD CONSTRAINT uq_Person UNIQUE(PersonNumber, Active);
GO
Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3