SQLite에서 고유 구속조건 사용 방법

SQLite에서 고유 구속조건 사용 방법

2022-06-04 last update

5 minutes reading SQLite
SQLite에서는 데이터를 삽입, 업데이트 또는 수정할 때 일부 규칙을 통해 열의 데이터를 제한하는 제약이 다릅니다.SQLite가 지원하는 데이터베이스의 일부 일반적인 제약은 유일성, 메인 키, 외부 키, 검사 및 비공백을 포함한다.
SQLite는 데이터베이스를 관리하는 데 사용되는 RDBMS로 데이터베이스는 테이블의 행과 열에 있습니다.본고는 SQLite의 유일한 제약이 무엇인지, 그리고 SQLite에서 어떻게 작동하는지 이해하는 데 도움을 준다.

SQLite의 유일한 제약조건은 무엇입니까?


유일한 제약은 열의 데이터가 유일해야 한다는 것을 확보한다. 이것은 같은 열의 어떤 필드도 비슷한 값을 포함하지 않는다는 것을 의미한다.예를 들어, 이 열을 삽입한 전자메일이 이 열의 다른 기록과 같지 않도록 유일한 제약을 사용하여 열을 정의합니다.

SQLite의 UNIQUE와 PRIMARY KEY 제약은 어떤 차이가 있습니까?


주 키와 유일성 제약은 테이블에 중복된 항목을 삽입해서는 안 되지만, 차이점은 다음과 같다.이 테이블은 하나의 주 키만 포함해야 하며, 유일한 제약은 같은 테이블의 여러 열에 사용할 수 있다.

SQLite에서 고유 구속조건을 정의하는 방법


SQLite의 단일 또는 다중 열에서 고유 구속조건을 정의할 수 있습니다.

열에 대한 고유 구속조건을 정의하는 방법


유일한 구속조건은 열로 정의할 수 있으며, 열을 통해 열의 모든 필드에 유사한 값을 입력할 수 없습니다.열에 고유한 구속조건을 정의하는 일반 구문은 다음과 같습니다.
CREATE TABLE TABLE_NAME (column1 datatype UNIQUE, column2 datatype);
이에 대한 설명은 다음과 같습니다.
  • CREATE TABLE 자구를 사용하여 테이블을 만들고 TABLE\u 이름
  • 을 바꿉니다.
  • column1과datatype
  • 을 대체하여 데이터 형식으로 열 이름을 정의합니다
  • 이 구속을 사용할 열
  • 에 대해 UNIQUE 자구를 사용합니다.
  • 기타 열 및 데이터 유형 정의
  • 이 문법을 이해하려면 students\u 데이터에 테이블을 만드는 예시를 고려하십시오. 이 테이블은 두 열이 있습니다. 하나는 std\u id이고, 다른 하나는 st\u name입니다. 유일한 제약이 있는 열 std\u id를 정의하는 데 사용됩니다. 모든 학생들이 유사한 std\u id를 가질 수 없도록 합니다.
    CREATE TABLE students_data (std_id INTEGER UNIQUE, std_name TEXT);

    다음 방법으로 값을 삽입합니다.
    INSERT INTO students_data VALUES (1, 'John'), (2,'Paul');

    이제 std\U id가 1인 위치에 다른 학생 이름을 추가합니다.
    INSERT INTO students_data VALUES (1, 'Hannah');

    출력에서 알 수 있듯이 std\uid 값을 삽입하는 오류가 발생했습니다. 유일한 제약으로 정의되어 있기 때문에 이 열의 다른 값과 중복될 수 있는 값이 없습니다.

    여러 열에 대해 고유 구속조건을 정의하는 방법


    우리는 모든 줄에 중복된 데이터를 동시에 삽입하지 않도록 하기 위해 유일한 제약을 사용하여 여러 열을 정의할 수 있다.예를 들어 만약에 우리가 세 그룹(a, B, C)의 여행을 위해 도시를 선택해야 한다면 우리는 같은 도시를 모든 세 그룹에 분배할 수 없다. 이것은 유일한 제약을 사용하여 완성할 수 있다.
    예를 들어 이 세 가지 상황은 모두 가능하다.
    그룹\u A
    그룹\u B
    C조
    플로리다 주
    플로리다 주
    보스턴
    뉴욕
    플로리다 주
    플로리다 주
    플로리다 주
    플로리다 주
    플로리다 주
    그러나 우리가 독특한 제약을 사용한다면 다음과 같은 상황이 발생할 수 없다.
    그룹\u A
    그룹\u B
    C조
    플로리다 주
    플로리다 주
    플로리다 주
    여러 열에 대해 고유한 구속조건을 사용하는 일반 구문은 다음과 같습니다.
    CREATE TABLE TABLE_NAME (column1 datatype, column2, UNIQUE(column1, column2));
    이에 대한 설명은 다음과 같습니다.
  • CREATE TABLE 자구를 사용하여 테이블을 만들고 TABLE\u 이름을 그 이름으로 바꿉니다
  • column1과datatype
  • 을 대체하여 데이터 형식으로 열 이름을 정의합니다
  • UNIQUE 자구를 사용하고 () 에서 이 구속을 사용하여 정의할 열의 이름을 입력합니다
  • 이 점을 이해하기 위해 위의 예시를 고려하고 다음 명령을 실행하여 Trip\u 데이터 테이블을 만들 것입니다.
    CREATE TABLE Trip_data (Group_A TEXT, Group_B TEXT, Group_C TEXT, UNIQUE (Group_A,Group_B,Group_C));

    우리는 분배 도시의 값을 삽입할 것이다.
    INSERT INTO Trip_data VALUES('Florida', 'Florida', 'Boston'),('New York', 'Florida',' Florida'),('Florida','Florida','Florida');

    이제 Trip\u 데이터의 모든 열에 동일한 도시를 삽입합니다.
    INSERT INTO Trip_data VALUES('Florida', 'Florida', 'Florida');

    출력에서 볼 수 있듯이 유일한 제약이 정의한 모든 열의 데이터를 반복할 수 없으며, 유일한 제약의 생성 오류가 실패했습니다.

    기존 테이블에 고유 구속조건을 추가하는 방법


    SQLite에서 우리는 ALTER 명령을 사용하여 제약을 추가할 수 있습니다. 예를 들어 우리는 표 students\u data, 열 std\u id, std\u name가 있습니다. 우리는 표 std\u id에 제약을 추가하고 싶습니다. students\u data:
  • 명령 "PRAGMA foreign keys=OFF"를 사용하여 외부 키 구속조건 닫기
  • 명령을 사용하여 트랜잭션 시작
  • 명령 "ALTER TABLE TABLE\u name RENAME TO old\u TABLE;"사용실제 테이블의 이름을 바꾸려면
  • 이전 이름을 다시 사용하여 표를 만들지만, 이번 열을 정의하는 동시에 유일한 제약도 정의합니다
  • 이전 테이블(이름이 변경됨)의 데이터를 새 테이블로 복사(이름이 변경됨)
  • 첫 번째 테이블 삭제(이름이 변경됨)
  • 제출 사용
  • 명령 "PRAGMA foreign keys=ON"을 사용하여 외부 키 구속조건 열기
  • BEGIN TRANSACTION;
    ALTER TABLE students_data RENAME TO new_students_data;
    CREATE TABLE students_data (id INTEGER NOT NULL UNIQUE, name TEXT NOT NULL, attendance INTEGER NOT NULL);
    INSERT INTO students_data  SELECT * FROM new_students_data;
    DROP TABLE new_students_data;
    COMMIT;
    PRAGMA foreign_keys=ON;

    고유 구속조건을 기존 테이블에 삭제하는 방법


    다른 데이터베이스와 마찬가지로, 우리는drop와ALTER 명령을 사용하여 제약을 삭제할 수 없습니다. 유일한 제약을 삭제하려면, 제약을 기존 테이블에 추가하고 표 구조를 재정의하는 같은 과정을 선택해야 합니다.
    위의 예제를 다시 한 번 고려하여 고유한 구속조건을 제거합니다.
    PRAGMA foreign_keys=off;
    BEGIN TRANSACTION;
    ALTER TABLE students_data RENAME TO new_students_data;
    CREATE TABLE students_data (id INTEGER NOT NULL, name TEXT NOT NULL, attendance INTEGER NOT NULL);
    INSERT INTO students_data  SELECT * FROM new_students_data;
    DROP TABLE new_students_data;
    COMMIT;
    PRAGMA foreign_keys=ON;

    결론


    주 키 제약과 마찬가지로 데이터베이스에서 유일한 제약을 사용하여 표 필드에 삽입된 값의 중복을 제한하지만 둘 사이에 차이가 있다.하나의 시계는 하나의 메인 키만 있을 수 있고, 하나의 시계는 여러 개의 유일 키 열을 가질 수 있다.본고에서 우리는 예시를 통해 유일한 제약이 무엇인지, 그리고 SQLite에서 그것을 어떻게 사용하는지 토론했다.