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을 해 주어야 한다.