✔ DML이란? Data Manipulation Language
데이터 조작 언어
대표적으로 INSERT, SELECT, UPDATE, DELETE가 있으며,
다른 말로는 CRUD라고도 부릅니다. (Create Read Update Delete).
no | DML 조작어 | 개념 | 부가 설명 |
1 | SELECT | 테이블의 데이터 조회 | * 조건값이 없이 검색할 경우, TEST TABLE의 모든 속성 값의 데이터가 검색이 가능합니다. 이제 * 대신 속성명을 입력하게 될 경우에는 해당 속성 값만 검색할 수 있게 된다. 또한 WHERE은 조건값에 일치되는 정보만 검색할 수 있게 되어서 수많은 데이터 값들 중에서 내가 원하는 데이터만 찾을 수 있습니다. |
2 | INSERT | 테이블에 새로운 데이터를 입력 |
INSERT INTO DEPT01 (부서번호, 부서이름) VALUES(100,'개발부서'); -->원하는 컬럼만 추가하고 싶을때! INSERT INTO DEPT01 VALUES(101, NULL); --> 테이블에 전체의 값 넣기! 이 문장의 단점은 무조건 모든 값을 넣어야 하며, 만약 값이 없을 경우에는 NULL을 넣음으로서 값이 없음을 명확히 해야 합니다. |
3 | UPDATE | 테이블에 다른 데이터로 수정 | SET과 자주 활용 1. 모든 행의 값을 UPDATE 할때 2. 특정한 행의 값을 바꿀때 예시 1) UPDATE 테이블이름 SET 부서번호 =30 WHERE 부서번호 =10; ==> 이말은 부서번호가 10인 사람들을 30으로 SET 하겠다는 말 입니다~! 예시 2) UPDATE EMP01 SET HIREDATE = SYSDATE WHERE SUBSTR(HIREDATE, 1, 2)= '87'; SELECT * FROM EMP01; ==>87 날짜가 87인 애들을 찾아서 그 애들을 오늘 날짜로 입사일을 바꾸게 됩니다. |
4 | DELETE | 데이터 삭제 | DELETE FROM 테이블1 WHERE 테이블1의부서 = 30; --> 부서에서 30인 애들 삭제 DELETE FROM DEPT02 WHERE DEPTNO =40; |
5 | MERGE | 데이터 값 병합 | MERGE INTO 테이블명1 USING 테이블명2 ON 조건값 WHEN MATCHED THEN UPDATE SET 속성값 WHEN NOT MATCHED THEN INSERT 속성명 VALUES (속성값); 설명: MERGE INTO 테이블명 1을 기준으로, USING 테이블명 2는 보조입니다. ON 조건이 일치된다면 WHEN MATCHED THEN이 작동이 되고, ON 조건이 불일치된다면 WHEN NOT MATCHED THEN이 작동이 됩니다. |
✔ 트랜잭션?_ 논리적 단위
오라클에서 발생하는 여러 개의 SQL 명령문들을 하나의 논리적인 작업 단위로 처리하는 것을 트랜잭션이라고 합니다.
하나의 트랜잭션은 All-OR-Nothing 방식으로 처리되며, 여러 개의 명령어의 집합이 정상 적으로 처리되면 정상 종료하도록 하고 여러 개의 명령어 중에서 하나의 명령어라도 잘못되었다면 전체를 취소합니다.
데이터베이스에서 작업의 단위로 트랜잭션이란 개념을 도입한 이유는 데이터의 일관성을 유 지하면서 안정적으로 데이터를 복구시키기 위해서입니다.
<트렌젝션을 제어하는 명령어> | DML 작업이 성공적으로 처리되도록 하기 위해서는 COMMIT 명령을, 작업을 취소하기 위해서는 ROLLBACK 명령으로 종료해야 합니다. | |
1. COMMIT | 데이터베이스에 모두 반영하기 위해서 변경된 내용을 모두 영구 저장합니다. COMMIT 명령어를 수행하게 되면 하나의 트랜잭션 과정을 종료하게 된다 Transaction(INSERT, UPDATE, DELETE) 작업 내용을 실제 DB에 저장한다. 이전 데이터가 완전히 UPDATE 된다. 모든 사용자가 변경된 데이터의 결과를 볼 수 있다. 내가 분명히 데이터를 바꿨는데 COMMIT을 하지 않으면 내 메모리에만 있는 것 이기 때문에 COMMIT을 해야 다른사람이 볼 수 있습니다! |
|
2. ROLLBACK | ROLLBACK은 작업 중 문제가 발생되어서 트랜잭션의 처리 과정에서 발생한 변경사항을 취소하는 명령어. 즉, 트랜잭션으로 인한 하나의 묶음 처리가 시작되기 이전의 상 태로 되돌립니다. ROLLBACK 명령어 역시 트랜잭션 과정을 종료하게 됩니다. Transaction 작업 내용을 취소한다. 이전 COMMIT한 곳 까지만 복구한다. |
|
3. SAVE POINT | SAVEPOINT 명령을 써서 현재의 트랜잭션을 작게 분할할 수 있다. 저장된 SAVEPOINT는 ROLLBACK TO SAVEPOINT 문을 사용하여 표시한 곳까지 ROLLBACK할 수 있다. 여러 개의 SQL 문의 실행을 수반하는 트랜잭션의 경우, 사용자가 트랜잭션 중간 단계에서 세이브포인트를 지정할 수 있다. 이 세이브포인트는 차후 롤백과 함께 사용해서 현재 트랜잭션 내의 특정 세이브포인트까지 롤백할 수 있게 됩니다. *어디로 돌아갈래? 작업>작업>작업>세이브포인트1>작업> 작업>세이브포인트2>작업>DELETE>작업>세이브포인트3 |
※ 자동 COMMIT 명령과 자동 ROLLBACK 명령이 되는 경우
SQL* PLUS가 정상 종료되었다면 자동으로 COMMIT 되지만, 비정상 종료되었다면 자동으로 ROLLBACK을 합니다.
DDL과 DCL(Data Control Language, User 관리) 명령문이 수행된 경우 자동으로 COMMIT 됩니다.
DDL문에는 CREATE, ALTER, DROP, RENAME, TRUNCATE 등이 있고 이러한 DDL문은 자동으로 커밋(AUTO COMMIT)을 실행합니다! (메모리에서 작업하는 DML과는 다름!)
작업 작업 작업 => COMMIT>> 작업 작업 작업 => COMMIT >>
이 COMMIT과 다음 COMMIT 사이가 하나의 트렌젝션입니다.
주의 사항!!! |
내가 만약에 어떠한 것을 DELETE(DML)삭제하고 나서 롤백을 하면 삭제하기 전으로 돌아가지만!!! 테이블: 10,20, 30 이 있고 삭제=30 테이블에는 10,20 만 남았다. 여기서 다시 롤백하면 테이블: 10,20, 30 근데 만약에 삭제=30 을 하고 나서 CREATE 테이블5 다른 테이블을 만든 뒤 ROLLBACK을 해봤자 테이블은 테이블: 10,20 으로 30이 ROLLBACK이 되지 않는다!!!! COMMIT을 하지 않아도 CREATE인 DDL 을 사용했기 때문에 명령어가 자동으로 커밋되오니 주의 해야합니다!!!! 또한 만약에 내가 또 DELETE를 하고 나서 TRUNCATE TABLE 을 하려고 했는데 테이블 이름이 오류가 나서 TRUNCATE 가 실패했다고 하더라도 DDL인 TRUNCATE를 사용했다는 이유만으로도 COMMIT이 자동으로 되기 때문에 ROLLBACK을 해도 DELETE(삭제)한것이 돌아오지 않습니다!!!! |
그럼 지금까지 DML (Data Manipulation Language) 에 대한 설명을 마치겠습니다.
감사합니다.
'주니어 기초 코딩공부 > Database 기초' 카테고리의 다른 글
13장 데이터 무결성_제약조건 이름 설정하기 및 개념 설명 (SQL_오라클) (0) | 2022.12.19 |
---|---|
13장 데이터 무결성_NOT NULL, UNIQUE, PK, FK 정의 및 상세 설명 (SQL_오라클) (0) | 2022.12.19 |
09장 DDL_데이터 정의어 설명 및 정리 (오라클) (0) | 2022.12.15 |
08장 서브쿼리_스칼라 서브쿼리, 인라인뷰 서브쿼리, 중첩서브쿼리 (오라클) (0) | 2022.12.15 |
07장 ANSI CROSS JOIN VS ORACLE CROSS JOIN 비교 (ANSI Natural Join) (1) | 2022.12.14 |