본문 바로가기

Database

[Oracle] DDL 과 DML (INSERT, UPDATE, DELETE)

 

DDL (Data Definition Language)

한번 선언하면 끝, 트랜잭션 대상x 롤백이 안된다.



-테이블 생성

CREATE TABLE [테이블 이름] (
    컬럼명1 데이터형,
    컬럼명2 데이터형,
    컬럼명3 데이터형
}



데이터형(자료형)



-문자형 : CHAR(size) , VARCHAR2(size) 
=>CHAR 형은 고정형,  VARCHAR2 형은 가변형 

-숫자형 : NUMBER, NUMBER(w), NUMBER(w, d)

-날짜형 : DATE, TIMESTAMP
=> 디테일은 TIMESTAMP

-대용량 : (이미지, 파일) : LOB, BLOB



테이블 복사

 

CREATE TABLE emp01
        AS SELECT * FROM employees;  (기존 데이터 내용 포함)


테이블 구조 복사


CREATE TABLE emp02
        AS SELECT * FROM employees where 1=0;



테이블 구조 수정


-컬럼추가 
-> ALTER TABLE emp02
        ADD(job VARCHAR2(50));


*컬럼 수정
-> ALTER TABLE emp02
        MODIFY(job VARCHAR2(100));


*컬럼 삭제
-ALTER TABLE emp02
        DROP COLUMN job;


*테이블 삭제
-> DROP TABLE emp02 PURGE;


*테이블 데이터 삭제
-> TRUNCATE TABLE emp01;   => DDL(트랜잭션 적용 불가능)
-> DELETE FROM emp01;        => DML(트랜잭션 적용 가능)


*테이블 이름 변경
-> RENAME emp01 TO emp00;



DML (Data Manipulation Language)

 

데이터 조작어, INSERT, UPDATE, DELETE, SELECT


INSERT


->INSERT INTO dept01 VALUES(300, 'Developer', 100, 10);
->INSERT INTO dept01(department_id, department_name) VALUES(600, 'Developer2'); 


UPDATE


->UPDATE 테이블명 SET 컬럼명 = 수정값, 컬럼명2= 수정값.. 
    WHERE 수정대상 ( WHERE로 수정대상을 지정안하면 모든값이 바뀐다..)
->UPDATE dept01 SET department_name = 'IT Service'
    WHERE department_id = 300;



emp01 테이블에서 salary 3000 이상 대상자에게 salary에 10% 임금인상
-> UPDATE emp01 SET SALARY = SALARY*1.1 WHERE SALARY >= 3000;


DELETE


-> DELETE FROM 테이블명 WHERE 삭제대상 (WHERE로 삭제대상 반드시 지정)

dept01 테이블에서 부서이름 'IT Service' 값을 가진 로우 삭제
->DELETE FROM dept01 WHERE DEPARTMENT_NAME = 'IT Service';