티스토리 뷰
Gatsby로 블로그 마이그레이션을 하여 이 링크를 클릭하면 해당 포스팅으로 갑니다.
감사합니다.
MYSQL
개인적으로 모르는 부분 적어두고 알게 되는 부분에 대해서 간단하게 정리해둔 자료입니다.
미 답변중에 알고 계신 부분 있으면 코멘트 달아주세요. 감사합니다.
[미 답변 질문]
-
[답변완료]
1. 테이블 생성시 InnoDB를 왜 설정해야 하나?
MySQL의 Storage Engine에는 여러 가지가 존재합니다. 제일 많이 사용되는 버전은 MyISAM와 InnoDB입니다. 테이블 생성시 어떤 엔진을 사용할 지 설정할 수 있습니다.
참고
-
MyISAM vs. InnoDB
2. 왜 auto_increment를 하면 1로 증가하지 않고 4씩 증가하나?
기본 설정은 1씩 증가하지만 auto_increment_increment 값을 다르게 설정하면 지정한 값만큼 증가하게 됩니다.
mysql> show variables like 'auto_inc%’;
참고
3. Sql 문구에서 가끔씩 '@변수 := …’ 를 발견했다. 무슨 의미일까?
사용자 정의 변수를 저장할 때 사용합니다. 이 경우에는 SELECT로 구한 media_no 값을 mediaNo 변수에 저장합니다.
참고
4. COUNT(*) vs COUNT(1) vs COUNT(pk)의 차이점?
-
COUNT(*)
-
행의 개수를 카운트한다
-
NULL도 포함해서 카운트한다
-
COUNT(1)
-
행의 개수를 카운트하지만, 하나의 테이블에 대해서만 쿼리가 되고 JOIN한 Table 쿼리를 안된다
-
사용하지 말라는 의견이 있다
-
COUNT(pk)
-
NULL아 아닌것만 카운트한다
참고
5. IFNULL() 함수?
IFNULL(expression, alt_value) 형식으로 expressoin이 NULL이면 alt_value를 반환합니다.
참고
6. 'order by 2,1’는 어떻게 정렬을 하라는 건가?
두번째 컬럼으로 정렬하고 중복 값이 있는 경우에는 첫번째 컬럼으로 정렬하라는 의미입니다.
참고
7. MySQL Error 1093 : You can’t specify target table ..for update in FROM clause가 발생하는 경우, 어떻게 처리하면 되나?
아래 SQL 실행시 오류가 발생하였습니다.
UPDATE `tmon_media`.`media_external_trans`
SET use_yn = 'Y'
WHERE trans_seqno IN (SELECT trans_seqno FROM media_external_trans as t where t.trans_seqno > 3162);
원인은 MySQL은 Oracle과 달리게 UPDATE나 DELETE 할때 자기 테이블의 데이터를 바로 사용하지 못하는 이슈가 있어서 서브 쿼리를 하나 더 생성하여 임시 테이블을 만들어서 해결하면 됩니다.
해결
참고
8. MySql에서 모든 query에 대해서 로깅을 하려면 어떻게 해야 하나?
MySql 설정에서 general_log을 활성화시켜면 됩니다.
mysql> set global general_log=ON;
mysql> show variables like ‘general%’;
참고
9. MySql에서 general_log가 활성화되어 있지 않는 경우 query를 확인하는 방법은 없나?
MySql 실행시 모든 명령문을 bin log로 저장한다면 확인할 수 있습니다. bin log 로그 분석에 대한 자세한 사항은 아래 링크를 참조해주세요.
참고
10. Slow Query란?
Slow Query란 말 그래도 query 수행시 오래 걸리는 쿼리를 의미합니다.
참고
'database' 카테고리의 다른 글
Q&A : Mybatis 관련 질문 모음 (0) | 2019.03.23 |
---|---|
Q&A : JPA 관련 질문 모음 (0) | 2019.03.22 |
관계형 데이터베이스 설계 및 구축 (2) | 2019.02.06 |
관계형 데이터베이스에서 조인(join)이란? (0) | 2018.12.09 |