본문 바로가기

Database

[MySQL] warning (경고) 메시지를 출력하자 안녕하세요 마푸입니다. MySQL을 관리하다보면 가끔씩 경고 메시지를 출력하는 경우를 볼 수 있습니다. MSSQL은 경고 메시지를 출력해도 무슨 이유때문에 경고를 뱉는지 알려주는데...My는 무슨 이유인지 꽁꽁 숨겨놓습니다. 사실 이러한 경우는 보통 터미널이나 Putty와 같은 콘솔 연결에서는 모두 출력이 되지만 SQL Browser로 연결해서 쿼리를 실행할 경우 이러한 문제에 당면(?) 할 수 있습니다. 결론부터 말씀드리면 "연결 설정 때문"인데요 연결 설정을 수정하면 되겠지만 미리 설정하지 않은 상황이라해도 볼 수 있는 명령어는 얼마든지 있습니다. 아래는 예전에 정리한 내용을 옮겨 적습니다. 제목 : 경고 메시지 출력 Mysql에서는 경고를 숫자로 카운트하고 보여주지 않습니다. 하지만 아래의 명령어로.. 더보기
[MSSQL] 재귀 CTE를 이용한 계층구조 조회하기 안녕하세요 마푸입니다. 오늘도 "하루 1 포스트"를 달성하기 위해서 늦은시간에 포스트를 작성합니다 데이터베이스를 설계를 하거나 시스템을 분석하다보면 가끔씩 재미있는 상황에 도달하게 됩니다. 바로 테이블 자체의 sequence number가 같은 테이블에서 다른 필드에 참조 되는 경우입니다. 데이터베이스를 학습할때 가장 많이 배우는 테이블 중 하나인 employee 관계에서 쉽게 접할 수 있는 현상인데요 바로 각 점원마다 등급이 있고 각 상급자가 하급자에게 멘티와 멘토 관계에 있는 경우입니다. 멘티와 멘토가 아니더라도 관리자와 사원등의 관계도 해당이 되겠지요 이러한 경우 도출 대상의 결과 테이블과 상급자의 테이블을 조인하기 위해서는 상당히 복잡한 쿼리가 생성이 되는데요 MSSQL에서는 정통적으로 두가지 방.. 더보기
[MSSQL] HashBYTES 함수를 이용한 암호화 안녕하세요 마푸입니다. 오늘은 결혼식을 다녀와서 몸이 많이 피곤하네요 ㅋ; 1일 1회 이상 블로그 포스트를 다짐한터라 포스트를 작성하러구 이것저것 뒤져봤는데 마침 예전에 정리했던 자료 중에 재미 있는게 있어 옮겨 적어 보려합니다. MySQL에서는 password()라는 문자열 함수가 있습니다. 단방향성 암호라서 보호화가 안되지요... 그러나 오픈소스의 한계로 암호화하는 방식이 공개되어있어서 디코딩이 가능합니다. (* 암호화 방식이 지금은 기억이 안나네요 ㅋ;; 한참 공부할때는 외웠었는데 ㅁ...ㅠ.ㅠ) 어쨋든 MSSQL에도 이것과 비슷한 함수가 있습니다. hashbytes 함수인데요 이것과 관련해서 예전에 정리한 글을 올려보겠습니다. -- HashBYTES 함수를 이용한 암호화 장점 : 1. 암호화를 위.. 더보기
[MSSQL] temp DB설정 Temp DB는 MSSQL에서 많은일을 수행합니다. MSDN에서 보면 아래와 같은 역할을 합니다. tempdb 시스템 데이터베이스는 SQL Server 인스턴스에 연결된 모든 사용자가 사용할 수 있는 전역 리소스로서 다음 항목을 보관하는 데 사용됩니다 전역 또는 로컬 임시 테이블, 임시 저장 프로시저, 테이블 변수, 커서 등 명시적으로 생성된 임시 사용자 개체스풀 또는 정렬의 중간 결과를 저장하기 위한 작업 테이블 등 SQL Server 데이터베이스 엔진에서 만든 내부 개체행 버전 관리 격리를 사용하여 커밋된 읽기 또는 스냅숏 격리 트랜잭션을 사용하는 데이터베이스의 데이터 수정 트랜잭션에서 생성된 행 버전온라인 인덱스 작업, MARS(Multiple Active Result Sets) 및 AFTER 트리.. 더보기
[MSSQL] Merge join에 대한 고찰 안녕하세요 마푸입니다. 개인적으로 저는 DATABASE를 배우다보면 제일 재미있고 흥미로운게 집합이라고 생각합니다. 집합 그 중에서 가장 핵심적인 부분이 JOIN이지용 각 집합에 대해서 이리저리 붙여보고 돌려보고 덧대어 볼 수 있기 때문에 재미 지다는 표현이 더 좋을 지 모르겠네요 사실 어렵긴합니다. INNER JOIN이니 OUTER JOIN이니 그런 것들... 위에 언급한 두가지는 대부분의 사람들은 바로 이해가 안되지만 두어번 읽어보면 감이 오긴합니다. 자세히는 모르지만 말이죠 ^^;; 저역시 그래왔고 가끔씩 헛깔릴 때가 많지요 문제는 그 다음에 등장하는 녀석 때문입니다. Merge Join이라는 녀석인데요.마치 프로그램 랭귀지에서 포인터 역할을 하는 녀석이지요 ㅋ; 어렵지는 않으나 이해해야하는 기능인.. 더보기
[MySQL] show processlist 모니터링 하기 안녕하세요 마푸입니다. Mysql을 쓰다보면 점검을 시작하고나서 얼마 지나지 않았을때라던지 문득 트래픽이 올라가는데 지금 수행되는 쿼리가 궁금하게 되면 가장 먼저 실행하는 명령어가 아마도 show processlist 라고 생각합니다. 해당 명령어를 수행하면 아래와 같이 1회 출력하게 됩니다. (* 잠깐.. 여기서 에이 머야 모니터링이 안되네 라고 하시는분.. 끝까지 읽어보세요 ㅋ; 아래는 G 옵션을 줘서 row를 이쁘게 찍은 상태입니다. G 옵션이 없다면 우리가 흔히 볼 수 있는 테이블 형태로 출력합니다. 1234567891011121314151617181920mysql> SHOW FULL PROCESSLIST\G*************************** 1. row ***************.. 더보기
[MySQLdb] python에서 mysql db api 설치하기 안녕하세요마푸입니다. 에전에 네이버 블로그에 포스팅 한적이 있는 글인데 지금까지도 꾸준히 카운트가 집계되는 글이 있었네요 바로 Python에서 MySQL에 접속해서 데이터를 가져오거나 가공 할 수 있게 해주는 api입니다. 먼저 linux에서는 여러가지 방법으로 유틸리티(App or Tool)을 설치 할 수 있는 방법이 있는데요 자세한건 다음 기회에 포스트를 하고 간략히 말씀드리면 '자동'으로 할것인가 '반자동'으로 할것인가로 구분하면 될거 같습니다. 자동이라고 함은 설치 명령어를 실행하게 되면 리눅스에서 인터넷으로 접속해서 설치 파일을 다운해서 자동으로 정해진 디렉토리로 자동으로 설치하게 되는 방법입니다. 이때 구동에 필요한 여러가지 의존성 프로그램이 같이 설치 되기도 합니다. 반자동이라고 함은 설치 .. 더보기
[쿼리튜닝] 쿼리의 실행 횟수를 줄이자 안녕하세요 마푸입니다. 너무 게임만 올려서 디비 쪽 정리한거 좀 풀어보려합니다. 첫번째 이슈는 stored procedure(DB SP)를 작성할때 팁입니다. 대부분의 절차적 프로그램에서는 보통 쿼리를 실행하고 결과에 따라서 확인한다음에 업데이트를 하게 됩니다. 허나 디비에서는 그런식으로 처리하게되면 쿼리가 두번 날아가게 되는것이지요 만약, 정말 100% 확실한 데이터로 업데이터가 진행되는 거라고 가정을 한다면 먼저 업데이터를 하고 업데이트의 결과유무를 체크한다음 업데이트가 안되었다면 입력하는 식으로 만들 수 있는 것이지요 자세한 내용은 아래를 참고합시다 ^^ [정리]1. Type AIF(SELECT * FROM ~~) update ~~ELSE INSERT ~~ --> 테이블을 무조껀 두번 읽는다 Upd.. 더보기

반응형