본문 바로가기

DataBase/Oracle

[Oracle/오라클] 테이블 생성(Create Table), 삭제(Drop), 수정(Alter)

1. 테이블 생성

1-1. 테이블 생성

CREATE TABLE 테이블명
(컬럼1, 타입
,컬럼2, 타입 )

 

CREATE TABLE PROFESSORS 
(
  PCODE CHAR(3) NOT NULL 
, PNAME VARCHAR2(20) NOT NULL 
, DEPARTMENT VARCHAR2(30) 
, HIREDATE DATE NOT NULL 
, POSITION VARCHAR2(15) 
, SALARY NUMBER(10) 
, CONSTRAINT TABLE1_PK PRIMARY KEY (PCODE )
);

 

1-2. PK 설정

PK 설정은 2가지가 있다. 테이블을 생성할 때 설정해주냐, 테이블을 생성하고 설정해주냐이다.

위의 테이블생성에는 테이블을 생성할 떄 PK를 설정해주고 있다. 그렇다면 테이블 생성이후에 PK설정은 어떻게 하는지 알아보겠다.

 

ALTER TABLE 테이블명 ADD CONSTRAINT PK명 PRIMARY KEY (컬럼명)

 

ALTER TABLE PROFESSORS ADD CONSTRAINT PK_PCODE PRIMARY KEY (PCODE);

 

 

1-3.  테이블 설명

테이블에 관한 설명을 넣어줄 수도 있다.

 

COMMENT ON COLUMN PROFESSORS.PCODE IS '교수 번호';
                     .
                     .
                     .
COMMENT ON COLUMN PROFESSORS.SALARY IS '급여';

 

 

1-4. 명령어를 사용하지 않고 테이블 만들기

테이블 마우스 우클릭

 

테이블에 필요한 컬럼명, 데이터유형, PK설정, NULL체크, 설명 등을 입력해주고 테이블을 만들 수 있다. 

 

DDL을 눌러주면 생성하는 테이블의 명령문을 볼 수 있다.


2. 테이블 삭제

DROP TABLE 스키마.테이블명 CASCADE CONSTRAINTS

(CASCADE CONSTRAINTS를 붙이면 삭제할 테이블의 기본키와 UNIQUE 키를 참조하는 제약조건도 자동으로 삭제된다.)  --다른 테이블에 제약조건이 걸려있으면 삭제가 언될 수 있다.

 

DROP TABLE PROFESSORS;
DROP TABLE PROFESSORS PURGE;

 

테이블을 실수로 삭제했다면 ROLLBACK 을 통해 되돌릴 수 있다.

하지만 PURGE를 붙여서 삭제할경우 자동 COMMIT이 되기 때문에 ROLLBACK을 통해 되돌릴 수 없다.


 

3. 테이블 수정

3-1. 컬럼 추가

ALTER TABLE 테이블명 ADD (컬럼명 타입)

 

ALTER TABLE PROFESSORS ADD (SUM_SAL NUMBER)

 

3-2. 컬럼 타입 변경

ALTER TABLE 테이블명 MODIFY (컬렴명 타입)

 

ALTER TABLE PROFESSORS MODIFY (SUM_SAL NUMBER(8));

 

3-3. 컬럼명 변경

ALTER TABLE 테이블명 RENAME COLUMN 변경전컬럼명 TO 변경후컬럼명

 

ALTER TABLE PROFESSORS RENAME COLUMN SUM_SAL TO SUM_SAL2

 

3-4. 컬럼 삭제

ALTER TABLE 테이블명 DROP COLUMN 컬럼명

 

ALTER TABLE PROFESSORS DROP COLUMN SUM_SAL2

 

4. 테이블 복사

CREATE TABLE 테이블명

AS SELECT 컬럼명, 컬럼명

          FROM 복사할 테이블명

 

CREATE TABLE PROFESSORS
AS SELECT * 
     FROM PROFESSORS2;
 
 --------------------------
CREATE TABLE PROFESSORS  
AS 
SELECT D.DEPTNO                  //서브쿼리르 사용해 복사가능
  FROM DEPT D                    //복사할 컬럼명을 명시해줘야함(*쓰면안됨)
      ,EMP  E  
 WHERE D.DEPTNO = E.DEPTNO ;