'소프트웨어개발/DB'에 해당되는 글 9건

  1. MySQL 페이징 쿼리 구현하기
  2. MySQL 테이블 생성시 DATETIME 타입에 DEFAULT로 현재 시간 입력하기 (4)
  3. CentOS에서 MySQL 완전 제거 후 새로 설치하기 (1)
  4. 데이터베이스를 가장 빨리 공부하는 방법? 포럼을 설치해라!
  5. DB: 전산실 실무에 바로 써먹을 수 있는 SQL 서적 추천
  6. [DB] [MySQL] 데이터베이스 생성 및 원격 접속하기
  7. [DB] 데이터베이스 디자인시 고려할 사항 정리
  8. [DB] 오라클 페이징 쿼리 구현하기
  9. [DB] 북마크; Data Modeling; 데이터 모델링;

MySQL 페이징 쿼리 구현하기

MySQL 페이징 3요소

MySQL에서 페이징 구현시 고려할 요소는 3가지로 아래와 같다.


  • LIMIT: 한 번 쿼리시 가져올 로우의 개수를 의미한다. 10을 지정하면 10개를 한 페이지로 가져온다.
  • OFFSET: 앞서 생략할 로우의 개수를 의미한다. 10을 지정하면 앞의 10개는 생략하고 11번째 로우부터 가져온다.
  • TOTAL: 페이징과 상관없이 실제 쿼리 결과의 전체 로우 개수를 의미한다. MySQL에서 정식으로 제공하는 개념은 아니다.

MySQL 페이징 쿼리

MySQL의 페이징 쿼리는 아래와 같이 2단계로 이루어져있다.


SELECT SQL_CALC_FOUND_ROWS A.* FROM (:QUERY) A LIMIT :LIMIT OFFSET :OFFSET;

SELECT FOUND_ROWS() AS TOTAL;
  • SQL_CALC_FOUND_ROWS: SELECT 바로 뒤에 이 문구를 명시하면 MySQL은 실행한 쿼리의 전체 로우 개수를 기억하게 된다.
  • :QUERY: 페이징을 고려하지 않은 실제 실행할 쿼리를 입력한다.
  • :LIMIT: 앞서 설명했듯이 한 번 쿼리시 가져올 로우의 개수를 입력한다.
  • :OFFSET: 앞서 설명했듯이 생략할 로우의 개수를 입력한다.
  • FOUND_ROWS(): 앞서 명시한 SQL_CALC_FOUND_ROWS의 결과로 MySQL이 기억하고 있는 전체 로우 개수를 가져오기 위해 사용한다. MySQLTOTAL 값을 가져오기 위해 2번에 걸쳐 쿼리를 실행해야 한다.

참고글


저작자 표시 비영리 동일 조건 변경 허락
신고

MySQL 테이블 생성시 DATETIME 타입에 DEFAULT로 현재 시간 입력하기

Oracle(오라클)에서는 테이블 생성시 날짜와 시간을 저장하는 DATE 타입에 아래와 같이 SYSDATE로 기본값을 부여할 수 있다.


CREATE
    TABLE
        ORACLE_TABLE(
            DATE_CREATED DATE DEFAULT SYSDATE
        )
;


당연한 생각에 MySQL에서도 동일한 시도를 해보았다. MySQLDATETIMEOracleDATE와 동일한 역할을 하는 타입이다.


CREATE
    TABLE
        MySQL_Table(
            DateCreated DATETIME DEFAULT NOW()
        )
;


당연히 될 줄 알았지만 결과는 오류가 발생했다. 구글링 결과 MySQL 버전에 따라 아래와 같이 처리해야 한다.


MySQL v5.6.5 이상일 경우


NOW() 함수가 아닌 CURRENT_TIMESTAMP 함수를 사용해야 한다.


CREATE
    TABLE
        MySQL_Table(
            DateInserted DATETIME DEFAULT CURRENT_TIMESTAMP
        )
;

 

MySQL v5.6.5 미만일 경우


방법이 없다. 굳이 기본 값으로 현재 시간을 입력하려면 해당 테이블에 트리거(Trigger)를 작성해야 한다.


CREATE
    TABLE
        MySQL_Table(
            DateInserted DATETIME
        )
;

CREATE
    TRIGGER MySQL_Table_OnInsert BEFORE INSERT
            ON MySQL_Table FOR EACH ROW
    SET
        NEW.dateInserted = NOW()
;

관련 글


참고 글



저작자 표시 비영리 동일 조건 변경 허락
신고

CentOS에서 MySQL 완전 제거 후 새로 설치하기

CentOS 5에서 MySQL을 완전 제거 후 phpMyAdmin까지 새로 설치하는 방법을 정리하였다. 아래 순서대로 진행한다.

기존 설치되어 있는 MySQL 패키지 제거


기존에 설치된 MySQL 패키지를 제거한다.

$ yum remove mysql mysql-server

MySQL 디렉토리 삭제


남아있는 MySQL 디렉토리를 삭제한다. 필요시 백업한다.

$ rm -f -r /var/lib/mysql

MySQL 패키지 설치


MySQL 패키지를 새로 설치한다.

$ yum install mysql mysql-server

phpMyAdmin 설치


phpMyAdmin은 웹 방식의 MySQL 전용 클라이언트이다. 공식 리파지터리보다 최신 버전의 패키지를 제공하는 비공식 리파지터리인 Remi에 접근할 수 있도록 패키지를 설치한다.

$ rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-5.rpm

Remi 리파지터리로부터 phpMyAdmin 패키지를 설치한다.

$ yum --enablerepo=remi install phpMyAdmin

외부에서 phpMyAdmin을 실행할 수 있도록 환경 설정한다.

$ vi /etc/httpd/conf.d/phpMyAdmin.conf
<Directory /usr/share/phpMyAdmin/>
   <IfModule mod_authz_core.c>
     # Apache 2.4
     Require local
   </IfModule>
   <IfModule !mod_authz_core.c>
     # Apache 2.2
     Order Deny,Allow
     Allow from All
   </IfModule>
</Directory>

Apache HTTP Server를 재시작한다.

$ service httpd restart

이제 phpMyAdimin에 접속할 준비가 끝났다. 아래 주소로 접속해보자. localhost 부분에는 자신의 서버 주소를 입력하면 된다.

http://localhost/phpMyAdmin/




저작자 표시 비영리 동일 조건 변경 허락
신고

데이터베이스를 가장 빨리 공부하는 방법? 포럼을 설치해라!

데이터베이스를 공부하는 방법?


REDDITDatabase 써브레딕을 눈팅하던 중 데이터베이스를 공부하는 방법에 대한 인상깊은 댓글을 발견했다. 원문은 링크를 참고한다.


MySQL is a completely different beast. You can very easily and quickly learn MySQL by installing some forums that use them, making a few posts on those forums, and then dicking around with those posts inside of MySQL rather than on the forum. MySQL is extremely simple compared to Oracle RDBMS.


요약하자면 MySQL을 공부하고자 한다면 Open Source Forum 소프트웨어를 설치하여 직접 사용하면서 데이터베이스의 변화를 살펴보고 또 직접 변화시켜 보라는 말이다. 일리있는 말이다. 이론만 접하던 대학생이 회사에 입사하여 직접 이미 만들어진 완성도 높은 소프트웨어를 접하면서 실력이 급성장하는 것과 같은 원리이다.


오픈 소스 포럼에는 뭐가 있을까?


오픈 소스 포럼을 설치하면 포럼의 데이터 모델링 스크립트와 관련 CRUD를 눈으로 확인할 수 있다. 자연히 실력이 늘을 수 밖에 없다. 대표적인 오픈 소스 포럼 소프트웨어를 정리해봤다.

Vanilla


Vanilla는 PHP 기반의 커뮤니티 소프트웨어이다. PHP 5.2.0 이상, MySQL 5 이상, Apache 2 이상을 요구한다.

NodeBB


NodeBB는 Node.js 기반의 모바일 친화적인 커뮤니티 소프트웨어이다. Node.js 0.8 이상, Redis 2.6 이상을 요구한다.

참고 글



저작자 표시 비영리 동일 조건 변경 허락
신고

DB: 전산실 실무에 바로 써먹을 수 있는 SQL 서적 추천

전산실 개발자로 근무하면서 올바른 데이터 모델링 능력 못지 않게 올바른 SQL을 작성하는 능력이 필수적임을 느낀다. 대부분의 SQL 서적이 백과사전 식이거나 실무와 동떨어진 이론 위주의 서적이 많은데 Mastering SQL Queries for SAP Business One은 SAP를 기반으로 실전 SQL을 구사하는 방법을 알려주어 추천한다.


(2011) Mastering SQL Queries for SAP Business One (by Gordon Du)

http://www.amazon.com/Mastering-SQL-Queries-SAP-Business/dp/1849682364/


저작자 표시 비영리 동일 조건 변경 허락
신고

[DB] [MySQL] 데이터베이스 생성 및 원격 접속하기

* 우분투 서버에 MySQL 설치 후 root 사용자로 로그인한다.

# mysql -u root -p


* 테스트 프로젝트 개발에 사용할 myblog 데이터베이스를 새로 생성한다.

mysql> create database myblog;


* myblog 데이터베이스의 모든 권한을 myblogadmin 사용자에게 부여하고 IP 주소 192.168.11.15(원격 접속 PC 주소)에서만 원격접속이 가능하도록 제한하고 접속 암호는 admin으로 설정한다.

mysql> grant all on myblog.* to myblogadmin@'192.168.11.15' identified by 'admin';


* 생성한 myblog 데이터베이스에 원격접속하기 위해 경량의 MySQL 무료 클라이언트인 HeidiSQL(현재 최신 버전은 v7.0.0.4053)을 설치한다. heidisql로 구글링 후 Downloads > Installer 를 차례로 클릭하여 다운로드 후 설치한다.


* HeidiSQL을 실행하면 Session Manager가 나타난다. New > Network Type: MySQL(TCP/IP) > IP: 192.168.11.21(접속할 MySQL 서버의 주소 입력) > User: myblogadmin > Password: admin > Open을 차례대로 수행하면 앞서 생성한 데이터베이스에 원격접속된다.


* 좌측 윈도우에서 myblog 데이터베이스를 클릭하고 CTRL+T 단축키를 누르면 새로운 Query Tab이 열리면서 MySQL 명령어 및 SQL 문장을 수행할 수 있다. 명령어 입력 후 F9 단축키를 누르면 명령이 실행된다. CTRL+F8 단축키를 누르면 SQL 문장에 대한 자동 포맷팅이 수행된다.

SELECT SYSDATE() FROM DUAL;


저작자 표시 비영리 동일 조건 변경 허락
신고

[DB] 데이터베이스 디자인시 고려할 사항 정리

* It's not rocket science. 해외 블로그에서 데이터베이스 디자인에 대해 쉽게 풀이한 글을 읽으면서 본 문장이다. 생각해보면 학부 시절에 처음 접한 데이터베이스 디자인 이론은 쓸데없이 너무 어려웠다는 생각이 든다. 학교를 졸업하고 전산실 개발자가 되어 생존하기 위해 데이터베이스 디자인을 공부하는 요즘 몇가지 사소한 기본 원칙이 무시되어 나중에 큰 재앙으로 다가오는 경우를 보면서 기본의 중요성을 느끼고 있다. 데이터베이스 디자인을 공부하면서 도움이 됬던 글들을 모아봤다.

Ten Common Database Design Mistakes (by Louis Davidson)

http://www.simple-talk.com/sql/database-administration/ten-common-database-design-mistakes/

Five Simple Database Design Errors You Should Avoid (by Anith Sen)
http://www.simple-talk.com/sql/database-administration/five-simple--database-design-errors-you-should-avoid/

Facts and Fallacies about First Normal Form (by Anith Sen)
http://www.simple-talk.com/sql/learn-sql-server/facts-and-fallacies-about-first-normal-form/

Database development mistakes made by application developers (Stack OverFlow)
http://stackoverflow.com/questions/621884/database-development-mistakes-made-by-application-developers

* 중소규모의 시스템을 개발하는 개발자 입장에서 대부분의 데이터베이스 디자인 관련 서적들은 당장 와닿지 않는 부분이 많다. Barry WilliamsKenneth Downs는 책을 낸 적은 없지만 데이터베이스를 이해하는데 도움이 되는 핵심 이론을 설명하는 글을 쓰고 있어 추천한다.

Understanding a Database Schema (by Barry Williams)
http://msdn.microsoft.com/en-gb/express/bb403186.aspx

Topical Table of Contents (by Kenneth Downs)
http://database-programmer.blogspot.kr/2008/09/comprehensive-table-of-contents.html

* 아래는 SQL을 다루는데 있어 도움이 되는 유용한 사이트를 모아봤다.

SQLZOO
http://sqlzoo.net/

SQLFiddle
www.sqlfiddle.com/

저작자 표시 비영리 동일 조건 변경 허락
신고

[DB] 오라클 페이징 쿼리 구현하기

데이터베이스 테이블의 로우가 많을 때는 한꺼번에 가져오는 것 자체가 시스템 부하가 되기 때문에 페이지 단위로 끊어서 가져올 필요가 있다.


아래는 Oracle 11g 기준으로 간단한 페이징 쿼리를 구현해봤다.

"SELECT * FROM (SELECT ROWNUM AS ROW_NUMBER, COUNT(*) OVER() TOTAL_ROW_COUNT, A.* FROM ( " + 페이징할 쿼리문 + " ) A ) WHERE ROWNUM <= :PAGE_SIZE AND ROW_NUMBER > (:PAGE_NUMBER-1) * :PAGE_SIZE;"


<참고자료>

http://stackoverflow.com/a/11692804 -- Alessandro Rossi
http://www.oracle.com/technetwork/issue-archive/2006/06-sep/o56asktom-086197.html -- Tom Kyte

저작자 표시 비영리 동일 조건 변경 허락
신고

[DB] 북마크; Data Modeling; 데이터 모델링;

Database Skills: Topical Table of Contents -- Kenneth Downs
http://database-programmer.blogspot.kr/2008/09/comprehensive-table-of-contents.html


저작자 표시 비영리 동일 조건 변경 허락
신고