본문 바로가기

MySQL에 해당하는 글들

22 Articles matched
목록이 없습니다.
[MySQL/MariaDB] 특정 컬럼의 특정 순서대로 정렬하기 (내맘대로 정렬하기) 쿼리를 통해 DB에서 조회를 할 때 내가 원하는 순서대로 구체적으로 말하자면 특정 필드의 순서대로 정렬을 하고 싶은 경우가 있습니다. 이런 경우 ORDER BY 절에 FIELD라는 키워드를 통해서 구현할 수 있는 방법을 정리해보려고 합니다. ORDER BY FIELD 예를들어 다음과 같은 구조의 테이블 TB_EXAMPLE이 있다고 가정을 해봅니다. TB_EXAMPLE SEQ, NAME, STATUS 데이터는 아래와 같다고 가정합니다. (1, 'TEST1', 'ST01') (2, 'TEST2', 'ST01') (3, 'TEST3', 'ST01') (4, 'TEST4', 'ST03') (5, 'TEST5', 'ST02') (6, 'TEST6', 'ST01') 이런 상황에서 보통 STATUS라는 컬럼을 기준으..
[MYSQL, MARIADB] log 생략 (disable logging) mysql나 mariadb를 사용하여 데이터를 저장하는데 엄청난 양의 데이터를 insert하는 경우가 생겼습니다. 그런데 DB서버에 DB만 존재하는것이 아니고 Elasticsearch며 여러 다른 어플리케이션이 함께 올라가있었는데 ES에서 가장 먼저 반응이 왔습니다. disk가 95% 이상 사용중인 상태가 되어버리면 ES에서는 모든 인덱스를 read-only 상태로 전환이 되는 현상이었습니다. 그래서 디스크가 저렇게 많은 용량을 점유하게 된 원인을 찾아보니 mariadb의 log에 있었습니다. mariadb는 insert나 update 즉 DML 을 사용하게 되면 undo를 위해서 많은 log를 쌓게 되는데요, 만약 대용량 데이터를 쌓는데 저처럼 log가 필요없다거나 하는 경우 log를 생략(disabl..
[MySQL] 테이블 복사 테이블 구조만 복사 CREATE TABLE NEW_TABLE_NAME LIKE OLD_TABLE_NAME; 테이블 데이터만 복사 INSERT INTO DESTINATION_TABLE_NAME (SELECT * FROM SOURCE_TABLE_NAME); 테이블 구조 및 데이터 복사 CREATE TABLE NEW_TABLE_NAME (SELECT * FROM OLD_TABLE_NAME);
[MySQL] ERROR 1267 (HY000): Illegal mix of collations 해결 가끔 데이터를 정제할 때 다른 테이블에 있는 데이터를 조회해서 정제할 테이블에 UPDATE문으로 수정해주는 경우가 있는데요 이럴 때 가끔 정제하려는 테이블과 데이터를 조회하는 테이블의 Collation이 달라서 에러가 발생하는 경우가 있습니다. 현재 포스팅의 제목이 바로 그 에러인데요 어떻게 해결하는지 알아봅시다. 에러 메시지 ERROR 1267 (HY000): Illegal mix of collations (utf8_general_ci,IMPLICIT) and (utf8_unicode_ci,IMPLICIT) for operation '=' 위의 에러 메시지는 보통 가장 많이 쓰는 Collation인데요 테이블을 조회할 때 조건절에서 서로 다른 Collation의 값을 비교하면 나오는 에러입니다. 해결 ..
[MySQL] ERROR 1118 (42000) : Row size too large (> 8126)... ERROR ERROR 1118 (42000) at line 3117: Row size too large (> 8126). Changing some columns to TEXT or BLOB or using ROW_FORMAT=DYNAMIC or ROW_FORMAT=COMPRESSED may help. In current row format, BLOB prefix of 768 bytes is stored inline. 해당 에러가 발생한 경우 해당 테이블의 Row의 Size가 너무 큰 것을 의미합니다. 이는 엑셀로 데이터를 집어넣을 때는 문제가 생기지 않는 듯 보이는데요. 만약 덤프를 밀어넣는 작업에서 위의 에러가 발생한 경우 아래와 같이 임시적으로 해결할 수 있는 방법이 있습니다. 1. root계정 접속..
[MySQL] 특정 테이블만 dump를 할 순 없을까? (how to backup specific table?) 운영서버에 있는 환경을 그대로 로컬에 가져와서 유지보수를 해야하는 경우가 있습니다. 그럴 때 운영서버에 있는 DB의 최신 데이터를 가져오기 위해서 Dump를 해서 로컬에 있는 DB에 덮어씌워주는데 이미 동일한 구조이고 특정 테이블의 최신 데이터만 필요하다면 운영서버의 DB 전체를 Dump할 필요 없이 특정 테이블만 Dump하여 로컬에 가져올 수 있습니다. 방법 $ mysqldump -u username -p DBname TableName > dump.sql 간단하지만 막상 쓰려하면 생각이 안나 항상 블로그를 찾습니다. 더 이상 까먹지 안도록 정리해둡시다!
[MySQL] 하위(자식) 시퀀스로 상위(부모) 시퀀스를 접근할 순 없을까? 종종 댓글과 같은 구조로 되어 있는 페이지를 개발할 때가 있습니다. 이번 포스팅의 계기는 카테고리를 구성한 DB에서 하위 카테고리 시퀀스 하나로 모든 상위 카테고리를 한번에 가져오고 싶은 생각에 구글링을 시작하게 되었고 좋은 방법을 찾아서 정리하고자 포스팅을 하게 되었습니다. WITH RECURSIVE (MySQL) WITH RECURSIVE TTR (TECHCATEID, ORD_LEVEL, TECHCATEPID) AS ( SELECT TECHCATEID, ORD_LEVEL, TECHCATEPID FROMTCD_TECHCATE_REL WHERE TECHCATEID = #{techcateid} UNION ALL SELECT R.TECHCATEID, R.ORD_LEVEL, R.TECHCATEPID FROMT..
MySQL IN 절 안에 있는 순서대로 정렬하기 SQL 쿼리를 짜다보면 정렬을 내 맘대로 하고싶은 경우가 있는데 나는 쿼리는 진짜 부족한 편이라 구글링을 많이 하는 편이에요. 이번에는 구글링하다가 이렇게도 되는구나 깨달아서 정리해놓으려고 해요. 저는 MySQL이나 MariaDB를 많이 사용하는데 둘의 차이는 현재로선 거의 없다고 보면 돼요. 상황은 데이터를 가져오는데 IN 구문 안에 PRIMARY KEY 값을 나열하여 해당하는 데이터만 필터링하는 식이에요. 그런데 가져와놓고 보니 내가 원하는 정렬 순서는 IN 구문 안의 PRIMARY KEY의 순서인데 이게 자동으로 PRIMARY KEY값으로 정렬이 되어 나오는것 때문에 View 영역에 예상과는 다른 결과물이 나왔어요. 상황 SELECT * FROM TABLE WHERE KEY IN (2, 1, 3) ..