[CUBRID] - 큐브리드 매니저를 이용한 데이터 갱신과 트랜잭션 0 0 2,370

by 문학청년 [CUBRID 노하우/팁/자료] 큐브리드 cubrid [2009.11.17 17:41:37]


본 문서는 CUBRID(큐브리드)의 매니저를 이용한 데이터 갱신 방법과 트랜잭션에 대해서 설명합니다.


큐브리드 매니저를 이용한 데이터 갱신

큐브리드 매니저를 이용하면 SQL문을 입력하지 않고도 간단히 데이터를 갱신할 수 있다. 복잡한 질의를 통해 계산된 값을 입력하는 경우에는 불편할 수 있지만, 단순한 데이터를 갱신할 때는 SQL문을 작성하는 것보다 편리할 때가 있다. 큐브리드 매니저는 GUI에서 데이터를 갱신하면 갱신 과정과 동일한 기능을 하는 SQL문을 자동으로 생성하여 보여준다.

개최 연도가 ‘2012’년이고 개최 국가가 ‘England’, 개최 도시가 ‘London’인 Olympic 정보를 삽입해보자. 그림.1과 같이 해당 테이블 목록에서 마우스 오른쪽을 누른 뒤 데이터 입력을 클릭하면 그림.2와 같은 데이터 입력 창이 뜨는데, 해당 값들을 입력하고 입력 버튼을 클릭하면 대화 상자 하단에 해당 SQL문이 자동으로 생성되고 레코드의 삽입이 완료된다.



그림.1

그림.2

 

트랜잭션

트랜잭션은 일관성이 보장된 특정 데이터 작업의 최소 단위를 말한다. 여기서 말하는 일관성이란 하나의 작업에서 두 개의 쿼리를 사용한다고 가정할 때, 두 쿼리 모두 완벽하게 실행이 되었을 경우에만 작업이 완료되는 것을 말하며, 두 쿼리 중 하나라도 오류가 발생하게 되면 작업을 쿼리 실행 전으로 되돌리는 것을 말한다.



예제 1

√ 문제

 Olympic 테이블에서 slogan이 NULL인 모든 레코드의 값을 ‘Fighting’ 으로 수정하는 쿼리를 작성하라.


√ SQL문 1

 
UPDATE olympic 
SET slogan = 'Fighting' 
WHERE slogan IS NULL 


√ SQL문 2

 
SELECT  host_year, host_nation, host_city, slogan 
FROM   Olympic 



√ 결과

 
NO host_year host_nation host_city slogan
5 1988 Korea Seoul Harmony and progress
6 1984 USA Los Angeles Play part in History
7 1980 USSR Moscow Fighting
8 1976 Canada Montreal Fighting
9 1972 Germany Munich Fighting
10 1968 Mexico Mexico City Fighting



 


예제 1에서 20건의 모든 slogan 컬럼의 값이 수정되는 것이 아니면 하나의 레코드도 갱신되지 않도록 DBMS가 일관성을 보장 해야 한다. 예를 들어, 10번째 레코드까지 수정한 상태에서 컴퓨터 시스템이 다운된 후에 다시 가동되었을 경우, DBMS는 어떻게 대응 해야 하는가? 만약에 수정 연산이 처음부터 다시 시작하게 된다면 10번째 레코드까지는 두 번 중복되게 수행하는 결과를 초래한다.

따라서 DBMS는 단일 SQL문을 이용하여 데이터를 갱신할 때 전체가 다 반영되거나 하나도 반영 되지 않도록 한다. 이러한 속성을 원자성(Atomicity)이라 한다.

트랜잭션에 대해 보다 자세한 사항은 아래 링크를 참조한다.

http://www.cubrid.com/online_manual/cubrid_820/syntax/syntax_tran_intro.htm



자동 커밋 모드를 해제한 상태라 하더라도 테이블을 생성하거나 제거하는 등 데이터 정의어를 이용한 SQL문은 자동 커밋이 된다.

그림 3

예제 2

√ 문제

 자동 커밋 모드를 해제한 상태에서 code 테이블의 모든 데이터를 삭제한 후, code 테이블의 레코드들의 수를 조회하고, ROLLBACK 명령을 이용하여 트랜잭션을 철회한 후 code 테이블의 레코드들의 수를 조회하라.


√ SQL문 1

 

  --- <자동 커밋 모드 비활성화> -- 
DELETE FROM code;

SELECT COUNT(*) 
FROM code ;


√ 결과 1

 
NO COUNT(*)
1 0


√ SQL문 2

 

ROLLBACK;

 

SELECT COUNT(*) 
FROM code;



√ 결과 2

 
NO COUNT(*)
1 6



√ 설명

 자동 커밋 모드가 비활성인 상태이면 모든 데이터 갱신은 COMMIT 명령을 수행할 때까지 실제 시스템에는 반영되지 않는다. 그러나 현재 연결 중인 질의 편집창에서는 그 동안 갱신한 내역이 반영된 상태로 조회할 수 있다. 갱신 질의들은 ROLLBACK 명령을 이용하여 한꺼번에 취소할 수 있다.

예제 3

√ 문제

 1988년 서울 올림픽 때, 전산 오류로 인해 한국의 금메달 5개가 동메달로 잘못 기록되었으므로 한국의 동메달 5개를 빼고 금메달 5개를 추가하는 쿼리를 작성하라.


√ SQL문 1

 

  --- <자동 커밋 모드 비활성화> -- 
UPDATE participant SET gold = gold + 5 
WHERE host_year=1988 AND nation_code='KOR' 


 

SELECT host_year, nation_code, gold, silver, bronze

FROM participant;

 

 

√ 결과 1

 
NO host_year nation_code gold silver bronze
1 1988 KOR 17 10 6


√ SQL문 2

 

UPDATE participant SET bronze = bronze - 5 
WHERE host_year=1988 AND nation_code='KOR'; 


 

COMMIT ;

 

SELECT host_year, nation_code, gold, silver, bronze

FROM participant;



√ 결과 2

 
NO host_year nation_code gold silver bronze
1 1988 KOR 17 10 6



 


 
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입