MySQL Unique Key
- 데이터를 저장을 하거나 처리를 할때 중복으로 저장이 되는 경우가 있을 수가 있다
- 이때 Unique Key를 설정을 통해 처리를 할수가 있다
Create Table Query
CREATE TABLE table
(
id INT NOT NULL AUTO_INCREMENT,
name VARCHAR(10) NOT NULL,
PRIMARY KEY (id),
UNIQUE INDEX `table_uk_01` (name)
);
ALTER Query
ALTER TABLE table ADD UNIQUE INDEX` table_uk_01` (name)
Tip 아닌 Tip
데이터가 동시에 insert가 되는 경우에는 Duplicate 메시지가 발생이 된다.
- 여러개의 동시에 들어가는 경우(Thread, 멀티 서버 환경) 에는 그중 하나만 insert가 되고 다른 메시지는 에러가 발생이 된다.
- 다른 메시지의 처리가 필요한경우에는 Re-try통해 진행을 한다.
- 2개 이상의 메시지가 발생이되는 경우에는 Duplicate Error Re-try를 통해서도 데이터가 제대로 처리가 되지 않은 경우가 있을수 있기 때문에 낙관적인 Lock (Optimistic Lock)을 이용하여 데이터를 처리를 할 수가 있다.
- 3개이상의 메시지가 동시에 들어온다 -> 1개가 insert되고 2개의 메시지는 에러가 발생이 된다 -> 2개의 메시지는 재처리를 통해 저장된 row update를 한다
- 재처리를 통한 저장된 row update를 할때 순서가 존재를 하지 않기 때문에 2개의 메시지 중 하나만 제대로 처리가 될수있다.
- 이는 JPA에서의 Optimistic Lock를 이용하여 version을 체크함으로써 다시 재처리를 가능하게 할수가 있다.
'Database > MySQL' 카테고리의 다른 글
CHAR와 VARCHAR의 차이 (0) | 2018.12.23 |
---|---|
MySQL Partition Table (0) | 2018.11.05 |
Group By 최대값을 가진 Row를 추출하는 쿼리 (0) | 2018.09.03 |
Mysql Query Plan (0) | 2018.07.24 |
Mysql Index HInts (0) | 2018.07.24 |