DDL(Data Definition Language)
자동으로 커밋됨(명령어가 실패해도 커밋댐;; 걍 커밋광공임)
ex) DELECT(DML)는 롤백이 되는데, TRUNCATE(DDL)는 롤백안댐
정의
데이터 타입
데이터베이스의 테이블에 특정 자료를 입력할 때, 그 자료를 받아 들일 공간을 자료의 유형별로 나누는 기준
이름 | 비고 |
CHAR(size) | 고정 길이 문자 데이터. VARCHAR2와 동일한 형태의 자료를 저장할 수 있고, 입력된 자료의 길이와는 상관없이 정해진 길이만큼 저장 영역 차지. 최소 크기는 1 |
VARCHAR2(size) | Up to 2000 Bytes 가변 길이 문자 데이터. 실제 입력된 문자열의 길이만큼 저장 영역을 차지. 최대 크기는 명시해야 하며, 최소 크기는 1 |
NUMBER | Internal Number Format 최고 40자리까지의 숫자를 저장할 수 있습니다. 이때 소수점이나 부호는 길이에 포함되지 않는다. |
NUMBER(w) | W자리까지의 수치로 최대 38자리까지 가능하다. (38자리가 유효 숫자이다.) |
NUMVER(w, d) | W는 전체 길이, d는 소수점 이하 자릿수이다. 소수점은 자릿수에 포함되지 않는다. |
DATE | BC 4712년 1월 1일~AD 4712년 12월 31일까지의 날짜 |
LONG | 가변 길이의 문자형 데이터 타입, 최대 크기는 2GB |
LOB | 2GB까지의 가변 길이 바이너리 데이터를 저장시킬 수 있습니다. 이미지 문서, 실행 파일을 저장할 수 있습니다. |
ROWID | ROWID는 Tree-piece Format을 갖음. ROWID는 DB에 저장되어 있지 않으며, DB Data도 아니다. |
BFILE | 대용량의 바이너리 데이터를 파일 형태로 저장 최대 4GB |
TIMESTAMP(n) | DATE 형의 확장된 형태 |
INTERVAL YEAR TO MONTH | 년과 월을 이용하여 기간을 저장 |
INTERVAL DAY TO SECOND | 일, 시, 분, 초를 이용하여 기간을 저장 두 날짜 값의 정확한 차이를 표현하는데 유용하다. |
INTERVAL DAY(일수에 대한 자릿수) TO SECOND(초에 대한 자릿수)
INTERVAL YEAR(년도에 대한 자릿수) TO MONTH(달에 대한 자릿수)
=>자릿수를 지정해주지 않으면 디폴트값은 2자리
CREATE TABLE : 테이블 생성
새롭게 테이블 생성하기
CREATE TABLE 테이블명 (
칼럼명1 데이터타입 [디폴트 형식],
칼럼명2 데이터타입 [디폴트 형식],
칼럼명3 데이터타입 [디폴트 형식]);
기존 테이블을 복제 생성하기
CREATE TABLE 생성할 테이블명
AS
SELECT 칼럼명 FROM 복제할 테이블명
WHERE절로 원하는 행만 선택해서 복사생성 할 수 있다.
(WHERE 0=1 을 적어주면 구조만 복사해올 수 있다.)
변경
ALTER TABLE
-ADD COLUMN절 : 새로운 칼럼 추가
ALTER TABLE 테이블명
ADD (추가할 컬럼명, 데이터타입);
-MODIFY COLUMN절 : 기존 칼럼 수정
ALTER TABLE 테이블명
MODIFY (수정할 컬럼명, 데이터타입);
-DROP COLUMN절 : 기존 칼럼 삭제
ALTER TABLE 테이블명
DROP COLUMN 삭제할 칼럼명;
RENAME : 테이블의 이름을 변경
RENAME 기존의 테이블명 TO 변경할 테이블명
삭제
SET UNUSED : 사용량이 적은 시간에 삭제할 수 있도록 컬럼을 미사용으로만 표시해 두는 용도.(데드락 방지)
사용을 논리적으로 제한함(실제로는 삭제X).
*데드락 : 삭제가 진행되는 시점에서 다른 사용자가 DML명령어로 접근한다면 락이 걸림
(다른 사용자가 다시 ROLLBACK 해줘야됨)
<컬럼 사용 제한>
ALTER TABLE 테이블명
SET UNUSED(컬럼명);
<실제 삭제 진행>
ALTER TABLE 테이블명
DROP UNUSED COLUMNS;
DROP TABLE : 테이블 삭제
DROP TABLE 테이블명;
TRUNCATE : 테이블의 데이터를 삭제(구조만 남음) =>자동커밋되므로 롤백 불가능
TRUNCATE TABLE 테이블명;
데이터 딕셔너리 뷰
데이터 딕셔너리는 조회가 불가능하므로, 데이터 딕셔너리 뷰를 제공한다.
(제약 조건 정보 확인 가능)
USER _XXXX : 내가 만든 자료만 조회
ALL_XXXX : 내가 만든 거+ 권한을 부여받은 거 조회
DBA_XXXX : DB에 있는 모든 정보를 조회 (DBA 사용자 권한을 가져야 함)
DML(Data Manipulation Language)
INSERT 문 : 테이블에 새로운 데이터를 입력(순서, 개수, 타입에 맞게 입력해줌)
모든 칼럼에 값을 넣어줄 때는 칼럼명을 생략해 주어도 된다.
INSERT INTO 테이블명 (칼럼1, 칼럼2, 칼럼3)
VALUES(값1, 값2, 값3);
NULL값 삽입
저장하려는 칼럼의 값만 입력해준다.
INSERT INTO DEPT01 (DEPTNO, DNAME)
VALUES (30, 'SALES');
NULL 혹은 ' '를 사용해 입력해준다.
INSERT INTO DEPT01
VALUES (40, '', NULL);
서브쿼리로 데이터 삽입
INSERT INTO sam01
select empno, ename, job, sal
from emp
where deptno =10;
INSERT ALL : 서브쿼리의 결과를 여러 테이블에 동시에 입력
서브쿼리의 컬럼명과 데이터가 입력되는 테이블의 컬럼명이 같아야 한다.
EMP_HIR테이블의 칼럼들과 EMP_MGR테이블의 칼럼들에 한번에 값을 넣는 예제
INSERT ALL
INTO EMP_HIR VALUES(EMPNO, ENAME, HIREDATE)
INTO EMP_MGR VALUES(EMPNO, ENAME, MGR)
SELECT EMPNO, ENAME, HIREDATE, MGR
FROM EMP
WHERE DEPTNO=20;
조건(WHEN)을 넣어줄 수도 있다.
INSERT ALL
WHEN HIREDATE > '1982/01/01' THEN
INTO EMP_HIR02 VALUES(EMPNO, ENAME, HIREDATE)
WHEN SAL >2000 THEN
INTO EMP_SAL VALUES(EMPNO, ENAME, SAL)
SELECT EMPNO, ENAME, HIREDATE, SAL
FROM EMP;
UPDATE문 : 테이블에 저장된 데이터를 수정
UPDATE 테이블명
SET 컬럼1 = 값1, 컬럼2 = 값2,...
WHERE 조건;
(조건절이 없는 경우 모든 행이 수정된다.)
서브쿼리를 이용해 한번에 묶어서 변경해 줄수도 있다.
UPDATE DEPT01
SET (DNAME, LOC) = (SELECT DNAME, LOC
FROM DEPT
WHERE DEPTNO=40)
WHERE DEPTNO=20;
DELETE 문 : 테이블에 저장된 데이터를 삭제 =>롤백 가능
DELETE FROM 테이블명
WHERE 조건;
(조건절이 없는 경우 모든 행이 삭제된다.)
MERGE : 구조가 같은 두개의 테이블을 하나의 테이블로 합쳐준다.
조건에 따라 INSERT, UPDATE, DELETE를 한번에 수행
MERGE INTO 변경할 테이블명
USING 비교할 테이블명
ON 조건문
WHEN MATCHED THEN =>조건을 만족할 경우
UPDATE SET (컬럼명 = 값, ...
DELETE
WHEN NOT MATCHED THEN =>조건을 만족하지 않을 경우
INSERT VALUES (칼럼명,...
MERGE INTO EMP01
USING EMP02
ON(EMP01.EMPNO=EMP02.EMPNO)
WHEN MATCHED THEN
UPDATE SET
EMP01.ENAME =EMP02.ENAME,
EMP01.JOB =EMP02.JOB,
EMP01.MGR =EMP02.MGR,
EMP01.HIREDATE =EMP02.HIREDATE,
EMP01.SAL =EMP02.SAL,
EMP01.COMM =EMP02.COMM,
EMP01.DEPTNO =EMP02.DEPTNO
WHEN NOT MATCHED THEN
INSERT VALUES(EMP02.EMPNO, EMP02.ENAME, EMP02.JOB,
EMP02.MGR, EMP02.HIREDATE, EMP02.SAL,
EMP02.COMM, EMP02.DEPTNO);
트랜잭션
트랜잭션 : '거래'라는 의미로, 오류가 발생하면 모든 작업을 원상태로 되돌려 안정성을 확보하는 방법이다.
ATM에서 현금을 인출하는 과정에서 오류가 일어나면 돈의 행방이 불분명해지는 등
문제가 생길 수 있으므로, 인출 과정을 하나의 묶음으로 처리해야 한다.
이때, 묶음으로 처리하는 것을 트랜잭션이라고 한다.
트랜잭션 제어를 위한 명령어(TCL) : COMMIT, SAVEPOINT, ROLLBACK
트랜잭션은 마지막으로 실행한 커밋(롤백) 명령 이후부터 새로운 커밋(롤백) 명령을 실행하는 시점까지 수행된 모든 DML 명령들을 의미한다.
DDL문은 자동으로 커밋(AUTO COMMIT)이 발생한다.=>이전 상태로 롤백할 수 없음
COMMIT
모든 작업들을 정상적으로 처리하겠다고 확정하는 명령어(저장)
변경된 내용을 모두 영구 저장하고 트랜잭션 과정을 종료한다.
SAVEPOINT
트랜잭션을 작게 분할하는 명령어
전체가 아닌 특정 부분에서 트랜잭션을 취소시킬 수 있다.
세이브포인트 지정
SAVEPOINT 세이브포인트이름;
특정 위치까지 롤백
ROLLBACK TO 세이브포인트이름;
ROLLBACK
작업 중 문제가 발생되어서 트랜잭션의 처리 과정에서 발생한 변경사항을 취소하는 명령어
트랜잭션 과정을 종료한다.
커밋(Commit) | 롤백(Rollback) |
트랜잭션을 데이터베이스에 반영한다. | 트랜잭션을 데이터베이스에 취소한다. |
락을 해제한다. | 락을 해제한다. |
트랜잭션이 종료된다. | 트랜잭션이 종료된다. |
자동 커밋(Auto Commit)은 정상 종료이다. | 자동 롤백(Auto Rollback)은 비정상 종료이다. |