SQL 제약조건 Check & Default
Check
개발자가 정의하는 제약조건,
상황에 따라 다양한 제약조건 설정 가능
§ 형식
[ SQL> ~~~ 제약조건이름 check(범위지정 or 문자열 지정)]
- check(age >= 20 and age <= 65)
- check in('사원', '대리', '계장', '과장', ~)
#예제
▷ [ SQL> alter table b_prtest
add constraint b_prtest_ck_age check(age >= 20 and age <= 65);
SQL> insert into b_prtest values(3, '테스트', 123, '서울시 강남구');
1행에 오류:
ORA-02290: 체크 제약조건(TEST1.B_PRTEST_CK_AGE)이 위배되었습니다 ]
▶ [ SQL> insert into b_prtest values(3, '테스트', 23, '서울시 강남구');
1 개의 행이 만들어졌습니다. ]
Default
기본값을 설정해서 데이터 입력/미입력에 따라 편리하게 값을 저장할 수 있음
# 예제
▶ 고용일을 오늘날짜로 자동 저장
[ SQL> alter table b_prtest add (hiredate date default sysdate);
SQL> select * from b_prtest; ]
| ID | IRUM | AGE | ADDR | HIREDATE |
|---|---|---|---|---|
| 1 | 홍길동 | 20/01/03 | ||
| 2 | 홍길동 | 20/01/03 | ||
| 3 | 테스트 | 23 | 서울시 강남구 | 20/01/03 |
※ 고용일을 입력하지 않았던 로우에도 자동으로 값이 추가됨
# insert 활용 예제
▶ [ SQL> insert into b_prtest values(4, '테스트2', 34, '서울시', '2020-01-03');
SQL> insert into b_prtest values(5, '테스트3', 26, '대전 중구', sysdate);
SQL> insert into b_prtest values(6, '테스트4', 22, '부산시', default);
SQL> insert into b_prtest values(7, '테스트5', 27, '부산시', null); ]
※ default조건이 설정된 칸에 default를 입력하면 기본값(sysdate)이 저장됨
날짜값에 날짜함수 사용가능, null을 입력하면 데이터가 들어가지 않음
| ID | HIREDATE |
|---|---|
| 4 | 20/01/03 |
| 5 | 20/01/03 |
| 6 | 20/01/03 |
| 7 |
※ 데이터 입력 오류 예제
[ SQL> insert into b_prtest values(4, '테스트2', 34, '서울시');
1행에 오류:ORA-00947: 값의 수가 충분하지 않습니다]
※ 데이터 입력 유무와 상관없이( 값이 저장되지 않는 필드가 있더라도 )
insert로 값을 저장할 때는 필드의 개수와 순서를 정확히 맞춰야 함
§ insert의 또 다른 형식
[ SQL> insert into 테이블명(필드명1, 필드명2,,,,, 필드명n) values(값1, 값2,,,,값n) ]
1 : 1 대응 관계로 값이 저장됨
null을 허용하는 필드와 default제약조건 필드는 필드명 생략가능,
not null은 생략 불가
▶ [ SQL> insert into b_prtest(id,irum,age) values(8,'테스트8',43);
SQL> select id, hiredate from b_prtest where id=8; ]
| ID | HIREDATE |
|---|---|
| 8 | 20/01/03 |
※ default 필드(HIREDATE)에 값을 따로 설정하지 않았지만 기본값이 저장됨
default와 check 제약조건을 적절히 사용할 수 있다면 조금 더 편리하게 데이터를 저장할 수 있을 것입니다.