-
[SQLite] 기본키 (Primary Key)Software/SQLite 2017. 9. 16. 16:49반응형
Table 내 동일 한 레코드가 입력되는 경우 이를 구분해 줄 수 있는 식별자를 만들어 사용하는 데 이 식별자를
기본키 (Primary key) 라고 한다. 이 기본키는 각 테이블마다 단 하나씩만 설정할 수 있다. 그리고 아래와 같은 조건들을 만족해야 한다.
기본키(Primary key)의 조건
유일성 (Uniqueness)
- 기본키를 구성하는 컬럼은 테이블에서 레코드를 식별할 수 있도록 유일해야 함
최소성 (Minimality)
- 유일성을 만족하는 한도 내에서 최소한의 컬럼(하나 이상)으로 구성되어야 함
개체 무결성(Entity integrity)
- 기본키가 가지고 있는 값의 유일성이 보장받아야 함.
(컬럼 값이 NULL인 경우는 값이 지정된 것이 아니기 때문에 기본키로 사용 불가)
- 기본키가 가지고 있는 값의 유일성이 보장받아야 함.
기본키(Primary key) 생성
- SQLite3에서 기본키는 CREATE TABLE 구문을 통해서 생성 가능하며, PRIMARY KEY라는 키워드를 명시적으로 지정해야 한다.
- CREATE TABLE [TABLE NAME] ( [FIELD NAME] [자료형] PRIMARY KEY );
- 이제 기본키를 생성하는 방법을 알았으니 이전에 만들었던 carBrand table에 기본키를 생성해 보도록 하자.
sqlite> CREATE TABLE carBrand(
...> brand_id INTEGER PRIMARY KEY,
...> brandName TEXT
...> );
sqlite> INSERT INTO carBrand
...> VALUES (1, 'Hyundai');
sqlite> INSERT INTO carBrand
...> VALUES (2, 'Kia');
sqlite> INSERT INTO carBrand
...> VALUES (3, 'BMW');
sqlite> INSERT INTO carBrand
...> VALUES (4, 'Benz');
sqlite> INSERT INTO carBrand
...> VALUES (5, 'Audi');
sqlite> INSERT INTO carBrand
...> VALUES (1, 'Ford');
Error: UNIQUE constraint failed: carBrand.brand_id
sqlite> SELECT * FROM carBrand;
brand_id brandName
---------- ----------
1 Hyundai
2 Kia
3 BMW
4 Benz
5 Audi
- 사실 carBrand 테이블의 기본키인 brand_id의 경우 단순 INTEGER 형태의 숫자로 숫자 그 자체로서 가지고 있는 의미는 크지 않다. 즉 유일성만 유지될 수 있는 INTEGER 값이기만 하면 아무런 문제가 없는 이러한 경우를 위해 SQLite3에서는 기본키가 INTEGER형인 경우 자동으로 증가하도록 정의할 수 있다.
- 설정 방법은 기본키 뒤에 AUTOINCREMENT를 추가하는 것이다. 그럼 이 설정이 적용되어 있는 carBrand 테이블을 다시 생성해 보도록 하겠다.
sqlite> CREATE TABLE carBrand(
...> brand_id INTEGER PRIMARY KEY AUTOINCREMENT,
...> brandName TEXT
...> );
- AUTOINCREMENT이 설정되어 있는 경우 'Hyundai'처럼 명시적으로 기본키 값을 입력할 수도 있고
- 'Kia' 나 'Benz', 'Audi' 처럼 생략할 수도 있다. 그리고 기본키 값이 자동 증가하는 경우에는 현재 테이블에서 입력된 기본키 값 중 가장 큰 값을 기준으로 1 증가된 값이 입력된다. 아래의 예시의 경우 'BMW' 레코드 값을 입력할 때 명시적으로 기본키 값을 10으로 입력하였기 때문에 그 뒤에 자동 증가되는 기본키 값은 11이 된다.
sqlite> INSERT INTO carBrand
...> VALUES(1, 'Hyundai');
sqlite> INSERT INTO carBrand(brandName)
...> VALUES('Kia');
sqlite> INSERT INTO carBrand
...> VALUES(10, 'BMW');
sqlite> INSERT INTO carBrand(brandName)
...> VALUES('Benz');
sqlite> INSERT INTO carBrand(brandName)
...> VALUES('Audi');
sqlite> SELECT * FROM carBrand;
brand_id brandName
---------- ----------
1 Hyundai
2 Kia
10 BMW
11 Benz
12 Audi
합성키 (Composite key)
- 기본키를 하나의 컬럼으로만 지정하여 사용할 수도 있고 2개 이상의 컬럼을 합쳐서 사용할 수도 있다. 이것을 바로 합성키(Composite key)라고 한다.
sqlite> CREATE TABLE driver(
...> name TEXT,
...> car TEXT,
...> PRIMAY KEY(name, car));
- driver 테이블의 경우 name과 car 컬럼 두 개를 합쳐서 사용하는 composite key를 두고 있는데 이 경우 두 컬럼이 모두 같은 경우에만 서로 같은 레코드라고 판단한다.
반응형'Software > SQLite' 카테고리의 다른 글
[SQLite] 중첩 질의 (Nested query) (0) 2017.11.27 [SQLite] 외래키 (Foreign Key) (0) 2017.10.15 [SQLite] 관계형 데이터베이스 (0) 2017.09.02 [SQLite] 그룹화 (1) 2017.08.21 [SQLite] 내장함수 - 2 (0) 2017.08.20 댓글