잠시만 기다려 주세요

전체검색 :  
HOME   |  여기는?   |  바다물때표   |  알림 (4)  |  여러가지 팁 (925)  |  추천 및 재미 (174)  |  자료실 (21)  |  끄적거림 (589)  |  시나리오 (760)  |  드라마 대본 (248)  |  

    mariadb, mysql

mariadb, mysql - MySQL - LOCK을 이용해 트랜잭션 구현, MyISAM 트랜잭션, 잠금, 락
이 름 : 바다아이   |   조회수 : 282         짧은 주소 : https://www.bada-ie.com/su/?151611573883
다중 처리를 하나의 작업단위로 처리하는것을 트랜잭션이라고 합니다.

MySQL 에서는 하나의 MyISAM 테이블에 Insert, Update, Delete SQL 쿼리문을 실행할때
한명의 유저가 액세스를 하게 되면 문제가 없으나 여러명의 유저가 동시에 액세스를 하게되면
잘못된 순서로 데이타 처리가 일어날수 있습니다.

왜냐하면 여러명의 유저가 여러 명령을 하나의 테이블에 한꺼번에 하기 때문이다.

이런경우에는 반드시 일의 단위를 구분짓고 트랜잭션 처리를 해야 한다.



MySQL 에서는 Innodb 라는 테이블 종류로 트랜잭션이 지원하지만 설치를 따로 해야 하고 설정도 따로 해야 하는 단점이 있다.

트랜잭션 기능이 없는 MyISAM 테이블을 사용할때 한테이블에 연속으로 여러 row 처리를 하게되면
모든 처리가 한계정에 한해 차례대로 처리된다는 보장이 없기 때문에 다중 DB처리가 필요할때는
꼭 테이블에 lock과 unlock 처리를 해줘야 합니다.



READ LOCK

lock tables test read;

lock을 건 스레드와 그외 모든 스레드에서 select 만 가능하다.

lock을 건 스레드와 그외 모든 스레드에서 insert, update, delete는 불가능하다.

unlock tables;

lock을 건 스레드에서만 unlock이 가능합니다.

A에서 lock을 걸고 B에서 unlock을 해도 A에서 lock을 건 테이블에 insert,update,delete는 되지 않습니다.
반드시 A에서 unlock을 해야 합니다.

read lock시 다른 유저에서 insert,update,delete을 하게되면?

lock을 건 테이블에 insert,update,delete을 하게되면 대기 모드로 변하게 되며 unlock을 한후에야
대기모드에서 나와 실행모드로 변경되어 실행합니다.


WRITE LOCK

lock tables test write;

-lock을 건 스레드에서만 read,write가 가능하다.

-그외 모든 스레드에서는 read,write가 불가능하다.

unlock tables;

lock을 건 스레드에서만 unlock이 가능합니다.

A에서 lock을 걸고 B에서 unlock을 해도 A에서 lock을 건 테이블에 select,insert,update,delete는 되지 않습니다.
반드시 A에서 unlock을 해야 합니다.

write lock시 다른 유저에서 select,insert,update,delete을 하게되면

lock을 건 테이블에 insert,update,delete을 하게되면 대기 모드로 변하게 되며 unlock을 한후에야
대기모드에서 나와 실행모드로 변경되어 실행합니다.


LOCK이 필요할때

lock table trans read, customer write;
select sum(value) from trans where customer_id=some_id;
update customer set total_value=sum_from_previous_statement
where customer_id = some_id;
unlock tables;


여기서 lock tables을 사용하지 않았을 경우, select와 update을 하는 잠깐 사이에
다른 스레드에서  trans테이블의 값을 바꿀수 있기 때문에 lock tables을 사용해야 합니다.



주의 : 만약 테이블 잠겨서 문제 생기면 mysql 을 재시작 하시면 됩니다.


출처 : http://www.zetblog.net/

2차 출처: https://blog.pages.kr/131


p.s
가급적 테이블 형식은  MyISAM 보다는 innodb 를 사용하시길 권합니다. 트랜잭션이 지원되니까요..
안정성 면에서도 innodb 가 좋습니다.
 
| |


      1 page / 1 page
번 호 카테고리 제 목 이름 조회수
30 mariadb, mysql MYSQL Locked , , 바다아이 259
현재글 mariadb, mysql MySQL - LOCK , MyISAM , , 바다아이 283
28 mariadb, mysql mysql Index , 바다아이 1132
27 mariadb, mysql MySQL DB , 바다아이 1323
26 mariadb, mysql mysql, mariadb , , , , left, substring, right, concat 바다아이 3452
25 mariadb, mysql mysql, mariadb DISTINCT GROUP BY 바다아이 3102
24 mariadb, mysql mysql 5.x my.cnf 바다아이 3151
23 mariadb, mysql mysql lock , 바다아이 4215
22 mariadb, mysql , MySQL, mariadb , 바다아이 4085
21 mariadb, mysql mysql , , , unixtime 바다아이 4730
20 mariadb, mysql Mysql , Join (Left, Right, Outer, Inner Join) 바다아이 3581
19 mariadb, mysql mariadb, MySQL 17 바다아이 4049
18 mariadb, mysql mysql, mariadb 바다아이 3814
17 mariadb, mysql mysql .. time 바다아이 3858
16 mariadb, mysql Mysql(MariaDB) ? 바다아이 4263
15 mariadb, mysql [MySQL] ,insert 바다아이 4589
14 mariadb, mysql [MySQL] - SQL 바다아이 3982
13 mariadb, mysql MySQL JOIN UPDATE 바다아이 3705
12 mariadb, mysql mysql update 바다아이 4135
11 mariadb, mysql mysql storage engine myisam vs innodb 바다아이 3777
10 mariadb, mysql Mysql Replication Master DB Slave DB 바다아이 4791
9 mariadb, mysql Mysql 바다아이 3803
8 mariadb, mysql MySQL Partition , 바다아이 5477
7 mariadb, mysql MySQL Session() ( ) 바다아이 4249
6 mariadb, mysql mysql ... 바다아이 3849
5 mariadb, mysql UNION (Mysql table ) 바다아이 4608
4 mariadb, mysql mysql 바다아이 3613
3 mariadb, mysql mysql , , . 바다아이 3603
2 mariadb, mysql sql 바다아이 3824
1 mariadb, mysql mysql . 바다아이 4553
| |








Copyright ⓒ 2001.12. bada-ie.com. All rights reserved.
이 사이트는 리눅스에서 firefox 기준으로 작성되었습니다. 기타 브라우저에서는 다르게 보일 수 있습니다.
[ Ubuntu + GoLang + PostgreSQL ]
서버위치 : 오라클 클라우드 춘천  실행시간 : 0.03539
to webmaster... gogo sea. gogo sea.