▶DDL(Data Definition Language)
데이터의 정의어를 말하며 데이터베이스 데이터를 보관하고 관리하기 위해 제공되는 여러객체(테이블)의 생성,변경,삭제 관련 기능을 수행한다.
데이터 정의어를 실행하면 자동으로 COMMIT이 되기때문에 이전에 사용한 데이터 조작어는 영구히 데이터베이스에 반영된다. 이는 실행취소가 불가하다는 것을 의미하기 때문에 사용할 떄 주의해야만한다.
CREAT | 테이블 생성 |
DROP | 테이블 삭제 |
ALTER | 테이블 수정 |
TRUNCATE | 테이블에 있는 모든 데이터 삭제 |
*CREAT: 테이블 생성

CREAT TABLE의 명령어가 시작이 되면 EMPLOYEES2 테이블을 생성하겠다는 뜻이며 EMPLOYEES2 앞에는 소유계정이름을 넣을 수 있는데 만약 CREAT TABLE LOCAL EMPLOYEES2 로 명령어를 작성한다면 LOCAL 계정소유의 EMPLOYEES2 계정을 만들겠다는 의미이고 만약, 소유계쩡을 생략할 경우에는 현재 접속해있는 계정 소유로 테이블이 만들어진다.
그리고 각 테이블의 카테고리와 모든 카테고리에 대한 자료형을 정의하여 테이블을 생성한다.
그리고 TALBE을 새로고침해보면 EMPLOYEES2가 정상적으로 추가되어있는 것을 확인할 수 있다.
TABLE의 엔티티관계도에도 EMPLOYEES2가 정상적으로 추가되어있는 것을 확인할 수 있다.
또한 "AS"라는 키워드를 사용하면 기존의 테이블과 동일하게 테이블을 하나 더 작성할 수 있다.
밑의 SELECT * FROM EMPLOYEES e 는 EMPLOYEES 테이블을 불러오는 서브쿼리라고 생각해주면 되고 이 서브쿼리를 AS라는 키워드로 이어준다.
또한 WHERE을 사용하여 특정테이블과 열구조는 같되 테이블 전체 데이터가 아닌 일부 데이터만 복사하여 테이블을 만들 수도 있다.
AS로 EMPLOYEES와 동일한 데이터를 가진 EMPLOYEE3 테이블이 만들어졌다.
*ALTER: 테이블 변경
ADD | 테이블에 열 추가 |
RENAME | 열의 이름을 변경 |
MODIFY | 열의 자료형을 변경 |
DROP | 특정 열을 삭제할 때 사용 |
TRUNCATE | 테이블의 데이터를 삭제할 때 사용 |
EMPLOYEES2의 테이블에는 EMPLOYEE_ID, NAME, SALARY라는 3개의 카테고리밖에 없다. 여기에 다른 카테고리를 추가하고싶다면 ALTER TABLE - ADD라는 키워드를 사용한다.
20자리수의 문자열이 데이터타입인 MANAGER_ID라는 이름을 가진 카테고리를 추가해보았고 새로고침 해보니 잘 저장된게 확인이 된다.
근데 여기에 있는 문자열을 20이 아닌 30으로 변경하고 싶다면?! MODIFY를 사용한다.
사용하고 실행하면 20에서 30으로 문자열 자리수가 변경된 것이 확인된다.
DROP은 특정 열을 삭제할 때 사용한다.
열을 삭제하면 해당열의 데이터도 함께 삭제됨으로 신중하게 사용해야한다.
TRUNCATE는 테이블의 데이터를 삭제한다.
데이터만 삭제하므로 테이블 구조에는 영향을 주지 않는다.
▶INSERT
전체컬럼에 데이터를 넣는 방법
INSERT INTO 테이블명 VALUES( 값1, 값2, ...);
특정 컬럼에 데이터를 넣는 방법
INSERT INTO 테이블명 ( 컬럼1, 컬럼2, .. ) VALUES( 값1, 값2, ..);
INSERT INTO 뒤에 데이터를 추가할 테이블 이름을 명시하고, 해당 테이블의 열을 괄호로 묶어 지정한 후 VALUES 절에는 지정한 열에 입력할 데이터를 작성한다.
만약 INSERT문에서 지정한 열 개수와 각 열에 입력할 데이터 개수가 일치하지 않거나 자료형이 맞지 않는 경우 또는 열 길이를 초과하는 데이터를 지정하는 경우에는 INSERT문에 오류가 발생하여 실행되지 않는다.
만약 NULL데이터를 입력하고싶다면 명시적으로 NULL이라고 입력하여 지정할 수 있다.
▶Update
회원정보수정, 결제계좌변경, 내가 작성한 글의 내용 수정 등의 기능을 수행하려면 데이터베이스 테이블에 지정된 데이터를 변경해야한다. 오라클에서는 특정 테이블에 저장되어있는 데이터내용을 수정할 때 UPDATE문을 사용한다.
UPDATE 테이블명 SET 컬럼1 = 값, 컬럼2 = 값, ..
WHERE 조건;
UPDATE문은 기본적으로 다음과 같이 UPDATE 키워드 후에 변경할 테이블 이름을 지정하고 SET절에 '변경할 열이름 = 변경할 데이터' 를 입력한다. 그리고 여러열의 데이터를 수정할 경우에 쉼표(,)로 구분한다.
데이터를 변경해야할 행이 정해져있다면 WHERE절 역시 사용 가능하며 서브쿼리도 사용가능하다.
수정한 내용을 되돌리고 싶다면 ROLLBACK명령문을 사용한다.
▶Delete
테이블에 있는 데이터를 삭제할 때 사용한다.
DELETE 테이블명 WHERE 조건;
DELETE 키워드 뒤에 데이터를 삭제할 대상 테이블 이름을 지정한다. DELETE문 역시 UPDATE문과 마찬가지로 삭제 대상이 될 데이터를 선정하기 위해 WHERE절 및 조건식을 지정할 수 있으며 서브쿼리도 사용 가능하다.
DELETE 문에서 WHERE절을 사용하지 않으면 테이블의 전체 데이터가 모두 삭제된다. 따라서 특정 행 데이터를 삭제하고 싶다면 WHERE절에 적절한 조건식을 명시해주어야한다.
▶Update와 Delete 주의사항
UPDATE와 DELETE는 기존에 존재하는 데이터를 삭제하고 수정하는 명령어로 앞에서 살펴본 다른 명령어보다 특별히 주의해야한다. 실무에서 우리는 어마어마한 양의 데이터를 만지게되는데 잘못된 UPDATE문으로 수백만건이 수정, 삭제되는 사고가 발생하기 쉽다.
그래서 우리는 UPDATE와 DELETE를 사용하기 전에 WHERE절을 검증하는 작업이 반드시 필요하다.
이렇게 WHERE절을 통해 EMPLOYEE_ID가 40인 열에만 UPDATE를 사용하여 데이터를 수정해야할 때
작업을 거쳐서 반드시 WHERE절이 정확한지 확인하는 습관을 길러야하는것이다.
▶Drop vs Truncate vs Delete
Drop | Truncate | Delete | |
공통점 | 삭제의 기능 | ||
사용법 | Drop table 테이블명 | Truncate table 테이블명 | Delete from 테이블명 where |
차이점 | 테이블 존재 자체의 삭제 | 데이터만 통으로 삭제 | 데이터를 골라서 삭제 |
Delete 명령어는 where절을 사용할 수 있지만 이는 강제가 아님이다. 그럼 우리는 Truncate와 Where절을 사용하지않는 Delete의 차이점이 모호하다고 생각하는데 Truncate는 DDL 에 속해있고 Delete는 DML에 속해있다. 이는 Truncate와 Delete는 내부처리과정에서 차이가 난다는 것이다.
Truncate는 테이블을 Drop 했다가 Creat를 진행하며 DELETE는 Where절을 사용하지 않을 경우 한 줄 한 줄 삭제가 된다. 이러한 처리방식때문에 Trucate가 모든 행을 삭제하는데에는 가장 빠르고 효율적인 방법이며 다량의 데이터를 처리해야할 경우에는 Truncate가 Delete 대비해서 속도가 확연하게 빠를 것이다.
그러나 Truncate도 단점이 있는데 Truncate는 log(기록)을 남기지않는다. 그래서 실수로 Truncate를 통해 삭제를 한 경우에는 복구가 불가능하다. Delete는 느리지만 오라클에서 log를 남겨둔다.
Truncate와 Delete는 비슷하지만 차이점이 확연하여 장단점을 고려하여 적재적소에 사용하는 것이 좋다.
▶테이블 생성 연습문제
하기 조건을 만족하는 테이블을 생성하라
테이블 이름 : sample
컬럼 : deptNo / NUMBER(20)
deptName / varchar2(15)
deptLoc / varchar2(15)
deptManager / varchar2(10)
데이터 insert : 10, 기획실, 서울, 홍길동
: 20, 전산실, 부산, 김말똥
: 30, 영업부, 광주, null
데이터 전체 select
데이터 update : deptNo가 30인 부서를 50으로 수정
: deptName이 영업부인 deptLoc를 인천으로 수정
데이터 delete : deptName이 영업부인 데이터 삭제
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
--SAMPLE TABLE 생성--
CREATE TABLE sample(
depNo Number(20),
depName Varchar2(15),
depLoc varchar2(15),
depManager varchar2(10)
);
--데이터 INSERT--
INSERT INTO SAMPLE VALUES(10, '기획실', '서울', '홍길동');
INSERT INTO SAMPLE VALUES(20, '전산실', '부산', '김말똥');
INSERT INTO SAMPLE VALUES(30, '영업부', '광주', null)
--데이터 UPDATE--
UPDATE SAMPLE SET DEPNO = 50
WHERE DEPNO = 30
;
UPDATE sample SET DEPLOC = '인천'
WHERE DEPNAME = '영업부'
;
--데이터 DELETE--
DELETE SAMPLE
WHERE DEPNAME = '영업부'
;
--확인용--
SELECT *
FROM SAMPLE;
|
cs |
UPDATE, DELETE, INSERT문등은 실수를 줄이기위해 한번에 하나의 항목만 UPDATE를 진행한다.
'국비필기노트 > DBMS_Oracle' 카테고리의 다른 글
데이터베이스(DBMS)_COMMIT,ROLLBACK (0) | 2022.04.20 |
---|---|
데이터베이스(DBMS)_오라클데이터타입(Oracle Data Type), 문자데이터타입(Char(n), varchar2(n)),숫자데이터타입(Numver(p,s)), LOB 데이터타입, 날짜데이터타입 (0) | 2022.04.19 |
데이터베이스(DBMS)_서브쿼리(subQuery) (0) | 2022.04.18 |
데이터베이스(DBMS)_조인(Join) (0) | 2022.04.15 |
데이터베이스(DBMS)_오라클 Select 함수 (0) | 2022.04.08 |