'MySQL'에 해당되는 글 9건

  1. 2013.12.09 MySQL Insert/ Replace/ Lock Tables
2013. 12. 9. 14:24

MySQL Insert/ Replace/ Lock Tables

INSERT 문법

LOW_PRIORITY 옵션

LOW_PRIORITY 옵션은 INSERT를 느리게 한다. 테이블을 SELECT하고 있을 경우 SELECT가 모두

끝날 때까지 기다리는 설정이다.

데이터베이스의 기본은 SELECT가 빠를 경우는 INSERT가 느려지는 것이고, INSERT가 빠를 경우는

SELECT가 느려지는 것이다.

 

DELAYED 옵션

DELAYED 옵션은 INSERT를 매우 유용하게 할 수 있는 방법이다. 부하가 심할 경우나 INSERT

자주 일어날 경우, 주로 사용할 수 있는데 한번에 일정량의 데이터를 삽입하는 기능이다.

ISAM이나 MyISAM 테이블 타입에서만 사용할 수 있다. 적절하지 못하게 사용할 경우는 쿼리

상태가 SLEEP이 될 수 있으니 주의해야 한다. Show variables 명령에서 delayed_insert_timeout

시간이 지나도록 INSERT를 하지 못했을 경우는 데이터를 삽입하지 못하게 될 수 있다.

자주 입력이 되는 사이트일 경우 delayed_queue_size 변수를 적절히 조종해 주어야, 프로세스

상태가 SLEEP 쿼리 상태를 나타내지 않을 수 있다.

 

IGNORE 옵션

IGNORE옵션은 주키나 UNIQUE 키일 경우 동일한 값이 중복으로 입력될 때 오류 발생이

일어나지 않게 하는 것이다. , 오류 발생 메시지만 나타나지 않을 뿐 자료의 입력이 이루어지는

것은 아님을 주의해야 한다.

 

 

REPLACE 문법

REPLACE 문은 INSERT 문과 동일한 기능을 한다. 차이점은 INSERT 문은 주 키나 UNIQUE

인덱스에 중복 데이터가 입력될 경우 입력을 하지 못하지만, REPLACE 문은 주 키나 UNIQUE

인덱스 칼럼에 동일한 내용을 입력할 경우 이전 레코드를 지우고, 현재 입력한 것을 새로

삽입한다. 주 키나 UNIQUE 인덱스 칼럼의 경우 중복 데이터를 입력할 경우 에러가 발생하기

때문에, 그럴 가능성이 있을 경우는 REPLACE문을 사용하는 것이 좋다.


LOCK TABLES/UNLOCK TABLES 문법

LOCK TABLES 문은 테이블을 잠그는 것이다. 내가 사용할 동안 다른 사람이 사용하지 못하게 할

수 있고, 사용해도 읽기만 가능하게 할 수도 있다.

READ LOCK은 테이블을 읽기만 가능하게 하고, 쓰기는 불가능하게 한다.

다른 클라이언트가 READ LOCK 걸린 테이블에 SELECT를 하거나 INSERT를 할 경우는

UNLOCK TABLES 문이 사용되기 전까지 멈춤 상태가 된다.

Mysql> lock tables tblKOKO read;

Mysql> insert into tblKOKO; // ERROR 1009: was locked with a READ lock and can’t be updated

Mysql> unlock tables;

 

READ LOCAL 옵션은 현재 클라이언트는 읽기만 가능하고, 다른 클라이언트는 쓰기와 읽기가 가능

 

WRITE LOCK은 현재 클라이언트만 쓰고, 읽을 수 있으나, 다른 클라이언트는 불가능하다.

UNLOCK TABLES 문을 사용해야 읽거나 쓸 수 있게 된다.

모든 테이블에 READ LOCK을 걸려면 FLUSH TABLES WITH READ LOCK 명령을 사용한다.