일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- Oracle SQL
- github
- JavaScript
- 과정평가형
- git
- HTTP Status 404
- Bootstrap
- Oracle DB
- jQuery
- group by
- 성적프로그램
- 제약조건
- HTTP Status 500
- CRUD
- SQL
- ||
- 답변형 게시판
- JSP
- sql developer
- rownum
- distinct
- tomcat
- alias
- Java
- HTML
- 모조칼럼
- 이클립스
- 부트스트랩
- 한글 인코딩
- oracle
초급의 끄적거림
[SQL] 제약조건 (constraint) 2 본문
[제약조건이 설정되지 않은 경우]
1) 제약조건이 설정되지 않은 테이블 생성하기
create table c_emp(
id number(5)
,name varchar2(25)
,salary number(7,2)
,phone varchar2(15)
,dept_id number(7)
);
2) id칼럼에 pk 제약조건 추가
⊙ alter table 테이블명 add constraint 제약조건이름 제약조건종류(필드명)
→ (필드명) : id 칼럼에 조건을 추가하는 것이기 때문에 (id)라고 넣어주면 됨
alter table c_emp add constraint c_emp_id_pk primary key(id); -- id칼럼의 조건 변경
select * from user_constraint where table_name='C_EMP'; -- c_emp라고 소문자로 검색시, 결과가 안 뜸
⊙ id칼럼에 pk 제약조건 추가한 후 아래의 요소를 삽입
insert into c_emp(id, name) values(1, '개나리');
insert into c_emp(id, name) values(1, '진달래');
insert into c_emp(id, name) values(1, '라일락');
⊙ '개나리'와 '진달래'의 id가 1로 겹치기 때문에 오류발생 (primary key가 들어가게 되면서 겹치는 id는 사용불가)
- 오류 보고 - ORA-00001: unique constraint (JAVA0514.C_EMP_ID_PK) violated ▶ 'unique constraint 을 위반' 했다
2) salary 칼럼에 check 제약조건
create table c_emp(
id number(5)
,name varchar2(25)
,salary number(7,2) constraint c_emp_salary_ch check (salary between 100 and 1000)
,phone varchar2(15)
,dept_id number(7)
);
insert into c_emp(id, name, salary) values(1, 'kim', 100);
insert into c_emp(id, name, salary) values(1, 'lee', 1000);
insert into c_emp(id, name, salary) values(1, 'park', 10000);
check (salary between 100 and 1000) | salary 를 입력할 때 100에서 1000 사이로만 입력하겠다는 것. |
insert into c_emp(id, name, salary) values(1, 'park', 10000); | |
오류 보고 - ORA-02290: check constraint (JAVA0514.C_EMP_SALARY_CH) violated ▶ salary의 범위가 100~1000인데 넘음 |
4) name 칼럼에 unique 제약조건
create table c_emp(
id number(5)
,name varchar2(25) constraint c_emp_name_uni unique
,salary number(7,2)
,phone varchar2(15)
,dept_id number(7)
);
insert into c_emp(name) values(1, 'kim', 100);
insert into c_emp(name) values('park');
insert into c_emp(name) values('park');
c_emp(name) values(1, 'kim', 100); |
오류 보고 -SQL 오류: ORA-00913: too many values 00913. 00000 - "too many values" ▶ 주어진 칼럼보다 더 많은 값이 주어짐 (name 만 원했는데 name 외의 것 존재) |
두 번째 c_emp(name) values('park'); |
오류 보고 - ORA-00001: unique constraint (JAVA0514.C_EMP_NAME_UNI) violated ▶ unique에 걸려서 겹치는 두번째 park 은 오류발생 |
5) dept_id칼럼에 foreign key 제약조건
create table c_emp(
id number(5)
,name varchar2(25)
,salary number(7,2)
,phone varchar2(15)
,dept_id number(7) constraint c_emp_dept_id_fk references dept(deptno)
);
insert into c_emp(name, dept_id) values('태평양',10);
insert into c_emp(name, dept_id) values('대서양',40);
insert into c_emp(name, dept_id) values('카리브',90);
<참고 dept>
10, '경리팀', '부산'
20, '연구팀', '대전'
30, '총무팀', '대구'
40, '전산팀', '인천'
c_emp(name, dept_id) values('카리브',90); |
오류 보고 -ORA-02291: integrity constraint (JAVA0514.C_EMP_DEPT_ID_FK) violated - parent key not found ▶ 부모클래스인 deptno가 10~40까지 밖에 없어서 90은 해당하지 않음 |
6. 제약조건 최종 결과값
drop table c_emp; -- 이미 저장되어 있을 수도 있기 때문에 수행
create table c_emp(
id number(5) primary key
,name varchar2(25) not null
,salary number(7,2) check(salary between 0 and 100)
,phone varcahr2(15) null
,dept_id number(7) references dept(deptno)
);
필드명 | 자료형 | 제약조건 | 설명 |
id | number(5) | primary key | 최대 99999까지 가능한 겹치지 않는 id |
name | varchar2(25) | not null | 25자까지의 문자열을 넣되 null값이 들어갈 수 없음 |
salary | number(7,2) | check(salary between 0 and 100) | 숫자 7자중 소수점 2자리 허용, 0~100까지의 수 |
phone | varchar2(15) | null | null값 허용 |
dept_id | number(7) | references dept(deptno) | 부모인 dept의 deptno를 참조함 |
7. 제약조건 목록 확인 (데이터 사전)
⊙ select * from user_constraints where 조건문;
select * from user_constraints where table_name='C_EMP';
'DB > Oracle' 카테고리의 다른 글
[SQL] 활용 연습 문제 (1) | 2019.07.22 |
---|---|
[SQL] 시퀀스 / distinct / 조건절 (0) | 2019.07.21 |
[SQL] Oracle SQL Developer 기본적인 사용법 (0) | 2019.07.20 |
[SQL] Oracle SQL Developer 설치 / 접속 (0) | 2019.07.20 |
[SQL] 제약조건 (constraint) 1 (0) | 2019.07.19 |