시퀀스 생성 문법
CREATE SEQUENCE 시퀀스이름
[START WITH n]
[INCREMENT BY n]
[MAXVALUE n | NOMAXVALUE]
[MINVALUE n | NOMINVALUE]
[CYCLE | NOCYCLE]
[CACHE | NOCACHE]
START WITH n | 시작 번호 지정. |
START WITH 2 >> 2부터 시작 | |
INCREMENT BY n | 증가 폭 지정 |
INCREMENT BY 2 >> 2씩 증가 | |
MAXVALUE n | NOMAXVALUE | 증가되는 최대치 |
MAXVALUE 10 >> 10초과 증가안됨 | |
MINVALUE n | NOMINVALUE | 감소되는 최소치 |
MINVALUE 5 >> 5미만 감소안됨 | |
CYCLE | NOCYCLE | 증가 번호의 순환. |
최대치가 10일 때, 10 다음은 1 | |
CACHE | NOCACHE | 미리 일정 증가 수들을 만들어 놓고 사용. |
시퀀스 수정 문법
ALTER SEQUENCE 시퀀스이름
[필요한 항목 작성];
시퀀스 삭제 문법
DROP SEQUENCE 시퀀스 이름
시퀀스 예제)
CREATE SEQUENCE SEQ_GN;
1부터 1씩 제한, 순환없는 시퀀스.
ALTER SEQUENCE SEQ_GN
INCREMENT BY 2;
2씩 증가되도록 하기위해 INCREMENT BY 2로 해줌
시퀀스 번호 확인하는 방법
NEXTVAL | 다음의 시퀀스 번호를 확인할 수 있음. |
CURRVAL | 현재의 시퀀스 번호를 확인할 수 있음. |
Row Number(행 번호 달기)
1. ROWNUM 키워드 사용법
SELECT ROWNUM 번호, GOOS.*
FROM goods
ORDER BY doos.g_name
;
1-1. ROWNUM에 번호를 붙이고 정렬을 수행하는 방법
SELECT ROWNUM 번호, g.*
FROM (
SELECT * FROM goods
ORDER BY g_name) g
;
번호를 붙이고 정렬을 수행하는 방법
2. ROW_NUMBER() 함수 사용법
SELECT ROW_NUMBER() OVER(ORDER BY g_name DESC) 번호, GOODS.*
FROM goods;
트랜젝션
데이터 처리의 한 단위
INSERT, UPDATE, DELETE 작업은 트랜젝션 단위로 실행.
CREATE, ALTER, DROP은 ROLLBACK 트랜젝션 불가능함.
트랜젝션의 종류
COMMIT | 작업의 최종 승인. (SAVEPOINT 제거) |
ROLLBACK | 작업 취소. 작업하기 이전 상태로 테이블을 되돌림. |
트랜젝션 주의점
UPDATE, DELETE는 원상복구한다는거 자체가 불가능함.
COMMIT과 ROLLBACK은 이러한 부분을 보완할 수 있음.
트랜젝션 사용 예제)
1. SAVEPOINT를 사용하지 않은 예제
-- 0. 임시테이블 삭제(없을 경우 실행 X)
DROP TABLE TEMP_EMP;
-- 1. 기존 emp 테이블을 복사한 임시 테이블 생성
CREATE TABLE TEMP_EMP
AS
SELECT * FROM EMP;
-- 1-1. 데이터 확인
SELECT * FROM TEMP_EMP;
-- 2. 데이터 삭제(직번 = 7521)
DELETE FROM TEMP_EMP
WHERE EMPNO = 7521;
-- 3. 삭제 승인
COMMIT;
-- 4. 데이터 확인
SELECT * FROM TEMP_EMP
WHERE empno = 7521;
-- 5. 데이터 삽입
INSERT INTO TEMP_EMP(empno, ename, hiredate)
VALUES (9000, 'test', sysdate);
-- 6. 삽입 승인
COMMIT;
-- 7. 데이터 삭제
DELETE FROM TEMP_EMP
WHERE empno = 9000;
-- 8. 삭제 승인 없이 데이터 확인
SELECT * FROM TEMP_EMP
WHERE empno = 9000;
-- 9. 삭제 작업 취소
ROLLBACK;
-- 10. 데이터 확인
SELECT * FROM TEMP_EMP
WHERE empno = 9000;
2. SAVEPOINT를 사용한 예제
-- 11. 임시 테이블의 컬럼 수정(empno의 자릿수 1 증가)
ALTER TABLE TEMP_EMP
MODIFY empno NUMBER(5); -- CREATE, ALTER, DROP은 ROLLBACK 불가능.
-- 12. 데이터 삽입(no commit)
INSERT INTO TEMP_EMP(empno, ename, hiredate)
VALUES(10000, 'test2', sysdate);
-- 13. SAVEPOINT 지정('A'는 지정한 SAVEPOINT의 이름..)
SAVEPOINT A;
-- 14. 데이터 삽입(no commit)
INSERT INTO TEMP_EMP(empno, ename, hiredate)
VALUES(10001, 'test3', sysdate);
INSERT INTO TEMP_EMP(empno, ename, hiredate)
VALUES(10002, 'test4', sysdate);
-- 15. 데이터 확인
SELECT empno, ename
FROM TEMP_EMP
WHERE empno IN (10000, 10001, 10002);
-- 16. 데이터 삭제
DELETE FROM TEMP_EMP
WHERE empno IN (10000, 10001, 10002);
-- 17. 데이터 확인
SELECT empno, ename
FROM TEMP_EMP
WHERE empno IN (10000, 10001, 10002);
-- 18. SAVEPOINT까지 작업 취소.
ROLLBACK TO A; -- 지정한 부분까지만 롤백이 됨
-- 19. 데이터 확인
SELECT empno, ename
FROM TEMP_EMP
WHERE empno IN (10000, 10001, 10002);
-- 20. 작업 취소
ROLLBACK;
-- 21. 최종 데이터 확인
SELECT empno, ename
FROM TEMP_EMP
WHERE empno IN (10000, 10001, 10002); -- 첫번째 입력한거까지 다 삭제됨
'SQL' 카테고리의 다른 글
0424 SQL - JOIN (0) | 2020.04.27 |
---|---|
0421 SQL - 오라클 내장 함수(수학 함수, 문자 함수, 날짜 함수, 형변환 함수) (0) | 2020.04.22 |
0420 SQL - ALTER(테이블 관리), DML (0) | 2020.04.21 |
0416 SQL - 테이블 생성, 제약조건 (0) | 2020.04.17 |