Transaction & Lock
MySQL λμμ±(μ¬λ¬ μμ²μ΄ νλμ μ κ·Όνλ κ²½μ°)μ μν₯μ λ―ΈμΉλ μμλ€μ μ©μ΄λ₯Ό λ¨Όμ μ 리νμ.
Transaction
- λ°μ΄ν°μ μ ν©μ±μ 보μ₯νκΈ° μν κΈ°λ₯
- db read, writeμμ μ λ Όλ¦¬μ μΌλ‘ λ¬Άλ λ°©μ
- νΈλμμ μΌλ‘ λ¬Άμ μμ μ΄ μ±κ³΅νλ©΄ commit, μ€ν¨ μ rollbackμ νλ―λ‘ λΆλΆμ±κ³΅, λΆλΆ μ€ν¨(Partial Update)μ μνμ΄ μμ
Lock
- λμμ±μ μ μ΄νκΈ° μν κΈ°λ₯
- μ¬λ¬ 컀λ₯μ μμ λμμ λμΌν μμμ μμ²ν κ²½μ° μμλλ‘ νλμ 컀λ₯μ λ§ λ³κ²½ν μ μκ² νλ μν
Isolation level
- λμμ νλ λλ μ¬λ¬ νΈλμμ μ΄ μ§νλ λ, λ€λ₯Έ νΈλμμ μμ λ³κ²½λ λ°μ΄ν°λ₯Ό μ‘°ννλ κΈ°μ€
- μΌλ°μ μΈ μλΉμ€μμλ Read Commited, Repeatable Readλ₯Ό μ¬μ©
MySQL μμ§μ μ κΈ
Global Lock
FLUSH TABLES WITH READ LOCK
Lock μ’ λ₯ μ€ λ²μκ° κ°μ₯ λλ€.
Global Lock νλ μ λ€λ₯Έ μΈμ μμ SELECT μ μΈν DDL, DML μμ μ Global Lockμ΄ ν΄μ λκΈ°μ κΉμ§ λκΈ°μνλ‘ λ¨λλ€.
ν μ΄λΈ λ½
κ°λ³ ν μ΄λΈ λ¨μλ‘ μ€μ λλ μ κΈ
LOCK TABLES table_name [READ | WRITE] --μ κΈ
UNLOCK TABLES --μ κΈν΄μ
MyISAM, Memoryν μ΄λΈμ λ°μ΄ν°λ₯Ό λ³κ²½νλ 쿼리 μ€ν μ 묡μμ μΈ ν μ΄λΈ λ½ λ°μ
λ³κ²½λλ ν μ΄λΈμ μ κΈμ μ€μ νκ³ ν μ΄λΈμ μ κ·Έκ³ λ°μ΄ν° λ³κ²½μ΄ μΌμ΄λ λ€, μ¦μ Lockμ ν΄μ νλ€.
InnoDbμμλ μ€ν λ¦¬μ§ μμ§ μ°¨μμμ λ μ½λ κΈ°λ°μ μ κΈμ μ 곡νλ―λ‘ λ¬΅μμ μΈ ν μ΄λΈ λ½μ΄ λ°μνμ§ μλλ€.
λ€μλ λ½
GET_LOCK(); ν¨μλ₯Ό μ΄μ©ν΄ μμμ λ¬Έμμ΄μ λν΄ μ κΈ μ€μ
λ¨μ μ¬μ©μκ° μ§μ ν λ¬Έμμ΄μ λν΄ νλ λ° λ°λ©νλ μ κΈ.
λ€μλλ½μ μμ£Ό μ¬μ©λμ§μλλ€.
λ©νλ°μ΄ν° λ½
ν μ΄λΈ, λ·° λ±μ μ΄λ¦μ΄λ ꡬ쑰λ₯Ό λ³κ²½νλ κ²½μ° νλνλ μ κΈ
λͺ μμ μΈ νλμ΄ λΆκ°νλ©°, μλμ κ°μ΄ ν μ΄λΈλͺ μ λ³κ²½ μ μλμΌλ‘ νλλλ€.
RENAME TABLE tab_a TO tab_b