-
SQL 제약조건 Check & DefaultData Base_Oracle/SQL 2020. 1. 4. 16:14
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 제약조건을 적절히 사용할 수 있다면 조금 더 편리하게 데이터를 저장할 수 있을 것입니다.
'Data Base_Oracle > SQL' 카테고리의 다른 글
SQL_Constraint Enable / Disable (0) 2020.01.06 SQL 제약조건 Foreign Key (0) 2020.01.04 SQL 제약조건 Primary Key & Unique (0) 2020.01.04 SQL 제약조건(Constraint) 종류 및 개요 (0) 2020.01.04 SQL DDL_Drop, Rename (0) 2020.01.04