3. DDL(Data Definition Language)

- 직접 DB 테이블에 영향을 미치므로 입력 순간 auto commit 됨.


1) 테이블 생성 Create table

(1) 기본적인 테이블 생성

* 테이블 관리 SQL문

Create table

- 새로운 테이블을 생성
- 테이블을 생성할 떄 기본키 외래키 제약사항 등을 설정할 수 있음

Alter table

- 생성된 테이블 변경
- 칼럼 추가하거나 변경, 삭제 가능
- 기본키 설정, 외래키 설정 가능

Drop table

- 해당 테이블 삭제
- 테이블의 데이터 구조뿐만 아니라 저장된 데이터도 모두 삭제


 Create Table 테이블명(

속성명 데이터타입 NOT NULL Primary key,

속성명 데이터타입

);

 * 데이터 타입

Number : 숫자형 타입 Varchar(글자수) : 가변길이 문자 

char(글자수) : 고정길이 문자 date : 날짜형 타입

* 기본키 지정 : 속성 옆에 primary key 쓰기


* 테이블 구조 확인 : oracle - DESC 구문 사용. DESC 테이블명 ; 

sql server - exec sp_help 'dbo.테이블명; go;


(2) 제약조건 사용

- 기본키, 외래키, 기본값, Not null 등을 테이블 생성 시 지정 가능

Create Table 테이블명(

속성명1 number(10) NOT NULL,

속성명2 varchar(20),

속성명3 number(20,2),

속성명4 char(20),

속성명5 date default sysdate,

constraint 기본키이름 PRIMARY KEY (속성명1),

constraint 외래키이름 foreign key (속성명 4)

references 마스터테이블(이테이블의 기본키)

);

 * constraint : 키, 조건 등 제약조건의 이름을 지정

  기본키가 두개라면 constraint 기본키이름 primary key (속성명1, 속성명2)

 * number(20,2)  : 숫자 20자리 출력 가능하고 소수점 둘쨰자리까지 저장

 * sysdate : 시스템 날짜. 지금 현재 날짜 조회

 * default 옵션 : 기본값 설정

 * 외래키 설정 : 다른 테이블의 기본키를 자기자신의 외래키로 설정하는 것

  마스터테이블(참조하는 외래키가 기본키인 테이블)이 있어야 함

  마스터테이블을 참조한다고 아래에 써줌

* 제약조건

 PRIMARY KEY (기본키)

 - 고유한 식별자 기본키 정의 (하나의 테이블에 하나의 기본키)

 - 기본키 정의하면 DBMS는 자돵으로 UNIQUE 인덱스 생성. NULL 입력 불가능

 - 기본키 제약 = 고유키 제약 & NOT NULL 제약 

UNIQUE KEY (고유키) 

 - 테이블에 저장된 행 데이터를 고유하게 식별하기 위한 고유키

 - NULL값이 있어도 되는 제약 

 NOT NULL

 - NULL값의 입력 금지 

 CHECK

 - 입력할 수 있는 값의 범위 등을 제한.  

 - TRUE / FALSE로 평가할 수 있는 논리식 지정

 FOREIGN KEY (외래키)

 - 관계형 DB에서 테이블 간의 관계 정의하기 위해 기본키를 다른 테이블의 외래키로 복사

 - 지정시 참조 무결성 제약 옵션 선택 가능 


3) 테이블 생성 시 

(1) Create Table 테이블명(

속성명1 number(10) NOT NULL,

속성명2 varchar(20),

속성명3 number(20,2),

속성명4 char(20),

속성명5 date default sysdate,

constraint 기본키이름 PRIMARY KEY (속성명1),

constraint 외래키이름 foreign key (속성명 4)

references 마스터테이블(이테이블의 기본키)

ON Delete cascade

);


 * cascade 옵션

- 참조관계가 있을 경우 참조되는 데이터 자동 삭제

- on delete casdade : 자신이 참조하고 있는 테이블(마스터테이블)의 데이터가 삭제되면

 자동으로 자신도 삭제되는 옵션

 - 참조 무결성을 준수

 (2) select 구문을 통한 create

* oracle

Create Table 테이블명

As select 칼럼명 From 다른 기존  테이블명;

 

* SQL server 

select into 새로운 테이블명 from 다른 기존 테이블 명;

(1개 행이 영향 받음)


2) 테이블 변경 Alter table

(1) 테이블명 변경

oracle : Alter table 테이블명 rename to 새 테이블명;

SQL server : sp_renamer 'dbo.테이블명';


(2) 추가

① 칼럼 추가 : Alter table 테이블명 ADD (속성명 데이터타입 제약조건<생략가능> );

맨 마지막 칼럼으로 추가됨

② 제약 조건 추가 : Alter table 테이블명 ADD CONSTRAINT (속성명 데이터타입 ..);


(3) 칼럼 변경

- 칼럼 변셩 시 데이터타입, 길이, 제약조건 변경 가능

oracle : Alter table 테이블명 Modify (속성명 데이터타입 제약조건<생략가능>);

SQL server : Alter table 테이블명 Alter (속성명 데이터타입 제약조건<생략가능>);

- 칼럼 크기는 늘릴 수 있으나 줄이진 못함 (기존 데이터 훼손 방지)

- 데이터 타입 변셩시 기존 데이터 있으면 에러 발생


(4) 칼럼명 변경

oracle : Alter table 테이블명 Rename Column 기존 속성명 to 새 속성명;

SQL server : sp_rename 'dbo.테이블명.칼럼명';


(5) 칼럼 삭제

Alter table 테이블명 DROP Column 속성명;


3) 테이블 삭제 DROP Table

Drop Table 테이블명;

Drop Table 테이블명 CASDADE CONSTRAINT; : 참조된 제약사항도 모두 삭제하는 것


4) 뷰 생성과 삭제

- 뷰 : 테이블로부터 유도된 가상의 테이블


Create View 뷰이름 Select * from 원본테이블이름; create view 사용하고 참조하는 테이블을 select문을 사용하여 지정함

 특징

 장점

단점 

 - 실제 데이터를 가지고 있지 않고 테이블을 참조해 원하는
  칼럼만 조회 가능

 - 참조한 테이블이 변경되면 뷰도 변경됨

 - 뷰에 대한 입력, 수정, 삭제는 제약이 발생

 - 보안성 향상시킴

 - 생성된 뷰는 변경할 수 없고 삭제 후 재생성 해야 함

   (alter 불가능)

 - 보안기능

 - 데이터 관리가 간단

 - select 문이 간단

 - 하나의 테이블에 여러 뷰 생성 가능 

 - 독자적 인덱스를 만들 수 없음

 - 삽입, 수정, 삭제 연산이 제약됨

 - 데이터 구조 변경 불가능


+ Recent posts