반응형
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 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 | /* 제약조건 : 데이터 저장 시 저장가능한 조건이 존 무결성 제약조건 = 컬럼 속성 NOT NULL : 널값이 입력되지 못하게하는 조건 UNIQUE : 중복된 값이 입력되지 못하게하는 조건 (NULL값 허용가능) PRIMARY KEY : NOT NULL + UNIQUE의 의미 : 데이터 식별 시 유일성을 가짐 FOREIGN KEY (외래키) : 다른테이블 칼럼 참조해서 무결성을 검사하는 조건 CHECK : 주어진값만 허용하는 조건 */ /* NULL : 데이터가 없음을 의미 */ create table null_test( col1 varchar2(20) not null, col2 varchar2(20) null, col3 varchar2(20) ); desc null_test; insert into null_test (col1,col2) values ('aaa','bb'); select * from null_test; /* col1이 not null이므로 에러발생 */ insert into null_test (col2,col3) values ('cc','dd'); /* Unique */ create table unique_test( col1 varchar2(20) unique not null, col2 varchar2(20) unique, col3 varchar2(20) not null, col4 varchar2(20) not null, constraints temp_unique unique(col3,col4) ); /* constraints : 강제로 제약을하겠다는 의미 : col3과 col4을 조합한 값을 unique로 사용하겠다는 의미 : temp_unique는 unique의 이름 */ insert into unique_test (col1,col2,col3,col4) values ('aa','bb','cc','dd'); insert into unique_test (col1,col2,col3,col4) values ('a2','b2','c2','d2'); select * from unique_test; /* 무결성제약조건 위배 : col1의 값은 unique해야하는데 이미 aa가 존재하므로 에러 */ update unique_test set col1 = 'aa' where col2 = 'b2'; /* Unique는 null을 허용하므로 에러없음 */ insert into unique_test (col1,col2,col3,col4) values ('a3','','c3','d3'); insert into unique_test( col1,col2,col3,col4) values ('a4','','c4','d4'); /* Primary Key : 기본키 (null허용하지 않음) */ /* 테이블 생성 시 기본 키 생성방법 */ create table primary_test( student_id number(10) primary key, /* 인라인 방식 */ name varchar2(20) ); create table primary_test( student_id number(10), name varchar2(20), constraints student_pk primary key(student_id) /* 아웃라인 방식 */ ); /* 인라인, 아웃라인 차이 primary key의 이름을 명시하느냐 오라클에서 자동으로 생성하느냐의 차이 */ desc primary_test; /* 테이블 생성 후 기본키 생성방법 */ alter table primary_test add constraints "기본키 이름" primary key(필드명); /* FOREIGN KEY : 외래키 : 부모테이블이 존재해야 자식테이블에서 외래키 사용 가능 */ create table foreign_key( department_id constraints dept_fk references departments (department_id) /* 인라인 */ ); create table foreign_key( department_id constraints dept_fk foreign key (department_id) references departments(department_id) /* 아웃라인 */ ); /* 테이블을 생성하고 나서 외래키를 지정하는 방법 */ alter table foreign_key add constraints dept_fk foreign key (department_id) references departments(department_id); /* 자식테이블에서 사용하지 않은 값은 부모테이블에서 삭제 가능 */ /* Check : 입력값을 체크해서 조건에 해당하지 않으면 입력불가 */ create table check_test( gender varchar2(10) not null constraints check_sex check(gender in('M','F')) ); create table check_test( gender varchar2(10) not null constraints check_sex check(gender in('남성','여성')) ); /* 체크 제약조건에 위배되므로 에러 */ insert into check_test values('남자'); insert into check_test values('여성'); select * from check_test; | cs |
반응형
'프로그래밍 > SQL' 카테고리의 다른 글
[Oracle SQL] Sequence (0) | 2017.08.16 |
---|---|
[Oracle SQL] VIEW (0) | 2017.08.16 |
[Oracle SQL] INSERT, UPDATE, DELETE, COMMIT, ROLLBACK (0) | 2017.08.10 |
[Oracle SQL] CREATE, ALTER, DROP, TRUNCATE (0) | 2017.08.10 |
[Oracle SQL] SubQuery 서브쿼리 (0) | 2017.08.10 |