C#,Delphi,Oracle,MSSQL 개발자블로그
[Oracle/기본]9. 데이터 조작 본문
※ 이전 단원인 8단원은 SQL PLUS에 관한 내용이므로 생략.
- 데이터조작어 DML (Data Manipulation Language)
● INSERT INTO table(col1, col2, ...)
VALUES (val1, val2, ...)
☞ NULL 값을 가진 새로운 행 추가
* 암시적 방법 : 열 목록으로부터 열을 생략한다.
INSERT INTO dept(deptno, dname, )
VALUES (60, 'MIS');
* 명시적 방법 : VALUES 목록에 NULL키워드를 명시한다.
INSERT INTO dept
VALUES (70, 'FINANCE', NULL);
☞ 다른테이블로부터 행 복사
* 서브쿼리로 INSERT 문장을 작성한다.
* VALUES절을 사용하지 않는다.
* 서브쿼리의 열과 INSERT절의 열은 값의 개수와 데이터형이 일치해야 한다.
EX. INSERT INTO managers (id, name, salary, hiredate)
SELECT empno, ename, sal, hiredate
FROM emp
WHERE job = 'MANAGER';
emp 테이블로부터 데이터를 SELECT해서, managers 테이블에 INSERT시키는 쿼리.
● UPDATE table
SET col1 = val1
,col2 = val2
,col3 = val3 ...
WHERE ...
☞ 다중 열 서브쿼리로 갱신
UPDATE emp
SET (job, deptno) = (SELECT job, deptno
FROM emp
WHERE empno = 7499)
WHERE empno = 7698;
☞ 다른 테이블을 근거로 한 행 갱신
UPDATE employee
SET deptno = (SELECT deptno
FROM emp
WHERE empno = 7788)
WHERE job = (SELECT job
FROM emp
WHERE empno = 7788);
● DELETE FROM table
WHERE ...
☞ 다른 테이블을 근거로 한 행 삭제
DELETE FROM employee
WHERE deptno = (SELECT deptno
FROM dept
WHERE dname = 'SALES';
● 트랜잭션
- DDL이나 DCL문장은 자동적으로 커밋된다.
* DDL (Data Definition Language) * DCL(Data Control Language)
CREATE SETTRANSACTION
ALTER COMMIT
DROP ROLLBACK
TRUNCATE SAVEPOINT
GRANT
REVOKE
COMMENT
- DML(INSERT, UPDATE, DELETE)사용 시, 현재 사용자는 SELECT 문장을 사용하여 DML 작업의 결과를 검토할 수 있지만,
COMMIT이나 ROLLBACK을 하지 않으면, 다른 사용자는 바뀐 데이터를 볼 수 없다.
- 변경된 행들은 COMMIT이나 ROLLBACK을 하지 않으면, 다른 사용자들은 변경된 행들 내의 데이터를 변경할 수 없다.
● 표시자(Marker)로 변경을 롤백
SAVEPOINT [이름]
- ROLLBACK TO [이름] 을 통해 해당 표시자까지로만 롤백 할 수 있다.
- 트랜잭션을 작은 영역으로 나눌 수 있다.
- 이전의 SAVEPOINT 이름과 똑같은 이름으로 두번 째 SAVEPOINT를 생성한다면, 이전의 SAVEPOINT는 삭제된다.
● 잠금 (Locking)
동시(concurrent)트랜잭션 사이의 상호작용이 파괴되지 않도록 막아준다.
오라클 데이터베이스에서 Locking은 완전히 자동적이며, 사용자 액션을 요구하지 않는다.(수동으로 잠그는 것 또한 가능)
* Lock모드의 종류
- exclusive : 자원이 공유되는 것을 막아준다.
자원을 배타적으로 lock하는 첫 번째 트랜잭션은 배타적 잠금이 해제되기 전까지는 자원을 변경할 수 있는 유일한
트랜잭션이다.
Ex. 내가 변경하고 있으면(내가 첫 트랜잭션임) 다른사람은 내 트랜잭션이 끝나기 전까지 변경할 수 없다.
- share lock : 자원이 공유되도록 허용한다.
데이터를 읽는 다중 사용자는 데이털를 공유하고, writer(배타적 잠금이 필요한)에 의해 동시에 액세스 되는
것을 막기 위해서 공유 잠금을 유지한다. 똑같은 자원상에서 여러개의 트랜잭션은 공유 잠금을 요구할
수 있다.
@ 배타적 : 남을 배척하는, 또는 그런 것.
'Programming > Oracle 공부' 카테고리의 다른 글
[Oracle/기본]11. 제약조건 포함 (0) | 2017.05.23 |
---|---|
[Oracle/기본]10. 테이블 생성과 관리 (0) | 2017.05.23 |
[Oracle/기본]7. 다중 열 서브쿼리(Subquery) (0) | 2017.05.23 |
[Oracle/기본]6. 서브쿼리(Subquery) (0) | 2017.05.23 |
[Oracle/기본]5. 그룹 함수를 사용한 데이터 집계 (2) | 2017.05.22 |