잠시만 기다려 주세요

     '월급 200 받는 사람이 국회의원 되는 그날까지... 슈퍼기득권 전부 아웃... 국회의원 봉사직 전환을 꿈꾸며... '
전체검색 :  
이번주 로또 및 연금번호 발생!!   |  HOME   |  여기는?   |  바다물때표   |  알림 (18)  |  여러가지 팁 (1093)  |  추천 및 재미 (159)  |  자료실 (28)  |  
시사, 이슈, 칼럼, 평론, 비평 (751)  |  끄적거림 (138)  |  문예 창작 (717)  |  바람 따라 (75)  |  시나리오 (760)  |  드라마 대본 (248)  |  
살인!


    mariadb, mysql

mariadb, mysql - MySQL - LOCK을 이용해 트랜잭션 구현, MyISAM 트랜잭션, 잠금, 락
이 름 : 바다아이   |   조회수 : 5947         짧은 주소 : 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 / 2 page
번 호 카테고리 제 목 이름 조회수
38 mariadb, mysql mariadb ... ??? maintained.... . 바다아이 93
37 mariadb, mysql mariadb, mysql max_connections , ,   .... my.cnf 바다아이 245
36 mariadb, mysql mariaDB,MYsql , 바다아이 282
35 mariadb, mysql mariadb, mysql (Character set) (Collation) , .... 바다아이 315
34 mariadb, mysql mariadb 11.4 root ... 바다아이 300
33 mariadb, mysql Mysql, mariadb The table '' is full 바다아이 2635
32 mariadb, mysql Mariadb MySQL , mysql mariadb ... , mariadb mysql ... , mariadb , mysql ... 바다아이 2436
31 mariadb, mysql MariaDB , ... 바다아이 3151
30 mariadb, mysql MYSQL Locked , , 바다아이 7275
현재글 mariadb, mysql MySQL - LOCK , MyISAM , , 바다아이 5948
28 mariadb, mysql mysql Index , 바다아이 8680
27 mariadb, mysql MySQL DB , 바다아이 13906
26 mariadb, mysql mysql, mariadb , , , , left, substring, right, concat 바다아이 11844
25 mariadb, mysql mysql, mariadb DISTINCT GROUP BY 바다아이 12110
24 mariadb, mysql mysql 5.x my.cnf 바다아이 10210
23 mariadb, mysql mysql lock , 바다아이 11294
22 mariadb, mysql , MySQL, mariadb , 바다아이 11513
21 mariadb, mysql mysql , , , unixtime 바다아이 14872
20 mariadb, mysql Mysql , Join (Left, Right, Outer, Inner Join) 바다아이 10008
19 mariadb, mysql mariadb, MySQL 17 바다아이 12753
18 mariadb, mysql mysql, mariadb 바다아이 10526
17 mariadb, mysql mysql .. time 바다아이 9936
16 mariadb, mysql Mysql(MariaDB) ? 바다아이 10964
15 mariadb, mysql [MySQL] ,insert 바다아이 11181
14 mariadb, mysql [MySQL] - SQL 바다아이 10687
13 mariadb, mysql MySQL JOIN UPDATE 바다아이 10464
12 mariadb, mysql mysql update 바다아이 11065
11 mariadb, mysql mysql storage engine myisam vs innodb 바다아이 10332
10 mariadb, mysql Mysql Replication Master DB Slave DB 바다아이 10925
9 mariadb, mysql Mysql 바다아이 10120
| |









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