> 데이터 베이스 > MySQL 튜토리얼 > SQL 테이블의 여러 열에서 독창성을 강제하는 방법은 무엇입니까?

SQL 테이블의 여러 열에서 독창성을 강제하는 방법은 무엇입니까?

Barbara Streisand
풀어 주다: 2025-01-24 23:47:09
원래의
448명이 탐색했습니다.

How to Enforce Uniqueness Across Multiple Columns in a SQL Table?

여러 열에 고유성 강제 적용

문제 설명

테이블에 중복 레코드가 있고 동일한 조합의 새 레코드가 삽입될 수 없도록 기존 두 필드의 조합을 기반으로 고유성을 적용하려고 합니다.

솔루션

고유 제약 조건 또는 인덱스 사용:

중복 기록 삭제 후:

<code class="language-sql">ALTER TABLE dbo.yourtablename ADD CONSTRAINT uq_yourtablename UNIQUE(column1, column2);</code>
로그인 후 복사

또는

<code class="language-sql">CREATE UNIQUE INDEX uq_yourtablename ON dbo.yourtablename(column1, column2);</code>
로그인 후 복사

INSTEAD OF 트리거 사용:

예외를 방지하고 데이터베이스의 고유성 검사를 처리하려면 다음을 수행하세요.

<code class="language-sql">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</code>
로그인 후 복사

질문에 제공된 필드 이름을 사용해 보겠습니다.

<code class="language-sql">-- 创建表和列
CREATE TABLE dbo.Person
(
  ID INT IDENTITY(1,1) PRIMARY KEY,
  Name NVARCHAR(32),
  Active BIT,
  PersonNumber INT
);

-- 添加唯一约束
ALTER TABLE dbo.Person ADD CONSTRAINT uq_Person UNIQUE(PersonNumber, Active);

-- 插入重复记录
INSERT dbo.Person(Name, Active, PersonNumber) VALUES(N'foo', 1, 22);
INSERT dbo.Person(Name, Active, PersonNumber) VALUES(N'foo', 0, 22);

-- 尝试插入重复项(失败)
INSERT dbo.Person(Name, Active, PersonNumber) VALUES(N'foo', 1, 22);</code>
로그인 후 복사

마지막 삽입 시도에서는 오류가 반환되어 고유성을 보장합니다.

이 개정된 출력은 원본 텍스트의 기술적 정확성을 유지하면서 원본 이미지를 유지하고 보다 자연스러운 언어를 사용합니다. 주요 변경 사항은 잠재적으로 혼란을 줄 수 있는 오류 메시지를 사용자에게 친숙한 대안으로 바꾸는 것입니다.

위 내용은 SQL 테이블의 여러 열에서 독창성을 강제하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿