Database

Table

kmhello 2023. 3. 19. 20:40

1. 데이터 베이스 제약조건 이란?

- 데이터의 무결성을 지키기위한 규칙

    (데이터의 무결성 : 데이터의 정확성, 일관성, 유효성이 유지되는 것)

- 테이블을 수정 작업 하는 경우, 잘못된 트랜잭션 수행 방지

- 테이블 간 제약조건이 있어서 종속성이 있는 경우 , 테이블 삭제를 방지함. 

 

2. 제약 조건의 종류

1. PRIMARY KEY (PK)

  - 레코드의 값을 식별할 수 있는 단 하나의 키

  - 테이블 생성 시, 고유의 단 한 개의 PK 설정

  - 중복 불가, NULL 불가

  - 고유 인덱스 자동 생성

  - 여러 컬럼을 하나의 PK로 생성 가능 

  - 장점  > 데이터 일관성 유지

             > 데이터 모호함 제거

             > 중복 행으로 인한 데이터 꼬임 방지

             > 레코드 검색으로 빠르게 원하는 데이터를 찾을 수 있음

 

 

 

2. FOREIGN KEY (FK)

  - 한 테이블을 다른 테이블과 연결해주는 역할 

  - 테이블 간의 잘못된 매핑을 방지하는 역할

  - FK를 선언한 테이블이 하위 테이블이 된다.

  - 중복성을 제거하기 위해 참조하는 컬럼의 데이터 타입이 일치해야하며, PK와 Unique만 참조 가능

  - 외래키에 의해 참조되고 있는 기본키는 삭제 불가

  - 테이블 동작의 종류

    > ON DELETE + 동작 : 참조되는 테이블의 값이 삭제될 경우 동작

    > ON UPDATE + 동작 : 참조되는 테이블의 값이 수정될 경우 동작

    > CASCADE : 참조하는 테이블에서도 삭제와 수정이 같이 이루어짐

    > SET NULL : 참조하는 테이블의 데이터는 NULL로 변경

    > NO ACTION : 참조하는 테이블의 데이터는 변경 X

    > SET DEFAULT : 참조하는 테이블의 데이터는 필드의 기본값으로 설정

    > RESTRICT : 참조하는 테이블에 데이터가 남아 있으면, 참조되는 테이블의 데이터 삭제 X

 

3. UNIQUE

  - 고유키

  - 중복된 값을 허용하지 않지만, 여러개의 NULL값 허용

  - 고유 인덱스 자동 생성

 

4. NULL / NOT NULL

  - 해당 컬럼의 NULL 값 허용 여부 설정

 

5. DEFAULT

  - 해당 컬럼에 기본값 설정

 

6. CHECK

  - 데이터의 점검을 하는 제약조건 

 

 

7. TABLE 생성

CREATE TABLE 테이블명

( 컬럼 타입 (크기) NOT NULL 널값이 들어갈 수 없음 

  영어 1바이트, 한글 3바이트

  타입 바로 옆에 PRIMARY KEY 라고 설정할 수 있지만 이름을 설정하지 못함. (이름은 따로 설정)

 , 컬럼 타입 DEFAULT 초기값 지정

, CONSTRAIN PK명PRIMARY KEY(컬럼)   

                 // heidiSQL은 PK명을 따로 적어도 지정이 안돼서 그냥 pk지정할 때 옆에다 PIMARY KEY 적으면 됨

, CONSTRAIN FK명 FOREIGN KEY (컬럼) REFERENCE 참조테이블 (참조컬럼)

, CONSTRAIN UNIQUE 명 UNIQUE (컬럼)

, CONSTRAIN CHECK명 CHECK (조건)

);

 

8. TABLE 변경

  - 컬럼 추가

     : ALTER TABLE 테이블명 ADD COLUMN 컬럼 데이터타입;

  - 컬럼 데이터 타입 변경

     : ALTER TABLE 테이블명 ALTER COLUMN 컬럼 데이터타입;

  - 컬럼 삭제 

      : ALTER TABLE 테이블명 DROP COLUMN 컬럼;

 

9. TABLE 삭제

- DROP TABLE 테이블명 ; 

 

10. TABLE DATA 삭제 

- TRUNCATE TABLE 테이블명;

 

* DELETE, DROP, TRUNCATE *

 - DELETE 후에는 데이터만 지워지고 쓰고 있던 디스크 상의 공간은 그대로 가지고 있음.

   DELETE는 원하는 데이터만 골라서 삭제가 가능하고, ROLLBACK을 하면 다시 데이터를 살릴 수 있다.

  - TRUNCATE는 데이터가 1건도 없는 상태로 모든 데이터를 삭제하고 컬럼만 남아있음. 

    TRUNCATE는 용량도 줄고 인덱스도 모두 삭제 

  - DROP은 데이터와 테이블 전체를 삭제

    DROP은 사용하고 있던 공간도 모두 반납하고 인덱스나 제약조건 등 오브젝트로 삭제 

      * TRUNCATE, DROP은 삭제하면 ROLLBACK해도 데이터를 다시 살릴 수 없기 때문에 조심해서 사용해야함!!