[스터디] Real MySQL 8.0 1권 - 5장 트랜잭션과 잠금 정리
·
Database/MySQL
트랜잭션트랜잭션이란?데이터 정합성을 보장하는 기능정합성: (서로 다른 커넥션에서) 데이터가 서로 일치하는 상태작업의 완전성을 보장해 주는 기능작업의 완전성: 논리적인 작업을 모두 완벽하게 처리 or 처리 실패 시 모두 원 상태로 복구해서 부분 업데이트를 방지하는 기능MySQL의 트랜잭션논리적인 작업 셋 자체가 (COMMIT 할 때) 100% 적용 되거나 (ROLLBACK or ROLLBACK 자체가 오류가 발생했을 때) 아무것도 적용되지 않음을 보장해주는 것한 개의 쿼리에서 여러 값을 저장할 때 MyISAM과 InnoDB의 차이MyISAM ❌: 트랜잭션 지원 X => 실패된 부분만 롤백 (부분 업데이트) => 찌꺼기 데이터를 별도로 지우는 코드가 필요InnoDB ✅: 트랜잭션 지원 O => 모두 롤백 (..
[MySQL] INSERT 할 때, 마지막 PK 값에서 1씩 증가시키는 방법
·
Database/MySQL
서론pk가 `auto_increment` 로 설정하지 않을 때 사용하는 방법입니다.MySQL 서버에 변수를 저장하고, 저장한 변수를 재사용하는 방식으로 해결합니다. 대입 연산자와 함께 변수를 저장하는 방법은 `SET @{변수명} := {저장할 값}` 입니다.예시 쿼리SET @last_id := (SELECT MAX(id) FROM gsheet_interaction_table);SELECT @last_id:=@last_id+1, S.ct_id, P.platform 플랫폼, S.t_id, T.monitoring_title 작품명, S.url, TRIM(S.rt) 영상길이, S.i_idFROM monitoring_db.scraping_data_table SJOIN platform_list P ON P.p..
[MySQL] AUTO_INCREMENT 초기화하는 방법
·
Database/MySQL
이번 포스팅은 근본적인 문제 해결은 아니지만, PK의 값을 초기화하고 1부터 연속적인 수로 바꾸는 방법에 대한 글입니다.서론보통 스키마를 구성할 때, PK에 `auto_increment`를 설정하는 경우가 많습니다.`auto_increment`는 편리함을 제공하지만 `INSERT IGNORE 문`을 사용했을 때, 또는 `UPSERT 문`을 사용했을 때 따라오는 `ON DUPLICATE KEY UPDATE` 에 의해 중복 데이터를 INSERT 하지 못함에도 PK 값은 `+1 씩 증가`하게 됩니다. auto_increment 초기화 쿼리ALTER TABLE [테이블] AUTO_INCREMENT=1; -- [테이블]의 AUTO_INCREMENT를 1로 초기화한다.SET @CNT = 0; -- @CNT 변수의..
[MySQL] 테이블 내 중복 데이터 삭제
·
Database/MySQL
서론테이블에 UNIQUE 제약 조건이 없거나, 모종의 이유(?)로 중복 값이 들어있는 경우가 있다.아래의 쿼리를 사용하면 pk가 가장 작은 값은 살아남고, 나중에 들어온 중복 값들을 찾아 삭제한다.이 쿼리를 실행하기 전, 반드시 백업을 해놓고 실행하는 것을 권장한다.중복 제거 쿼리DELETE aFROM [테이블 이름] a, [테이블 이름] bWHERE a.[pk 컬럼] > b.[pk 컬럼] AND a.[중복 값이 들어있는 컬럼] = b.[중복 값이 들어있는 컬럼]; 주의 사항`테이블 이름`은 2개를 작성하지만, 테이블 이름은 똑같아야 한다.마찬가지로 `pk 컬럼`도 똑같은 이름을 작성해야하며, `중복 값이 들어있는 컬럼`도 마찬가지다.사용 예시DELETE aFROM test_db.user a, test_..
[MySQL] 프로세스 확인과 프로세스 죽이기
·
Database/MySQL
MySQL Workbench를 통해 스키마를 수정하거나, 조회를 할 때 종종 이런 에러가 발생한다.Error Code: 2013. Lost connection to MySQL server during query원인은 2가지 정도로 보인다.`쿼리 수행 시간`이 `제한 시간`보다 초과되서 강제로 연결이 끊어짐특정 쿼리에서 `교착상태`가 발생 이번 글은 `교착상태`가 원인일 때 해결하는 방법이다. 프로세스 확인show processlist;여기서 팁스토리님의 글을 참고하여, 각 컬럼의 뜻을 보자.ID : 클라이언트의 프로세스 ID (스레드 번호)USER : 프로세스와 관련된 사용자 이름 (스레드에 접속하고 있는 MySQL 유저명)HOST : 클라이언트가 연결된 호스트 (유저가 접속하고 있는 호스트명 및 IP주..