기본 키 및 외래 키 입력 SQLite 예와 함께

SQLite 제약

열 제약 조건은 삽입된 데이터의 유효성을 검사하기 위해 열에 삽입된 값에 제약 조건과 규칙을 적용합니다. 열 제약 조건은 테이블을 생성할 때 열 정의에서 정의됩니다.

SQLite 기본 키

기본 키 열의 모든 값은 고유해야 하며 null이 아니어야 합니다.

기본 키는 하나의 열 또는 열 조합에만 적용될 수 있습니다. 후자의 경우 열 값의 조합은 모든 테이블 행에 대해 고유해야 합니다.

구문 :

다음과 같이 테이블에 기본 키를 정의하는 방법에는 여러 가지가 있습니다.

  • 열 정의 자체에서:
    ColumnName INTEGER NOT NULL PRIMARY KEY;
  • 별도의 정의로서:
    PRIMARY KEY(ColumnName);
  • 열 조합을 기본 키로 생성하려면 다음을 수행합니다.
    PRIMARY KEY(ColumnName1, ColumnName2);

널이 아님 제약조건

SQLite Not Null 제약 조건은 열이 Null 값을 갖는 것을 방지합니다.

ColumnName INTEGER  NOT NULL;

기본 제약

SQLite 기본 제약 조건 열에 값을 삽입하지 않으면 기본값이 대신 삽입됩니다.

예를 들면 :

ColumnName INTEGER DEFAULT 0;

insert 문을 작성하고 해당 열에 값을 지정하지 않은 경우 해당 열의 값은 0이 됩니다.

SQLite UNIQUE 제약조건

SQLite 고유 제약 조건은 열의 모든 값 중에서 중복 값을 방지합니다.

예 :

EmployeeId INTEGER NOT NULL UNIQUE;

이는 다음을 시행합니다. “직원 ID” 값은 고유해야 하며 중복된 값은 허용되지 않습니다. 이는 열 값에 적용됩니다. “직원 ID” 로 작성되어야 합니다.

SQLite CHECK 제약조건

SQLite check 제약 조건은 삽입된 값을 확인하는 조건으로, 값이 조건과 일치하지 않으면 삽입되지 않습니다.

Quantity INTEGER NOT NULL CHECK(Quantity > 10);

10보다 작은 값을 삽입할 수 없습니다. "수량" 열입니다.

SQLite 외래 키

The SQLite 외래 키는 외래 키가 정의된 첫 번째 테이블과 관계가 있는 다른 테이블에 한 테이블에 존재하는 값이 있는지 확인하는 제약 조건입니다.

여러 테이블로 작업하는 동안 하나의 공통 열로 서로 관련된 두 개의 테이블이 있는 경우. 그리고 그 중 하나에 삽입된 값이 다른 테이블의 열에도 반드시 존재하도록 하려면 해당 열에 공통적으로 "외래 키 제약 조건"을 사용해야 합니다.

이 경우 해당 열에 값을 삽입하려고 하면 외래 키는 삽입된 값이 테이블 열에 존재하는지 확인합니다.

외래 키 제약 조건은 기본적으로 활성화되어 있지 않습니다. SQLite, 먼저 다음 명령을 실행하여 해당 기능을 활성화해야 합니다.

PRAGMA foreign_keys = ON;

외래 키 제약 조건이 도입되었습니다. SQLite 버전 3.6.19부터.

예 SQLite 외래 키

두 개의 테이블이 있다고 가정해 보겠습니다. 학생과 부서.

Students 테이블에는 학생 목록이 있고, Departments 테이블에는 학과 목록이 있습니다. 각 학생은 부서에 속합니다. 즉, 각 학생은 DepartmentId 열을 갖습니다.

이제 학생 테이블의 부서 ID 값이 부서 테이블에 존재해야 하는지 확인하는 데 외래 키 제약 조건이 어떻게 도움이 될 수 있는지 살펴보겠습니다.

SQLite 외래 키

따라서 Students 테이블의 DepartmentId에 외래 키 제약 조건을 만든 경우 삽입된 각학과 ID는 Departments 테이블에 있어야 합니다.

CREATE TABLE [Departments] (
	[DepartmentId] INTEGER  NOT NULL PRIMARY KEY AUTOINCREMENT,
	[DepartmentName] NVARCHAR(50)  NULL
);
CREATE TABLE [Students] (
	[StudentId] INTEGER  PRIMARY KEY AUTOINCREMENT NOT NULL,
	[StudentName] NVARCHAR(50)  NULL,
	[DepartmentId] INTEGER  NOT NULL,
	[DateOfBirth] DATE  NULL,
	FOREIGN KEY(DepartmentId) REFERENCES Departments(DepartmentId)
);

외래 키 제약 조건이 다른 테이블과 관계가 있는 테이블에 정의되지 않은 요소나 값이 삽입되는 것을 방지하는 방식을 확인하기 위해 다음 예를 살펴보겠습니다.

이 예에서 Departments 테이블에는 Students 테이블에 대한 외래 키 제약 조건이 있으므로 학생 테이블에 삽입된 모든 DepartmentId 값이 Departments 테이블에 있어야 합니다. 부서 테이블에 존재하지 않는 DepartmentId 값을 삽입하려고 시도하는 경우 외래 키 제약 조건으로 인해 이를 수행할 수 없습니다.

부서 두 개를 삽입해보자 "그것" 그리고 "기예" 다음과 같이 departments 테이블에 추가합니다.

INSERT INTO Departments VALUES(1, 'IT');
INSERT INTO Departments VALUES(2, 'Arts');

두 명령문은 두 부서를 부서 테이블에 삽입해야 합니다. 쿼리를 실행하여 두 값이 삽입되었는지 확인할 수 있습니다. “SELECT * FROM 부서” 이후:

SQLite 외래 키

그런 다음 부서 테이블에 없는 부서 ID를 가진 새 학생을 삽입해 보십시오.

INSERT INTO Students(StudentName,DepartmentId) VALUES('John', 5);

행이 삽입되지 않으며 다음과 같은 오류가 발생합니다. FOREIGN KEY 제약 조건이 실패했습니다.