SQL) 데이터조작어(DML)
- 테이블에 저장되어 있는 데이터를 다루는 명령어
1. INSERT 구문
- 테이블에 새로운 행 추가
☑️ 문법
INSERT INTO table [(column [, column...])]
VALUES (value [, value...]);
예제
INSERT INTO departments(department_name, namager_id, department_id, location_id)
VALUES ('Java', 201, 290, 1700);
INSERT INTO departments(department_id, department_name)
VALUES (300, 'Jsp');
- 테이블명 다음에 설정한 컬럼수만큼
values
에 값을 채워준다. 나머지는 자동으로null
값이 들어간다.
INSERT INTO departments
VALUES (310, 'Web', null, null);
- 아니면
null
을 넣고 싶은 필드를 직접 지정해 줄 수도 있다.
2. UPDATE 구문
- 테이블이 기존 행 수정
☑️ 문법
UPDATE table
SET column = value [, column = value, ...]
[WHERE condition];
예제
UPDATE employees
SET department_id = 50
WHERE employee_id = 113;
- 이렇게 쓰면 특정
row
만 데이터 변경
UPDATE employees
SET department_id = 50;
- 이렇게 쓰면 해당 테이블 내의 모든
row
의 데이터가 바뀐다. 이렇게 쓸 일은 거의 없으니까UPDATE
사용시에는WHERE
조건을 잘 확인하자.
UPDATE copy_emp
SET job_id = (SELECT job_id
FROM copy_emp
WHERE employee_id = 205),
salary = (SELECT salary
FROM copy_emp
WHERE employee_id = 205)
WHERE employee_id = 113;
- 수정할 데이터 구문에서 서브쿼리도 사용 가능
3. DELETE 구문
- 테이블의 기존 행 삭제
☑️ 문법
DELETE [FROM] table
[WHERE condition];
예제
DELETE FROM departments
WHERE department_id = 60;
DELETE FROM copy_emp;
- 이렇게 쓰면 전체 삭제
4. 트랜잭션(Transaction)
- 논리적인 작업 단위
- 여러
DML
이 모여서 하나의 트랜잭션이 구성된다. DML
작업을 통해 변경한 내용들은 모두임시저장
되어 있는 상태이다.- 그래서
DML
작업 후commit
(DB
에 작업내용 최종 저장),rollback
(DB
최종 저장 전에 작업내용 되돌리기)으로 트랜잭션을 종료해야 한다.
4-1) 트랜잭션 구성
- 여러
DML
구문이 하나의 트랜잭션 (select
,insert
,update
,delete
) - 하나의
DDL
구문이 하나의 트랜잭션 (create
,alter
,drop
,truncate
) - 하나의
DCL
구문이 하나의 트랜잭션 (grant
,revoke
)
4-2) 트랜잭션 시작 및 종료
🔸 시작
- 첫 번째
DML
구문 실행 시
🔸 종료
COMMIT
또는ROLLBACK
실행 시DML
쓰다가DDL/DCL
작성하면autocommit
되면서 위에 썼던DML
도 같이 커밋된다.(트랜잭션 끝)
DDL
또는DCL
구문 실행 시(autocommit
)DDL
과DCL
은autocommit
을 내포하고 있기 때문에 실행하는 순간commit
되고 트랜잭션이 끝난다.- 그래서
rollback
이 불가하기 때문에 신중하게 작업하는 것이 좋다.
SQL *PLUS
정상 종료 시(autocommit
)- 그래픽창의
X
를 눌러 끄는 것은 비정상 종료다. - 터미널에서
exit
명령어 입력이나 그래픽 툴의exit
버튼을 눌러서 끄는 것이 정상 종료이다. - 비정상 종료 시
autorollback
처리된다.
- 그래픽창의
🔸 SAVEPOINT와 ROLLBACK TO
- 최종
commit
전에 작업하던 중간 중간으로 되돌아 갈 수 있도록SAVEPOINT
를 만들 수 있다. - 하지만 만든 세이브포인트를 확인할 수 있는 명령어는 없기 때문에 만든 사람이 기억하고 있어야 한다.
UPDATE...
SAVEPOINT update_done -- 세이브 포인트 생성
...
INSERT...
ROLLBACK TO update_done; -- 세이브 포인트로 되돌리기
- 세이브 포인트를 만들었다고 그 전까지 했던 작업들이
COMMIT
되는 것은 아니다. - 그렇기 때문에 모든
DML
작업이 끝났다면 최종 확인 후 꼭COMMIT
을 해 주어야 한다.