[DB] Transaction, Select, update, delete, truncate

*Transaction

- DB작업의 단위이다.(하나의 query 또는 여러개의 query가 묶일 수 있다.)

Transaction 적용 쿼리문 : insert, update, delete

- commit, rollback을 사용하여 DB 작업의 완료, 취소를 적용한다.

└commit (문법 : shell >> commit; // 커밋이 완료되었습니다.)

- 메모리에서 작업한 내용을 HDD에 기록한다.

- 변경된 데이터를 접속자들에게 보내는 일도 한다.

[참고]shell>> exit 로 종료할 경우 정상 종료이므로 commit하지 않아도 HDD에 저장된다.

└rollback

- 메모리에서 작업한 내용을 취소한다.(commit 직전까지 되돌린다.)

- savepoint와 같이 사용되어 원하는 시점까지 최소시킬 수 있다.

- commit된 데이터는 rollback 할 수 없다.

 

*테이블의 레코드 조회(select)

- 문법

select 컬럼명,..., 연산자, 함수 from 테이블명

- 대상 테이블의 모든 행(record)을 조회

- 원하는 컬럼을 선택하여 조회

 

*sqlplus문(sqlplus.exe에서만 제공하는 기능을 가진 명령문. ';'은 붙이지 않는다.)

- 문법 : column 컬럼명 format pattern; or col 컬럼명 for pattern;

- 출력되는 column의 크기를 조절(한글은 저장한 byte수와 무관하게 무조건 2byte로 계산한다.)

- 일시적이다.

[참고] 테이블이 달라도 컬럼명이 같으면 이 명령문이 모두 적용된다.

숫자 컬럼 pattern

- 0(해당 자리에 데이터가 없으면 0을 출력한다. 자리수를 맞출때 편리하다.), 9(해당 자리에 데이터가 없으면 아무것도 출력하지 않는다.)

ex1) column num format 0000 일 때, 데이터 1, 10, 2014를 출력하면 0001, 0010, 2014가 출력된다.

ex2) column numformat 9999일 때, 데이터 1, 10, 2014를 출력하면 1, 10, 2014가 출력된다.

문자열 컬럼 pattern

- 'a'&byte수 : byte 수

ex) column name format a5일 때, 데이터 jinki, leejinki를 출력하면 jinki, leeji/(줄바꿈)nki가 출력된다.

--------------------------------------------------------------------------

- 문법 : set timing on

- 쿼리의 수행시간을 알려준다. 단위는 밀리세컨드이다.

 

*연산자

- 조회하는 컬럼에 사용

- 산술연산자 : +, -, * /,mod(함수:나눈 나머지를 구한다.)

==============================================================

ex) 조회하는 컬럼에 산술연산자 이외의 연산자가 사용되면 에러 확인 예제

select ename, sal > 2000 from emp;

실행결과

==============================================================

 

- 조건절(where)에서 사용

- 관계연산자 : >, <, >=, <=, =, !=(=<>)

- 논리연산자(여러개의 관계연산자를 붙여준다.) : and, or, not

- 문자열연산자 : like 특수문자 %, _

- null 비교 : is null, is not null

- 범위연산자 : between A and B

==============================================================

ex) 올해의 나이와 후년의 나이를 출력하시오.

select age, age+1 from student;

실행결과

==============================================================

ex) 'xxx사원 (사번) xx직무로 근무중'의 형태로 출력하라.

[참고컬럼을 붙여서 출력 할 때 ('||'를 사용한다.)

select ename||'사원(' || empno ||') ' || job ||'직무로 근무중' from emp;

==============================================================

 

*alias

- 조회하는 컬럼에 별명을 부여하여 다른 이름으로 사용한다.

- 긴 컬럼의 이름을 짧게 줄일 때, 함수나 연산자를 사용한 컬럼의 이름을 바꿀 때 사용한다.

- 문법

컬럼명 alias or 컬럼명 as alias

- alias가 부여된 select의 where절에는 alias를 바로 사용할 수 없다.

- 별명은 한글로도 명명이 가능하다.

===========================================================================

ex) emp테이블에서 사원번호, 사원명, 연봉, 보너스, 세금을 조회. 단, 세금은 연봉의 3.3%로 연산하여 출력하면서 컬럼의 이름을 tax로 명명하라.

select empno, ename, sal, comm, sal*0.033 tax from emp;

===========================================================================

 

* 테이블의 컬럼 수정(update)

- 문법

update 테이블명

set 컬럼명 = 수정할 내용, ....

where 조건

- 컬럼의 값을 변경(수정)할 때 사용한다.

- 조건에 맞는 모든 컬럼의 값을 변경한다.(0~n개의 행이 변경된다.)

- 조건에는 관계연산자가 사용되어진다.

===========================================================================

ex) 학생테이블에서 번호가 1번인 학생의 나이를 30으로 변경하라.
update student set age=30 where num=1;

===========================================================================

 
* 테이블의 레코드 삭제(delete)
- 문법
delete from 테이블명;  // 전체 레코드를 삭제한다.
delete from 테이블명 where 조건  // 조건에 해당하는 레코드를 삭제한다.(0~n개의 행이 삭제된다.)
- 레코드를 삭제할 때 사용한다.

===========================================================================

ex) 학생테이블에서 번호가 1, 2번인 학생을 삭제하라.
delete from student where num=1 or num=2;

===========================================================================

 

[참고] select, update, delete는 transaction의 대상 쿼리이기 때문에 commit, rollback 할 수 있다. *Transaction 두번째 항목 복습

 

*truncate

- 문법

truncate table 테이블명;

- 테이블의 전체 레코드를 잘라버릴 때 사용한다.

- transaction의 대상 쿼리가 아니기 때문에 rollback이 되지 않는다.

- delete보다 빠르게 삭제된다.