19장. 트랜잭션과 락(LOCK) 트랜잭션이란? MySQL의 트랜잭션 락(LOCK) 쉽게 배우는 MySQL 5.x

Slides:



Advertisements
Similar presentations
SQLWORLD.PE.KR 제 9 장 트랜잭션 INSIDE MICROSOFT SQL SERVER 2005: T-SQL PROGRAMMING.
Advertisements

컴퓨터와 인터넷.
PARK SUNGJIN Oracle 설치 PARK SUNGJIN
DB 프로그래밍 학기.
DB 프로그래밍 학기.
You YOungseok 데이터베이스 테이블 및 인덱스 You YOungseok.
MCMS3000 네트워크 설정방법 [반도 HFCNMS 시스템 Set-up] 반도전자통신
MS-Access의 개요 1강 MOS Access 2003 CORE 학습내용 액세스 응용 프로그램은 유용한 데이터를
데이터 베이스 설계 및 실습 #1 - 오라클 설치 및 SQL 기본.
제 09 장 데이터베이스와 MySQL 학기 인터넷비즈니스과 강 환수 교수.
12장 데이터 읽기 일관성과 락.
6장 Mysql 명령어 한빛미디어(주).
MySQL 및 Workbench 설치 데이터 베이스.
18장. 뷰(View) 뷰의 생성 뷰의 열 이름 뷰의 변경 : WITH CHECK OPTION 뷰 테이블의 정보와 네비게이터
Windows Server 장. 사고를 대비한 데이터 백업.
3장. 데이터베이스 구축의 전체 과정 미리 실습하기
테이블 : 데이터베이스를 구성하는 요소로 같은 성격에 정보의 집합체. 레코드 : 하나의 정보를 가지고 있는 컬럼의 집합체
5장 Mysql 데이터베이스 한빛미디어(주).
4장. 웹로직 서버상에서의 JDBC와 JTA의 운용
4-1장. MySQL 제13장.
3.2 SQL Server 설치 및 수행(계속) 시스템 데이터베이스 master
11장. 포인터 01_ 포인터의 기본 02_ 포인터와 Const.
SELECT empno, ename, job, sal, dname FROM emp, dept
13 인덱스 인덱스의 개념 인덱스의 구조 인덱스의 효율적인 사용 방법 인덱스의 종류 및 생성 방법 인덱스 실행 경로 확인
16장. 테이블의 변경 새로운 행 삽입 테이블에서 테이블로 행을 복사 행 값의 변경 테이블에서 행 삭제
21장. 데이터베이스 설계지침 테이블과 열에 대한 지침 중복 데이터의 포함 열에 대한 자료형의 선택
컴퓨터응용과학부 Java Enterprize(DB) 제 15 주
                              데이터베이스 프로그래밍 (소프트웨어 개발 트랙)                               퍼스널 오라클 9i 인스톨.
18강. 데이터 베이스 - II JDBC 살펴보기 Statement객체 살펴보기 Lecturer Kim Myoung-Ho
17강. 데이터 베이스 - I 데이터 베이스의 개요 Oracle 설치 기본적인 SQL문 익히기
MYSQL 설치 SQL언어 SQL언어의 활용 웹과 SQL언어와의 연동
제 19 장 (Oracle) 오라클에서 동시성 제어 (MVCC)
5장 Mysql 데이터베이스 한빛미디어(주).
KIM HEESANG PL/SQL 2 KIM HEESANG
13 인덱스 인덱스의 개념 인덱스의 구조 인덱스의 효율적인 사용 방법 인덱스의 종류 및 생성 방법 인덱스 실행 경로 확인
You YoungSEok Oracle 설치 You YoungSEok
4장. 데이터베이스와 테이블 MySQL 데이터베이스 테이블의 생성 테이블 데이터 처리(삽입, 변경, 삭제) 작업
환경 설정 예제 데이터베이스 생성 - 그림 3.34의 SQL Server 관리 스튜디오 창의 왼쪽 영역의 데이터베
JDBC Lecture 004 By MINIO.
3장. SQL Server 2008 전체 운영 실습 및 DB와 프로그램의 연동
2장. 데이터베이스 관리 시스템 데이터베이스 관리 시스템의 등장 배경 데이터베이스 관리 시스템의 정의
뇌를 자극하는 Windows Server 2012 R2
9장. SELECT명령문 : WHERE 절 개요, 2. 관계연산자를 사용하는 조건
11장. GROUP BY와 HAVING 열의 그룹화 2개 이상의 열에 대한 그룹화
10장. SELECT명령문 : 통계함수 모든 열 선택(*) 2. SELECT 절의 수식
ADO.NET (SqlConnection, SqlCommand)
14장. 부속 질의어 부속 질의어 규칙 열의 범위 상호 관련부속 질의어 복합키의 사용 쉽게 배우는 MySQL 5.x
1. 트랜잭션 (1) 트랜잭션 1) 트랜잭션의 정의 ① A collection of operations that performs a single logical function in a database application. (데이터베이스 응용프로그램에서 하나의 논리적 기능을.
14강. 세션 세션이란? 세션 문법 Lecturer Kim Myoung-Ho Nickname 블스
CHAP 21. 전화, SMS, 주소록.
23장. Trigger CREATE TRIGGER 구문 DROP TRIGGER 구문 트리거 사용하기
디버깅 관련 옵션 실습해보기 발표 : 2008년 5월 19일 2분반 정 훈 승
20장. SQL명령문의 최적화 1. OR연산자의 사용을 피하라. 2. 불필요한 UNION연산자의 사용을 피하라.
10 데이터 조작어 데이터 조작어 데이터 입력 데이터 수정 데이터 삭제 MERGE 트랜잭션 관리 시퀀스.
10 데이터 조작어 데이터 조작어 데이터 입력 데이터 수정 데이터 삭제 MERGE 트랜잭션 관리 시퀀스.
제 18 장 (Oracle) 오라클에서 트랜잭션 지원
14 뷰(View) 뷰의 개념 뷰 관리.
제 23 장 오라클에서 보안 기능.
Chapter 10 데이터 검색1.
TVM ver 최종보고서
7장 테이블 조인하기.
10주 MariaDB에서 트랜잭션 지원 및 동시성 제어 기능
Mariadb 트랜잭션과 동시성 제어 장종원
CHAP 15. 데이터 스토리지.
14 뷰(View) 뷰의 개념 뷰 관리.
 6장. SQL 쿼리.
임시테이블과 테이블변수 SQLWorld Study Group - 최명환 -.
11장. 보안과 권한 관리 보안 권한 관리. 11장. 보안과 권한 관리 보안 권한 관리.
7 생성자 함수.
Ⅰ. 데이터베이스 정의 Ⅱ. MS SQL 서버 Ⅲ. 데이터베이스 인터페이스
Presentation transcript:

19장. 트랜잭션과 락(LOCK) 트랜잭션이란? MySQL의 트랜잭션 락(LOCK) 쉽게 배우는 MySQL 5.x 2018-12-30 쉽게 배우는 MySQL 5.x

19.1 트랜잭션이란? -트랜잭션(Transaction)은 작업 처리 전체를 하나의 단위로 묶어서 처리 -SQL에서는 쿼리 시작 전 상단부에 트랜잭션 사용을 선언하고 쿼리를 수행 -쿼리가 정상으로 종료되면 COMMIT으로 데이터베이스에 데이터를 저장 -실패할 경우 ROLLBACK하여 트랜잭션 사용 선언부 이하 쿼리를 모두 취소 -트랜잭션을 사용하려면 InnoDB와 BDB로 테이블 타입을 정의 -HEAP, ISAM, MERGE 그리고 MyISAM은 트랜잭션을 지원하지 않는다. 트랜잭션을 사용할 때의 장점 -서버가 깨지거나 하드웨어적인 문제가 발생하더라도 자동 복구 기능이나 백업된 트랜잭션 로그를 이용하여 데이터를 살릴 수 있다. -COMMIT 명령을 이용하여 여러 개의 SQL문을 하나로 합쳐서 실행 가능 트랜잭션을 사용하지 않았을 때의 단점 ∙속도가 빠르다. ∙디스크 용량과 메모리를 적게 차지 ∙옵션을 주어 트랜잭션 기능을 이용 2018-12-30 쉽게 배우는 MySQL 5.x

트랜잭션의 성격 4가지 ACID 성질 원자성(atomicity) 트랜잭션은 전체의 실행만이 있지 일부 실행으로 트랜잭션의 기능을 가질 수는 없다. 일관성(consistency) 트랜잭션이 그 실행을 성공적으로 완료하면 언제나 일관된 데이터베이스 상태로 된다. 즉, 이 트랜잭션의 실행으로 일관성이 깨지지 않는다. 격리성(isolation)  연산의 중간결과에 다른 트랜잭션이나 작업이 접근할 수 없다. 영속성(durability)  트랜잭션이 일단 그 실행을 성공적으로 끝내면 그 결과는 어떠한 경우에라도 보장받는다. 2018-12-30 쉽게 배우는 MySQL 5.x

19.2 MySQL에서의 트랜잭션 MySQL이 InnoDB 테이블이 지원되는지 확인해 보자. mysql> show variables like 'have_%'; +-----------------------+----------+ | Variable_name         | Value    | | have_archive          | YES      | | have_bdb              | NO       | | have_blackhole_engine | NO       | | have_compress         | YES      | | have_crypt            | NO       | | have_csv              | NO       | | have_example_engine   | NO       | | have_federated_engine | NO       | | have_geometry         | YES      | | have_innodb           | YES      | | have_isam             | NO       | | have_ndbcluster       | NO       | | have_openssl          | DISABLED | | have_query_cache      | YES      | | have_raid             | NO       | | have_rtree_keys       | YES      | | have_symlink          | YES      | have_innodb 의 값이 YES이므로 사용할 수 있다 값이 NO로 되어있다면 InnoDB 테이블 타입이 활성화 되지 않는 상태 2018-12-30 쉽게 배우는 MySQL 5.x

-트랜잭션을 사용하기 위해 자동으로 COMMIT되는 것을 막아 준다. -하나의 작업이 모두 끝났을 때 COMMIT를 해주어야 하기 때문에 SET 명령으로 AUTOCOMMIT를 설정 mysql> SET AUTOCOMMIT = 0; Query OK, 0 rows affected (0.08 sec) -AUTOCOMMIT가 0이되면 자동 커밋이 되지 않는다. -다시 AUTOCOMMIT를 사용하려면 값을 1로 주면 자동커밋 상태가 적용된다. -트랜잭션을 사용하기 위해서 BEGIN WORK 명령을 실행하면 이전에 실행되던 모든 SQL문을 COMMIT하게 된다. 트랜잭션의 사용 BEGIN WORK 명령어를 실행하여 하나의 트랜잭션을 시작 mysql> BEGIN WORK; Query OK, 0 rows affected (0.31 sec) 2018-12-30 쉽게 배우는 MySQL 5.x

[예제 19-1] 학번 20041002의 학생이름(STU_NAME)과 반(CLASS)을 출력하라. mysql> SELECT STU_NAME, CLASS         -> FROM STUDENT     -> WHERE STU_NO = '20041002'; +----------+-------+ | STU_NAME | CLASS | | 김유미   |     2 | 위의 결과를 보고 김유미 학생의 반을 1반으로 변경하여라. mysql> UPDATE STUDENT                     -> SET CLASS = 1      -> WHERE STU_NAME = '김유미'; Query OK, 1 row affected (0.02 sec) 변경한 결과를 확인하자. mysql> SELECT STU_NAME, CLASS | 김유미   |     1 | 2018-12-30 쉽게 배우는 MySQL 5.x

트랜잭션을 종료하기 위해 ROLLBACK을 실행하면 변경된 작업이 취소된다. mysql> ROLLBACK; Query OK, 0 rows affected (0.05 sec) 김유미 학생의 반(CLASS)를 확인해보자. mysql> SELECT STU_NAME, CLASS     -> FROM STUDENT     -> WHERE STU_NO = '20041002'; +----------+-------+ | STU_NAME | CLASS | | 김유미   |     2 | 1 row in set (0.00 sec) 반(CLASS)이 변경되지 않은 것을 볼 수 있다. COMMIT과 함께 트랜잭션을 완료하는 과정을 보도록 하자. BEGIN WORK를 실행하여 트랜잭션의 시작을 알린다. mysql> BEGIN WORK; Query OK, 0 rows affected (0.00 sec) 2018-12-30 쉽게 배우는 MySQL 5.x

COMMIT를 이용해 데이터베이스에 정보의 변경 내용을 저장 김유미 학생의 반을 3반으로 변경한다. mysql> UPDATE STUDENT      -> SET CLASS = 3      -> WHERE STU_NAME = '김유미'; Query OK, 1 row affected (0.02 sec) Rows matched: 1  Changed: 1  Warnings: 0 COMMIT를 이용해 데이터베이스에 정보의 변경 내용을 저장 mysql> COMMIT; Query OK, 0 rows affected (0.00 sec) 변경된 내용을 확인해보자. mysql> SELECT STU_NAME, CLASS        -> FROM STUDENT     -> WHERE STU_NO = '20041002'; +----------+-------+ | STU_NAME | CLASS | | 김유미   |     3 | 1 row in set (0.00 sec) 트랜잭션이 성공했기 때문에 변경된 내용이 데이터베이스에 저장되었다. 2018-12-30 쉽게 배우는 MySQL 5.x

19.3 락(LOCK) -데이터베이스 백업, 테이블의 스키마 구조 변경, 기타 중요한 작업을 진행할 때 다른 사람이 해당 테이블에 작업을 하지 못하도록 막기 위해 locking을 한다. -트랜잭션이 지원되지 않는 MyISAM에는 트랜잭션과 비슷한 LOCK를 사용 형식 : LOCK TABLES <테이블명> [READ | WRITE] -READ LOCK을 사용하면 다른 사용자가 해당 테이블을 읽기만 가능하고 쓰기를 할 때에는 LOCK이 걸린다.(SELECT문은 실행 할 수 있지만 INSERT, UPDATE, DELETE를 실행할 수 없다.) -WRITE LOCK을 사용하면 다른 사용자가 해당테이블에 대해 읽기와 쓰기를 할 때 모두 LOCK이 걸린다.(READ LOCK를 포함한 SELECT문을 실행할 때 LOCK이 걸린다.) -UNLOCK TABLES은 LOCK를 해제할 때 사용한다. 2018-12-30 쉽게 배우는 MySQL 5.x

-학생(STUDENT)테이블과 교수(PROFESSOR)테이블 LOCK mysql> lock tables student read,      -> professor write; Query OK, 0 rows affected (0.00 sec) -LOCK이 걸린 테이블의 내용을 보려면 다음과 같은 select문을 사용 mysql> select stu_name     -> from student     -> where class = 2; +----------+ | stu_name | | 정인정   | | 최차영   | 2 rows in set (0.00 sec) -다른 사용자가 학적테이블에 READ LOCK을 걸었기 때문에 테이블의 정보를 SELECT 할 수는 있어도 INSERT, UPDATE, DELETE를 할 수 없다. -교수테이블은 SELECT도 허용하지 않는다. 또한 데이터베이스를 지우려고 할 때 LOCK 또는 트랜잭션이 걸려있으면 삭제되지 않는다. -LOCK를 해제하는 방법 mysql> unlock tables; 2018-12-30 쉽게 배우는 MySQL 5.x