우잉's Development

SQLite3_Table 2_제약 조건2 본문

개발/SQLite3

SQLite3_Table 2_제약 조건2

우잉이 2021. 12. 29. 11:34
728x90
반응형

1. NOT NULL 제약조건

NOT NULL : 해당 열에 NULL값을 저장할 수 없는 조건.

CREATE TABLE 테이블명 ( 컬럼명 데이터타입 NOT NULL, ...)

name 의 타입은 text이고 제약조건을 not null을 주어졌고 address의 타입도 text지만 not null의 제약조건은 설정하지 않았습니다. 

그래서 insert into user values('han', null); 을 수행 할 때는 error가 없었지만, insert into user values(null, 'Busan');을 수행 할 때는 name이 not null조건으로 error가 발생합니다. 그 밑에 insert into user(address) values ('Daejun'); . 또한, name이란 컬럼에 지정을 하지 않아 null값으로 들어가기 때문에 error가 발생합니다.

 

따라서 데이터를 추가 할 때에 반드시 값이 설정될 필요가 있는 컬럼에는 NOT NULL 제약조건을 하도록하자.

 

2. UNIQUE 제약조건

UNIQUE : 대상의 컬럼에 중복된 값이 저장될 수 없게 하는 제약조건

CREATE TABLE 테이블명 ( 컬럼명 데이터타입 UNIQUE, ... )

id를 unique 제약조건을 걸면 중복이 될수 없으므로 insert into user values(2, 'cho');는 error가 발생한다. 

id = 2인 'han'이 있긴 때문이다.

그러면 과연 null값은 어떨까?

id에 null값을 데입하여 insert해 본 결과 error도 발생하지 않고 user테이블을 조회 한 결과 아무값도 안들어간 것을 볼 수 있습니다.

 

3. DEFAULT 제약 조건

DEFAULT : 데이터를 추가 할 때 값을 생략할 시에 기본값을 설정 

CREATE TABLE 테이블명 (컬럼명 데이터타입 DEFAULT 값, ... );
# 기본값은 NULL, 숫자, 문자열 지정 할 수있다.

product 테이블에 id, name, price컬럼이 있다. name컬럼에 default값을 no name으로 price컬럼에는 default값을 0으로 주었다. 따라서, 데이터를 추가할 때 name값이 생략될 시 no name으로 price값이 생략되어있을 시 0으로 설정한다는 의미이다.

위에서 네번째 줄에 있는 insert into product (id, price) values (6, 18000);에서 name값이 생략되어 있습니다. 조회해보면 그 값이 no name으로 출력된 것을 확인할 수 있습니다.

 

DEFAULT 제약조건에 지정된 기본 값으로 다음 값을 지정 하면 데이터를 추가 했을 때 그 당시의 날짜와 시간을 가져 디폴트 값으로 컬럼 가능 할 수 있다. 시간대는 UTC이다.

지정값 형식
CURRENT_TIME HH:MM:SS
CURRENT_DATE YYYY-MM-DD
CURRENT_TIMESTAMP YYYY-MM-DD HH:MM:SS

4. CHECK 제약 조건

CHECK :  데이터를 추가 할 때 값이 지정된 조건을 충족하는지 여부를 확인 할 수 있는 조건

CREATE TABLE 테이블명 ( 컬럼명 데이터타입 CHECK (조건식), ... )

#여러 컬럼 조합시
CREATE TABLE 테이블명 ( 컬럼명1, 컬럼명2, ..., CHECK(조건식));

old 컬럼을 check (old > 18)로 제약조건을 설정해 주었다. 그럼 kim 과 lee 데이터는 추가가 잘되지만 old가 18보다 적음 han은 추가하면 error가 발생한다.

( and 와 or 조건도 가능하다. )

 

 

여기까지 제약조건을 알아보았다. 다음시간에는 View 뷰에 대해 알아보도록 하겠습니다!

 

728x90
반응형

'개발 > SQLite3' 카테고리의 다른 글

SQLite3_Index 인덱스  (0) 2021.12.31
SQLite3_View 뷰  (0) 2021.12.29
SQLite3_Table 2_제약 조건1  (0) 2021.12.28
SQLite3 _ Table 1  (0) 2021.12.28
SQLite 기본 명령어 사용하기  (0) 2021.12.28
Comments