2023-06-12 1. 방법 간혹 컬럼에 유니크한 값을 넣는 와중에 Duplicate entry '중복된 값' for key '중복 컬럼' 같은 오류가 발생하곤 한다. 그중에서 문자는 같고 대소문자 여부만 다른 경우의 해결 방안을 알아보자. MySQL에서는 기본적으로 varchar 형은 대소문자 구분 없이 동일한 문자로 판단하기 때문에 대소문자 구분을 할 수 있게 옵션 값을 넣어 주어야 하는데 그 값이 binary 값이다. 해당 옵션을 부여하면, 동일한 문자열이더라도 대소문자가 다를 경우 다른 값으로 인식하여 Duplicate entry '중복된 값' for key '중복 컬럼'오류가 발생하지 않는다. ALTER TABLE 테이블명 MODIFY 컬럼명 varchar(길이) binary not null;..
2023-01-03 1. 방법 show processlis 가 아닌 SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST 쿼리를 통해 조건을 부여할 수 있다. ## 10초 이상 유지중인 프로세스 확인 SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST where Time > 10; ## 프로세스 할당중인 계정 확인 SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST where USER = '계정명'; ## 쿼리중인 프로세스 확인 SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST where COMMAND = 'Query'; 메인 이미지 출처 : Photo by Federico Bottos on..
2022-04-07 현재 MySQL 내에 저장된 이벤트 스케줄러를 확인하는 방법을 알아보자. - 명령어 SHOW EVENTS; 해당 명령어는 현재 DB에 등록된 이벤트 정보를 간단히 확인할 수 있다. 확인할 수 있는 내용으로는 DB명, 이벤트 이름, 이벤트 작성 계정, 타임존, 타입, 인터벌 값 , 인터벌 필드 값 ex) DAY, character set... 등을 확인할 수 있다. SELECT * FROM information_schema.EVENTS; 다음 이벤트의 좀 더 구체적인 정보를 확인할 수 있는 명령어이다. 기본적인 내용을 SHOW EVENT와 동일한 데이터를 보여주지만 추가적으로 이벤트 스케줄러 작성시 실제 쿼리가 동작하는 DO 이후에 쿼리문 또는 프로시저 정보를 확인할 수 있다. 메인 이..
2022-03-21 종종 Mysql 내부의 타임존의 다른 국가로 설정되어 있으면, DML 실행 및 이벤트 스케줄러 설정 시 문제가 발생할 수 있다. 이를 확인 변경하는 방법을 알아보자. - 확인 방법 SELECT @@GLOBAL.TIME_ZONE AS GLOBAL_TIME, @@SESSION.TIME_ZONE AS SESSION_TIME, @@SYSTEM_TIME_ZONE AS SYSTEM_TIME; 우선 확인하는 방법은 위와 같다. 순서대로 전체 DB의 글로벌 타임존 / 현재 접속 세션 / 시스템 시간 설정 정보를 확인할 수 있다. - 변경 방법 SET GLOBAL TIME_ZONE='Asia/Seoul'; 위와 같은 방법으로 간단히 변경할 수 있다. (RDS를 사용하는 유저라면 Amazon RDS >..
2022-03-11 SELECT 쿼리 조회 시 NULL을 리턴하는 경우 어디서 예외처리를 하던 db 에서나 애플리케이션 단에서나 오류가 발생하게 된다. 이와 같은 SELECT 쿼리 조회시 발생할 수 있는 NULL처리를 간단히 하는 함수중 COALESCE에 대하여 알아보자. - 정의 COALESCE(x, y) = (CASE WHEN x IS NOT NULL THEN x ELSE y END) 공식문서에는 위와 같은 형식으로 간단히 그 의미를 표현하고 있다. 이를 해석하면 해당 함수의 매개 값 중 앞에 있는 값(X)이 NULL이 아니면 앞에 값(X)을 아닐 경우 다음 매개변수(Y)를 체크하여, 그 값을 리턴한다. 이해가 어려울 수 있으니 아래의 예시를 보자. - 예시 -- 1을 리턴한다. SELECT COAL..
2022-03-04 DB에 lock 걸리거나 잘못된 select 문으로 대량의 데이터를 불러올 경우 해당 쿼리문을 종료해야 되는 경우가 종종 있다. 이러한 경우에 어떻게 해결하는지 알아보자. - 해결방법 MySQL WrokBrench 든 어디든 해당 DB에 쿼리문을 작성하면 된다. 우선적으로 현재 실행중인 프로세스 정보를 확인한다. show processlist; 위의 명령어를 통해 프로세스 정보를 테이블 형태로 확인할 수 있으며, 자신의 종료하고자 하는 프로세스의 아이디 정보를 기억하자. 여러 컬럼 중 컬럼명 Id라고 나올 것이다. -- Id 값을 숫자 이다. kill 뒤에 자신의 종료하고자 하는 -- Id 즉 숫자로 넣어주면된다. kill 12345 이후 위와 같이 자신의 종료하고자 하는 프로세스의 ..