무결성 제약조건 종류
기본키(primary key) 제약
- 컬럼 값은 반드시 존재하며 유일해야함.
기본키(primary key) : unique + not null 결합
- 기본키는 그 데이터 행을 대표하는 컬럼으로서의 역할을 수행하여 다른 테이블에서 외부키들이 참조할 수 있는 키로서의 자격을 가지고 있다 -> 참조 무결성
- unique 제약 조건과 마찬가지로 기본치를 정의하면 자동으로 인덱스를 생성, 그 이름은 기본 키 제약 조건의 이름과 같다.
고유키(unique key) 제약
- 중복값 금지, 해당 컬럼은 유일한 값을 가짐.
- 데이터의 유일성 보장
- 중복되는 데이터가 존재할 수 없음
- 자동으로 인덱스 생성
- unique는 null 허용, primary key는 null 허용 안함
- unique는 하나의 테이블에 여러 개 가능, primary key는 하나만 존재
NOT NULL 제약
- null 값 금지
체크(check) 제약
- 해당 컬럼에 입력할 수 있는 값의 범위나 조건 지정
foreign key 제약
- 다른 테이블의 기본 키 또는 고유 키를 참조하는 제약
- 기본키를 참조하는 컬럼 or 컬럼들의 집합(외부키는 기본키나 유니크가 아니면 생성 제약)
- 외부키를 가지는 컬럼의 데이터 형은 외래키가 참조하는 기본키의 컬럼과 데이터 형이 일치해야 한다.(이를 어기면 참조 무결성 제약에 의해 테이블을 생성할 수 없음)
- 외부키에 의해 참조되고 있는 기본키 : 삭제 불가
- on update cascade 하면 기본키가 수정될 경우 외부키도 같이 수정해준다는 말
- on delete cascade 연산자와 함께 정의된 외부키의 데이터는 그 기본키가 삭제될 때 같이 삭제된다.
default 제약
- 데이터를 입력하지 않아도 지정된 값이 기본으로 입력
- default라고 값을 명시하면 기본값이 들어감
- 열이름이 명시되지 않으면 자동 기본값
- 값이 직접 명기되면 기본값 무시
테이블 생성
create table test_table(
id varchar2(10) primary key,
name varchar2(10) not null,
tel varchar2(10) unique,
age number(2) check(age between 18 and 65),
dept_cd char(2)
);
- id 컬럼은 중복된 값은 설정 불가능, null값 설정 불가능
- name 컬럼은 not null 제약으로 중복된 값 설정 가능, null 값은 설정 불가능
- tel 컬럼은 고유키(unique) 제약으로 중복된 값은 설정 불가능, null 값은 설정 가능
- age 컬럼은 check(조건) 제약으로 지정한 조건에 맞지 않는 값은 설정 불가능
(18 ~ 65) 사이의 숫자만 설정 가능
- dept_cd 컬럼은 외부 참조키 (FK) 제약으로 외부에 존재하는 dept_table이라는 테이블의 dept_cd에 설정되어 있는 값만 설정 가능
결과
Name Null? Type
----------------------------------------- -------- ----------------------------
ID NOT NULL VARCHAR2(10)
NAME NOT NULL VARCHAR2(10)
TEL VARCHAR2(10)
AGE NUMBER(2)
DEPT_CD CHAR(2)
데이터 삽입
insert into test_table values('SK2000_01', '김사장', '010-1234-5678', 55, 'D01_01');
tel 컬럼에 데이터 길이를 초과하여 데이터가 안들어감
그래서 alter로 테이블의 크기를 다시 설정해야함
alter table test_table modify tel varchar2(15);
alter table test_table modify dept_cd char(20);
tel 컬럼의 크기를 15로 늘림
dept_cd 크기를 20으로 늘림
이후 데이터를 넣으면
결과
ID NAME TEL AGE DEPT_CD
-------------------- -------------------- ------------------------------ ---------- ----------------------------------------
SK2000_01 김사장 010-1234-5678 55 D01_01
SK2000_11 김대표 010-2345-6789 54 D02_01
SK2000_03 유재석 010-3456-7890 47 D02_02
SK2020_04 홍경민 010-4567-8901 20 D01_01
SK2009_01 안유진 010-5678-9012 26 D01_02
SK2011_12 현진영 010-6789-0123 38 D03_01
SK2012_10 손석구 010-7890-1234 36 D04_01
SK2010_05 고민주 010-8901-2345 38 D02_01
SK2017_06 여진구 010-9012-3456 27 D03_01
Alter table문
컬럼 추가
테이블에 새로운 컬럼 추가, 새로운 제약조건 추가
alter table [테이블 이름] add [추가할 컬럼 이름] [자료형];
컬럼 수정
테이블 컬럼의 데이터 유형(또는 크기) 변경
alter table [테이블 이름] modify ([수정할 컬럼 이름] [자료형][default 관련][not null]);
default, not null 은 생략 가능
컬럼 삭제
테이블에서 컬럼 삭제, 제약조건 삭제
alter table [테이블 이름] drop column [삭제할 컬럼 이름];
컬럼 이름 변경
컬럼 이름 변경
alter table [테이블 이름] rename column [컬럼 이름] to [수정할 컬럼 이름];
테이블 이름 변경
테이블 이름 변경
alter table [테이블 이름] rename to [바꿀 이름];
modify 시 고려사항
- 해당 컬럼의 크기를 늘릴 수는 있지만 줄이지는 못한다.(기존 데이터 훼손 방지)
- 해당 컬럼이 null 값만 가지고 있거나 테이블에 아무 행도 없으면 컬럼의 폭을 줄일 수 있다.
- 해당 컬럼이 null 값만을 가지고 있으면 데이터 유형을 변경할 수 있다.
- 해당 컬럼의 default 값을 바꾸면 변경 작업 이후 발생하는 행 삽입에만 영향을 미치게 된다.
- 해당 컬럼에 null 값이 없을 경우에만 not null 제약 조건을 추가할 수 있다.
update set문
컬럼 데이터 변경
UPDATE [테이블] SET [열] = '변경할값' WHERE [조건];
2024.04.12 - [데이터베이스] - 데이터베이스 - 0412
데이터베이스 - 0412
테이블 생성 create table game27( 관리코드 varchar2(10), 게임명 varchar2(30), 분류 varchar2(30), 개발사 varchar2(30), 수익금 number(7), 만족도 varchar2(15), 서비스시작 varchar2(30), 서비스순서 varchar2(10) ); game27 테이
conewbie.tistory.com
'데이터베이스' 카테고리의 다른 글
데이터베이스 - 0501 (0) | 2024.05.01 |
---|---|
데이터베이스 - 0423 (1) | 2024.04.23 |
데이터베이스 - 0412 (1) | 2024.04.12 |
데이터베이스 04-09 (0) | 2024.04.09 |
데이터베이스 04-05 (0) | 2024.04.05 |