Data Base Design System

Alter Table / Constraints

곽수진 2021. 11. 29. 18:33
반응형

ALTER TABLE ... ADD

: 테이블에 컬럼 추가

  → 생성된 테이블 구조에 새로운 컬럼을 추가

ALTER TABLE 테이블명
ADD 컬럼명 데이터형식;

 

여러 컬럼을 한 번에 추가하는 경우

ALTER TABLE 테이블명 
ADD 컬럼명 데이터형식, 컬럼명 데이터형식

OR

ALTER TABLE 테이블명 ADD 컬럼명 데이터형식;
ALTER TABLE 테이블명 ADD 컬럼명 데이터형식;

 

 

제약조건 (CONSTRAINTS)

  • 만약 종속성이 존재한다면 테이블의 삭제나 변경을 방지
  • 제약조건 정보는 INFORMATION_SCHEMA 데이터베이스의 TABLE_CONSTRAINTS 테이블에 저장되어 있음

 

▶ DEPT0 테이블의 제약조건 확인

 

 

  • 테이블에 제약 조건을 설정할 수 있음
ALTER TABLE 테이블 명
ADD CONSTRAINT 제약조건 이름 제약조건(컬럼명);

 

제약조건 1. UNIQUE

▶ STUDENT0 테이블의 제약조건 정보 확인

 

 

▶ STUDENT0 테이블의 SNAME 컬럼에 UNIQUE 제약조건을 가진 STD_UK_SNAME 제약 조건을 추가

 

 

▶ 제약조건을 추가한 후 STUDENT0 테이블의 제약조건을 확인해보면 정상적으로 추가되었음을 확인할 수 있음

 

 

▶ STUDENT0 테이블의 모든 정보 출력

 

 

▶ STUDNET0 테이블의 SNO, SNAME, SDEPT, GPA, STEL 컬럼에 순서대로 200811111, 'THOMAS', 10, 3.5, '010-3456-7512' 값을 삽입

 

 

▶ 동일한 테이블의 컬럼에 200811112, 'THOMAS', 20, 4.3, '010-8827-1324' 값을 추가하려고 하면 오류가 발생

  → STUDENT0 테이블에 SNAME 필드가 UNIQUE INDEX로 걸려있기 때문에 발생

 

 

제약조건 2. CHECK

▶ STUDENT0 테이블의 제약 조건 확인 

 

 

▶ STUDENT0 테이블에 STD_CK_GPA라는 CHECK 제약조건을 추가하되, GPA가 0 이상이고 4.5 이하여야 한다는 조건을 가짐

 

 

▶ STUDENT0 테이블의 제약조건을 확인하면 STD_CK_GPA가 새로 생겼음을 확인할 수 있음

 

 

▶ STUDENT0 테이블의 모든 정보를 출력

 

 

▶ STUDENT0 테이블의 SNO, SNAME, SDEPT, GPA, STEL 컬럼에 순서대로 200811113, 'SHACO', 10, 3.5, '010-5729-9082' 값을 삽입

 

 

▶ STUDENT0 테이블의 컬럼에 순서대로 200811114, 'TINA', 20, 4.6, '010-1234-5476' 값을 삽입하면 오류가 발생

  → GPA값이 0 이상 4.5 이하라는 조건을 가지지만 4.6으로 조건을 위반했기 때문에 발생

 

 

제약조건 3. FOREIGN KEY

▶ STUDENT0 테이블의 제약 조건 확인

 

 

DEPT0 테이블의 DNO 컬럼을 참고하여 STUDENT0 테이블에 FK_SDEPT라는 SDEPT 컬럼의 외래키 제약조건을 생성

 

 

▶ STUDENT0 테이블의 제약조건 정보를 확인해보면 제대로 생성되었음을 확인할 수 있음

 

 

▶ STUDENT0 테이블의 SNO, SNAME, SDEPT, GPA, STEL 컬럼에 200811115, 'NIKO', 10, 2.5, '010-3129-2947' 값을 삽입

 

 

▶ STUDENT 테이블의 200811116, 'KATELYN', 50, 4.3, '010-8176-1263' 데이터를 삽입하면 오류가 발생

→ STUDENT0 테이블의 외래키는 DEPT0 테이블의 DNO를 참고하여 STUDENT0 테이블의 SDEPT로 가져오는데, 삽입하려는 데이터는 50으로 DEPT0 테이블의 DNO 컬럼에 존재하지 않는 값이기 때문에 참고할 수 없어 발생

 

 

DEPT0 테이블의 DNO 값 참고

 

 

▶ STUDENT0 테이블의 제약조건을 확인해보면 알 수 있듯이, 이외에도 PRIMARY KEY, NOT NULL 등의 제약 조건이 존재함

 

 

CREATE TABLE ... CONSTRAINT

: 테이블 생성시 제약조건 추가

CONSTRAINT 제약조건 이름 제약 조건(컬럼명)

 

▶ PRIMARY KEY, CHECK 제약 조건을 가진 TEST 테이블 생성

 

 

▶ TEST 테이블의 제약조건을 확인해보면 정상적으로 생성되었음을 확인할 수 있음

 

 

ALTER TABLE ... CHANGE

: 테이블의 컬럼명 변경

ALTER TABLE 테이블명
CHANGE [기존 컬럼명] [변경할 컬럼명] [컬럼 타입];

 

▶ STUDENT0 테이블의 SDEPT 컬럼명이 SDEPTNO으로 변경됨

 

 

ALTER TABLE ... MODIFY

: 테이블의 컬럼타입 변경

ALTER TABLE 테이블명 MODIFY [컬럼명] [변경할 타입];
ALTER TABLE 테이블명 CHANGE [컬럼명] [컬럼명] [변경할 타입];

 

▶ STUDENTS0 테이블의 구조를 확인하면 STEL 필드의 타입이 정상적으로 변경되었음을 볼 수 있음

 

 

▶ STEL 필드의 이름과 타입을 동시에 변경

 

 

  • NOT NULL 제약조건 추가
ALTER TABLE 테이블명
MODIFY [컬럼명] [컬럼 타입] NOT NULL;

 

▶ STUDENT0 테이블의 STELNO 필드에 NOT NULL 제약조건을 추가

 

 

▶ STUDENT0 테이블의 구조를 확인해보면 NULL 값이 YES에서 NO로 변경되었음을 확인

 

 

ALTER TABLE ... DROP

  • 제약조건 삭제

      - FOREIGN KEY, CHECK

ALTER TABLE 테이블명
DROP 제약 조건 제약조건 이름;

 

 

      - PRIMARY KEY

ALTER TABLE 테이블명
DROP PRIMARY KEY;

 

 

      - UNIQUE

ALTER TABLE 테이블명
DROP INDEX 제약조건 이름

 

 

  • 컬럼 삭제
ALTER TABLE 테이블명
DROP COLUMN 컬럼명;

 

 

RENAME ... TO ...

: 테이블 명 변경

 

RENAME TABLE 기존 테이블명 TO 새 테이블명;

OR

ALTER TABLE 기존 테이블명 RENAME 새 테이블명;

 

STUDENT 테이블[새로운 테이블]STUDENT0 테이블[기존 테이블]동일함을 확인할 수 있음

 

 

DROP TABLE

: 테이블 삭제

DROP TABLE 테이블명;

 

▶ CTEST12 테이블의 정보 확인

 

 

▶ CTEST12 테이블 삭제

 

 

▶ 테이블 삭제 후 더이상 존재하지 않음을 확인할 수 있음

 

 


 

 

DEPT0 테이블에 DYEAR 컬럼을 추가해보자.
데이터 형식은 VARCHAR(10)으로 함.

 

▶ DEPT0 테이블의 모든 정보 출력

 

 

▶ DEPT0 테이블에 DYEAR 컬럼 추가

 

 

▶ DEPT0 테이블의 모든 정보를 출력해보면 컬럼이 정상적으로 추가되었음을 확인할 수 있음

 

 


 

 

DYEAR 컬럼에 DYEAR의 범위가 1960이상이고 2020 이하인 CHECK 제약 조건을 설정해보자.
제약 조건의 이름은 DEPT0_CK_DYEAR로 함

 

▶ DEPT0 테이블에 위 조건에 해당하는 DEPT0_CK_DYEAR 제약 조건을 설정

 

 

▶ DEPT0 테이블의 제약 조건을 확인해보면 정상적으로 생성되었음을 확인할 수 있음

 

 

 


 

 

DEPT0 테이블의 UNIQUE 제약 조건을 삭제 후 DEPT0 테이블의 전체 제약 조건을 확인해보자.

 

▶ DEPT0 테이블의 제약 조건을 확인

 

 

▶ DEPT0 테이블에서 UNIQUE 제약 조건 삭제

 

 

▶ DEPT0 테이블의 제약조건을 확인해보면 정상적으로 제거되었음을 확인할 수 있음

반응형

'Data Base Design System' 카테고리의 다른 글

Stored Program / Stored Procedure  (0) 2021.12.04
Delete  (0) 2021.11.28
update  (0) 2021.11.27
테이블 복사 및 데이터 복사  (0) 2021.11.24
Insert  (0) 2021.11.23