MySQL (8) 썸네일형 리스트형 [스터디] Real MySQL 8.0 1권 - 5장 트랜잭션과 잠금 정리 트랜잭션트랜잭션이란?데이터 정합성을 보장하는 기능정합성: (서로 다른 커넥션에서) 데이터가 서로 일치하는 상태작업의 완전성을 보장해 주는 기능작업의 완전성: 논리적인 작업을 모두 완벽하게 처리 or 처리 실패 시 모두 원 상태로 복구해서 부분 업데이트를 방지하는 기능MySQL의 트랜잭션논리적인 작업 셋 자체가 (COMMIT 할 때) 100% 적용 되거나 (ROLLBACK or ROLLBACK 자체가 오류가 발생했을 때) 아무것도 적용되지 않음을 보장해주는 것한 개의 쿼리에서 여러 값을 저장할 때 MyISAM과 InnoDB의 차이MyISAM ❌: 트랜잭션 지원 X => 실패된 부분만 롤백 (부분 업데이트) => 찌꺼기 데이터를 별도로 지우는 코드가 필요InnoDB ✅: 트랜잭션 지원 O => 모두 롤백 (.. [Querydsl] MySQL 공간 데이터(Point)의 반경 검색 (ST_CONTAINS) 이번 포스팅에선 숙소 예약 프로젝트를 진행하며 Querydsl로 공간 데이터를 조건으로하는 표현식(Expression)에 대해 알아보겠습니다.기본 환경 및 의존성기본 환경과 의존성은 다음과 같습니다.- Java 17- Spring Boot 3.3.0- DB: MySQL 8.0- ORM: querydsl 5.1.0- 공간 데이터 의존성: hibernate-spatial 6.5.2Entity@Entitypublic class Stay { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "STAY_ID") private Long id; @Column(name = "POINT", columnDefinitio.. [python] pymysql로 INSERT 할 때, 마지막 PK 값에서 1씩 증가시키는 방법 처음만나는 에러 python의 pymysql 라이브러리를 이용해서 MySQL 데이터베이스 내 특정 테이블에 INSERT를 할 때, 아래 예시와 같이, SET~; 문과 INSERT ~ SELECT; [테이블 속성1, 테이블 속성2, ...] 문 2개를 한 번에 실행해서 INSERT를 하는 경우가 있다. # 데이터베이스 INSERT 쿼리 : GolfMember 테이블에 있는 멤버의 id와 name을 Member 테이블에 추가 (중복시 name 업데이트) last_id_query = ''' SET @last_id := (SELECT MAX(id) FROM Member); -- Member 테이블의 마지막 pk 값을 변수로 저장 INSERT INTO Member (`id`, `name`) SELECT @last.. [MySQL] INSERT 할 때, 마지막 PK 값에서 1씩 증가시키는 방법 서론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 초기화하는 방법 이번 포스팅은 근본적인 문제 해결은 아니지만, 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] 테이블 내 중복 데이터 삭제 서론테이블에 UNIQUE 제약 조건이 없거나, 모종의 이유(?)로 중복 값이 들어있는 경우가 있다.아래의 쿼리를 사용하면 pk가 가장 작은 값은 살아남고, 나중에 들어온 중복 값들을 찾아 삭제한다.이 쿼리를 실행하기 전, 반드시 백업을 해놓고 실행하는 것을 권장한다.중복 제거 쿼리DELETE aFROM [테이블 이름] a, [테이블 이름] bWHERE a.[pk 컬럼] > b.[pk 컬럼] AND a.[중복 값이 들어있는 컬럼] = b.[중복 값이 들어있는 컬럼]; 주의 사항`테이블 이름`은 2개를 작성하지만, 테이블 이름은 똑같아야 한다.마찬가지로 `pk 컬럼`도 똑같은 이름을 작성해야하며, `중복 값이 들어있는 컬럼`도 마찬가지다.사용 예시DELETE aFROM test_db.user a, test_.. [MySQL] 프로세스 확인과 프로세스 죽이기 MySQL Workbench를 통해 스키마를 수정하거나, 조회를 할 때 종종 이런 에러가 발생한다.Error Code: 2013. Lost connection to MySQL server during query원인은 2가지 정도로 보인다.`쿼리 수행 시간`이 `제한 시간`보다 초과되서 강제로 연결이 끊어짐특정 쿼리에서 `교착상태`가 발생 이번 글은 `교착상태`가 원인일 때 해결하는 방법이다. 프로세스 확인show processlist;여기서 팁스토리님의 글을 참고하여, 각 컬럼의 뜻을 보자.ID : 클라이언트의 프로세스 ID (스레드 번호)USER : 프로세스와 관련된 사용자 이름 (스레드에 접속하고 있는 MySQL 유저명)HOST : 클라이언트가 연결된 호스트 (유저가 접속하고 있는 호스트명 및 IP주.. [MySQL] 계정 조회, 계정 생성, 계정 삭제, 권한 조회, 권한 부여, 권한 삭제 워크프레임 MySQL Workbench 8.0 등록된 계정 확인 # mysql 데이터베이스 접근, 최초 한 번만 사용. use mysql; # 등록되어있는 계정 조회. password는 암호화되어 정확한 확인이 불가 SELECT host, user, password FROM user; 계정 생성 # 사용방법 CREATE user '아이디'@'접근허용 ip' IDENTIFIED BY '비밀번호'; # local 환경에서만 접근 허용할 때 -> 'localhost' CREATE user 'temp_id'@'localhost' IDENTIFIED BY 'abcd'; # 외부 모든 ip에서 접근 허용할 때 -> '%' CREATE user 'temp_id'@'%' IDENTIFIED BY 'abcd'; # 외부.. 이전 1 다음