트랜잭션은 다음과 같이 4가지 특성을 갖는다. 1) 원자성 트랜잭션에서 정의된 연산들은 모두 성공적으로 실행되던지 아니면 전혀 실행되지 않아야 한다. 2) 일관성 트랜잭션이 실행되기전에 데이터베이스 내용이 잘못되어있지 않다면 트랜잭션이 실행된 후에도 데이터베이스의 내용에 잘못이 있으면 안된다. 3) 고립성 트랜잭션이 실행되는 도중에 다른 트랜잭션의 영향을 받아 잘못된 결과가 만들어져서는 안된다. 4) 지속성 트랜잭션이 성공적으로 수행되면 그 트랜잭션이 갱신한 데이터베이스의 내용은 영구적으로 저장된다. 이런 트랜잭션 처리에서 빠질수 없는 부분은 Lock 이다 Lock은 트랜잭션 처리에서 순차성을 보장하기 위한 방법으로 공유락과 베타락으로 나뉘어진다. 먼저 공유락은 데이터 검색만 가능한것을 의미한다. 즉 데..
오라클 sql을 다루다보면 특이한 문법들을 종종 발견하게 된다. 이번 포스팅에서는 그에 대해 몇가지 정리해보도록 하겠다. 1. where 절에서 1 = 1 사용 // ex select ... from ... where 1 = 1 and ... 그냥 단순히 참일때, 라는 의미로 해석하면 된다. 쿼리가 복잡해질수록 디버깅도 어려워지기 때문에 1 = 1을 사용해 디버깅을 좀 더 원활히 하기 위해 사용한다. 2. order by 절에서 숫자 사용 // ex select ... from ... order by 1 1,2 등 order by 절에서 숫자가 사용된다면 1번째 컬럼, 2번째 컬럼을 의미한다. 예시에서와 같이 1이 사용된다면 첫번째 컬럼을 기준으로 오름차순하라는 의미이다. 해당 문법은 서브쿼리가 여러번 ..
view란 실제의 물리적 테이블로부터 가져와서 유추한 가상의 테이블이다. view는 복잡한 쿼리를 미리 정의해서 view를 통해 조회가 가능하다. 또한 숨기고싶은 컬럼이 있다면 해당컬럼을 제외하고 view로 생성해 제공하면 된다. 그리고 view의 데이터를 삽입, 수정,삭제시 본 테이블에도 반영이 된다. 반대로 본테이블의 삽입, 수정, 삭제시에도 view에도 반영이 된다. 본 테이블이 삭제된다면 view도 같이 삭제되는 특징을 갖고 있다. view 의 생성방법) create or replace view 뷰이름 as (select from where group by having order by ...); // 원하는 복잡한 쿼리를 view 하나로 생성해 사용이 가능하다. // view 의 사용 select..
본 쿼리 안에 소괄호를 사용해 select 문을 사용하는것을 서브쿼리라고 한다. 실행순서는 소괄호의 서브쿼리가 본쿼리보다 먼저 시행이 된다. 물론 서브쿼리 역시 하나의 쿼리문이므로 전체 쿼리순서자체에는 위배될수 없고, 실행된 서브쿼리의 결과값을 본쿼리에서 사용하는 방식으로 진행된다. 서브쿼리는 크게 3가지로 분류한다. 1. 스칼라 서브쿼리 select 절에서 사용할 서브쿼리로 단일행만을 결과값으로 가져올수 있도록 해야한다. 2. 인라인뷰 서브쿼리 from 절에서 사용할 서브쿼리로 select 문의 결과값이 하나의 임시테이블인것을 이용하는것이다. 3. 중첩 서브쿼리 where 절이나 having 절에서 사용할 서브쿼리로 결과값을 튜플의 조건, 그룹의 조건으로 사용한다. 단일행의 경우 = 연산사, 다중행의 ..
튜플을 유일하게 식별하기 위한 수단으로 인덱스, 기본키로 사용이 가능하게끔 값을 부여하며 그 값 자체엔 의미가 없는것을 관리해주는 기술을 시퀀스라고 한다. 예를 들면 회원의 아이디는 의미가 있으므로 시퀀스로 관리할수 없지만 글번호 같이 의미는 없지만 유일한 데이터로 식별이 가능한것을 관리해주는 기술을 시퀀스라고 한다. 시퀀스 생성 명령어) // 시퀀스 생성 create sequence 시퀀스명 increment by 숫자 // 얼마나 증가시킬것인지 start with 숫자 // 시퀀스 시작번호 // 시퀀스 사용 시퀀스명.nextval // 현재 시퀀스의 다음값을 가져옴 시퀀스명.currval // 현재 시퀀스의 값을 가져옴 이런 시퀀스의 사용을 통해 의미없지만 식별할수 있는 데이터를 자동으로 부여해줄수 ..