MySQL (11) 썸네일형 리스트형 MySQL Lock Deadlock (1) 기본편 해리포터에 모두가 두려워하는 존재 볼드모트가 있다면, 데이터베이스 세계에서는 Deadlock이 있습니다. 원인은 다양한데, Deadlock은 100%확률로 발생하지도 않지만, 발생하고 나서는 원인을 찾기도 어렵습니다. 실제로 Deadlock이 발생하는 증상을 재현시켜 보겠습니다. 먼저 테스트를 위한 테이터를 입력합니다. CREATE TABLE users ( id INTEGER AUTO_INCREMENT PRIMARY KEY, username VARCHAR(255) UNIQUE NOT NULL, created_at TIMESTAMP DEFAULT NOW() )Engine=InnoDB CHARSET=utf8; INSERT INTO users (username, created_at) VALUES ('Kento.. MySQL lock (1) 테이블에 대한 잠금(table lock) 간단하게 테이블에 대한 S lock과 X lock에 대해서 알아보겠습니다. S는 shared 이고, X는 exclusive 를 의미하는데, 줄여서 많이 사용됩니다. 보통 흔히 S lock과 X lock은 row lock에 대해서 많이 언급됩니다. 하지만, table lock이 매우 이해하기 쉽기 때문에, 먼저 설명하겠습니다. 먼저 테스트용 데이터베이스와 테이블을 생성합니다. create database test_db_210926; use test_db_210926; CREATE TABLE users ( id INTEGER AUTO_INCREMENT PRIMARY KEY, username VARCHAR(255) UNIQUE NOT NULL, created_at TIMESTAMP DEFAULT NOW() ).. MySQL 트랜잭션 이해하기 트랜잭션은 데이베이스에 대한 하나의 조작 단위라고 정의할 수 있습니다. 데이터베이스에 대한 조작을 트랜잭션 단위로 관리해서, 여러 사용자가 같은 데이터에 대해서 동시에 복수의 읽기나 변경작업을 관리할 수 있게 됩니다. 하지만, 트랜잭션으로 관리해도 문제가 남아있습니다. Dirty read Read중에 Update하는 경우입니다. 데이터 일부가 잘못되는 Dirty read가 일어날 수 있습니다. 가령, Update 중에 rollback이 되는 데이터를 Read한 경우가 이에 해당합니다. 트랜잭션 1 트랜잭션 2 비고 start transaction; start transaction; Update x, old value x = 1, new value x = 2 Read x, x = 2 (dirty read).. 이전 1 2 다음