본문 바로가기

데이터베이스

데이터베이스 - 0416 무결성 제약 조건 종류

무결성 제약조건 종류

 

기본키(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