How MySQL TIMESTAMP stroed in the database

MySQL TIMESTAMP 열(column)의 형식은 'YYYY-MM-DD HH:MM:SS'이며 19개 문자로 고정됨.

MySQL TIMESTAMP는 '1970-01-01 00:00:01'을 시작으로 초(second)를 4 byte의 숫자로 저장함.

4 byte의 수치에 대응되는 범위에 따라 TIMESTAMP는 '1970-01-01 00:00:01' ~ '2038-01-19 03:14:07'의 범위를 갖음.

 

MySQL TIMESTAMP 값은 connection's time zone에 종속적.

MySQL TIMESTAMP에 값을 입력할 때, 이 값은 connection's time zone에서 Universal Coordinated Time(UTC, 국제 표준시)로 변환됨.

값을 선택하면, server는 UTC에서 connection's time zone으로 변환하므로 입력했던 동일한 값을 얻음.

 

create table test_timestamp(t1 timestamp);

 

set time_zone='+00:00';

 

insert into test_timestamp values('2008-01-01 00:00:01');

 

select t1

from test_timestamp;

 


 

 

 

+---------------------+

| t1 |
+---------------------+
| 2008-01-01 00:00:01 |
+---------------------+
1 row in set (0.00 sec)

 



 

set time_zone='+03:00';

select t1
from test_timestamp;

 

 

 

+---------------------+

| t1 |
+---------------------+
| 2008-01-01 03:00:01 |
+---------------------+
1 row in set (0.00 sec)

 





INSERT and UPDATE TIMESTAMP column
만약 MySQL TIMESTAMP 값을 생략하거나 NULL을 입력한다면, 현재 TIMESTAMP는 자동적으로 입력됨. 이것은 MySQL TIMESTAMP의 자동 초기화 특성임.

다른 열의 값을 변경했을 때, MySQL TIMESTAMP는 현재 TIMESTAMP로 자동 갱신됨. TIMESTAMP가 갱신되기 위해선 현재의 값을 다른 값으로 변경하는 경우에만 갱신됨.

 

 

CREATE TABLE tbl_name(

created_on TIMESTAMP DEFAULT 0

changed_on TIMESTAMP DEFAULT CURRENT_TIMESTAMP

);

 

--

필드 지정시 날짜와 관련이 되면 이전부터 많이들 TIMESTAMP를 사용하였는데요
일단, 둘의 차이점을 알아봅시다
TIMESTAMP만의 특성입니다.

서버의 시간에 의존(UTC에 따라 변형된다는 의미로 해석하면 될 것 같네요)
범위가 '1970-01-01 00:00:01' UTC to '2038-01-09 03:14:07' UTC로 제한됨
on update CURRENT_TIMESTAMP 옵션을 사용할 수 있다.


이러한 차이는 쉽게 말하면
DATETIME는 순수하게 상수로 된 날짜로 인식하지만,
TIMESTAMP는 서버시간에 의한 의존하는 날짜 개념이죠.(서버 time zone 변경시, 바뀝니다)

해외서버를 사용한다면, 문제를 일으킬 수 있는 부분입니다.
국내에서만 사용 할 경우는 별다른 문제가 일어나지 않겠지요.(아마도??)

on update CURRENT_TIMESTAMP 이건, UPDATE시 시간도 업데이트 해주는건데, TIMESTAMP타잎에서만 사용할수 있습니다. 수정된 시간 저장시 매우 유용하게 사용할 수 있는 거죠.

반면에,
클라이언트의 시간을 서버에서 받아서 저장을 하다면, TIMESTAMP보다는 DATETIME을 사용을 권장하게 되겠네요.

등록시간은 DATETIME으로 잡고, 수정시간은 TIMESTAMP on update CURRENT_TIMESTAMP로 사용하면, 편할 거 같다는 생각이 듭니다. 물론 UTC나 timezone에 영향은 고려해야겠지요.

DATETIME
- 범위 : '1000-01-01 00:00:00' 에서 '9999-12-31 23:59:59'

TIMESTAMP[(M)]
- 범위 : '1970-01-01 00:00:00' 에서 2037

출처:http://jpss.ta3ke.com/59

 

'DB > Mysql' 카테고리의 다른 글

Mysql 데이터 타입  (0) 2013.06.21
MySQL 기본 쿼리문 정리  (0) 2013.06.17

ERD란?
Entity Relationship Diagram의 약자로 개체관계도 라고 부릅니다.
ERD는 말로서 되어있는 요구분석사항을 그림으로 그려내어 그 관계를 도출하는 것입니다.
(참고로 Peter Chen이란 분의 박사학위논문에 처음 등장했지요...)

ERD[이 알 디]는 전략적 계획이나 또는 하향식 계획에서 자주 사용되며, 개략적인 상부계층의 데이터 다이어그램이다. 데이터의 하향식 계획은 기업을 운영하는데 관련된 실체들을 확인하고, 그것들간의 관계들을 결정한다. 기업체를 효율적으로 운영하기 위해서는 어느 정도의 데이터가 필요하게 되는데, 이러한 데이터는 컴퓨터가 사용되지 않아도 상관은 없지만, 컴퓨터는 정확한 데이터를 필요한 사람에게 정확하게 전달하는데 큰 도움을 준다. 문제가 되는 데이터는 정연하고, 자세히 설명될 필요가 있으므로, 이를 위해 데이터에 관한 데이터가 필요하다. 데이터에 관한 데이터를 흔히 메타데이터라고 부르는데, 데이터 모델들은 이러한 메타데이터를 포함하고 있다.

데이터 분석가들은 조직의 데이터를 그들에게 이해시키고, 조직을 관리하는데 가장 유익하게될 데이터를 만들기 위해 최종사용자들 및 중역들로부터 많은 도움을 필요로 한다. 이들과의 의사소통을 원활히 하기 위해, 그들은 데이터를 도식화하는 명료한 방법이 필요하며, ERD와 같은 다이어그램은 조직의 정보자원을 전반적으로 계획하는데 있어 필수적이며 유용한 도구이다. ERD는 개발되고 나면, 좀더 자세한 데이터 모델로 분해될 수도 있다.

엔터티란 우리가 저장한 데이터에 관해 무언가 실제적이거나 추상적인 것을 모두 포함한다. 엔터티의 형태는 고객, 근로자, 청구서, 상품, 교대근무보고서, 영수증, 창고, 지사, 영업사원 등을 예로 들 수 있다. 각 엔터티의 이름은 보통 명사(名辭)이어야하지만, 때로는 수식어구가 사용될 수도 있다. 엔터티 형태는 같은 속성형태를 가진 엔터티들을 대표할 수 있는 이름을 붙인 일종의 부류를 나타낸다.

예를 들어 '근로자'라는 엔터티가 있다면, 그 엔터티에 속하는 '홍길동'이라는 엔터티 인스턴스가 존재할 수 있다. ERD에서 엔터티는 직사각형으로 그리며, 각 엔터티간의 관계는 좌측 그림에 예시되어 있는 것과 같은 표기방법을 이용하여 관계를 나타내게 된다

 
1. ER모델의 개념

 

   Peter Chen에 의해 제안 (1976)
        - ERD(Entity Relationship Diagram)로 표현 
   ER모델의 기본 요소
        - Entity : 시스템화 하고자 하는 사건, 사물
        - Relationship : 엔티티간, 애트리뷰트간의 연관성
        - Attribute : 엔티티, 관계성의 성질을 나타내는 더 이상 쪼갤수 없는 정보의 단위
        - 실세계의 모든 업무체계는 기본요소 3가지(Entity, Relationship, Attribute)로 모두 표현이

          가능하다. 
   확장된 요소
        - 일반화 계층 (Generalization Hierachy) : 여러 엔티간의 공통적인 특성을 파악
        - 서브세트(Sub Set): 일반화중 하나의 서브 엔티티를 갖는 경우

 

2. 개체 (Entity)

 

   개념
        - 시스템화 하고자 하는 사물이나 사건
        - 현실 세계의 객체
        - 예) 사원, 부서, 남자, 도시, 계약, 물품 등
  표기법
          
   종류
        - 일반 엔티티, 약 엔티티, 슈퍼 엔티티, 서브 엔티티

 

3. 관계성 (Relationship)

   정의
      - 개체간의 연관성을 나타낸다.
        예) 소속된다. 관리된다. 소유한다. 등

   표기법 :
          

   종류
     - 관계의 종류 : 이진관계, 순환관계, 삼진관계  
     - 관계성 (카디널리티, Cardinality) : 1대1, 1대N, N대N

 

4. 속성 (Attribute)

   정의

   표기법
         
   종류 : 일반속성, 키속성, 다중값 속성, 복합속송, 유도속성

 

5. 기본 ERD 작성의 사례

   *  1) 속성은 개체의 정보를 나타내므로 개체에 연결되어야 한다.
       2) 관계는 개체와 개체의 사이에서 연관을 나타낸다.

- 객체간의 관계(Relation)

Relation 이란 다이어그램의 '동사'로서 객체들이 서로 어떻게 관련되어 있는지 나타낸다.

예) 학생은 강좌를 수강한다. 교수는 강좌를 강의 한다. 학생은 학과에 속한다. 교수는 학과에 속한다.

'DB > ERD' 카테고리의 다른 글

MySQL-workbench 사용하여 ER 다이어그램 작성방법  (0) 2013.08.22

데이터베이스를 사용하면서 가장 먼저 찾게 되는 것이 데이터베이스를 관리하는 도구일 것이다.

수많은 프로그램이 나와 있지만 데이터베이스를 전문적으로 사용하는 것이 아니기 때문에 무료로 간편하게 사용할 수 있는 툴을 선호한다.

MySQL 사이트에는 MySQL을 관리할수 있는 GUI 툴을 같이 제공하는데, 예전에는 MySQL-query-browser, MySQL-administrator와 같이 나누어서 제공하던 것이 MySQL-workbench로 통합되어 제공하고 있다.

현재 최근 릴리즈 버전은 최종 안정화 버전(GA : General Availability) 으로 MySQL Workbench 5.2.34까지 제공되고 있다.

Community Edition은 비용없이 GPL 라이센스로 다운로드 받아서 사용할 수 있다.

이번에 소개할 내용은 업무에서 겪었던 부분이다.

이미 데이터베이스에 테이블이 생성되고 동작하고 있을 경우 다이어그램으로 테이블 구조를 보고 싶다는 말을 듣는다.

그럼 일일히 테이블 구조를 다이어그램으로 그려야 할까??

아니다. 이미 동작하는 데이터베이스를 연결하여 Reverse Engineer Database라는 기능이 있다.

다이어그램으로 뽑아내고 싶은 테이블을 선택하여 Reverse하면 다이어그램으로 각각의 테이블의 구조와 관계를 나타낸다.

데이터베이스 접속 정보를 입력한다.=> 

데이터베이스의 접속이 성공적으로 완료되면 스키마 정보를 가져온다.=>

 

Reverse Engineer 할 데이터베이스를 선택한다.=>

선택된 데이터베이스의 테이블 및 구성요소들의 정보를 가져온다.=>

Reverse Engineer 할 테이블들을 선택한다. 왼쪽 박스가 선택된 항목이다. (3개의 테이블 선택)=>

 

아래와 같이 Reverse Engineer 작업이 완료되었다.=>

이와 같은 결과를 PDF 파일이나 PNG 이미지 등으로 Export 할 수 있어 편리하다.

다른 기능들도 많지만 내가 가장 많이 활용하는 부분을 작성해 보았다.

Mysql Workbench는 아래의 링크에서 다운로드 받을 수 있다.

http://wb.mysql.com/

 

[출처]http://cafe.naver.com/hermeneus/94

 

 

'DB > ERD' 카테고리의 다른 글

ERD 정의  (0) 2013.08.28

다양한 GUI 도구모음

MySQL의 경우 MySQL 자체에서 제공하는 관리 및 개발도구가 부족했었다. 하지만 MySQL 5.0의 출시에 발맞춰 다양한 GUI 기반 도구들을 발표했다.

 - MySQL 관리자(MySQL Administrator)
- MySQL 쿼리 브라우저(MySQL Query Browser)
- MySQL 마이그레이션 툴킷(MySQL Migration Toolkit)

이 세 가지 도구들은 모두 기본적으로 윈도우, 리눅스, 맥 OS X 버전을 제공하고 있으며 주로 5.0에 새로이 추가된 기능들을 활용하기 위해 제작되었다.

 <화면 2> MySQL 쿼리 브라우저 실행화면

 MySQL 관리자

MySQL 관리자는 기존의 MySQL 컨트롤 센터(MySQL Control Center)를 대체하는 도구로써 로컬이나 원격에서 MySQL을 관리하기 위한 GUI 기반의 관리도구이다. 이전 MySQL 컨트롤 센터에 비해 미려한 인터페이스를 가지고 있으며 특히 모니터링 측면에서 매우 뛰어난 성능을 보여준다. MySQL 관리자의 주요 기능은 다음과 같다

• 로컬이나 원격에서 인스턴스 매니저를 통한 MySQL의 시작과 중단
• 각종 환경설정 파일의 확인과 변경
• 사용자 권한 관리
• MySQL 데이터베이스 서버에 대한 자세한 모니터링
• 스케쥴링 백업 기능
• 원격에서 백업 및 복구
• 리플리케이션 설정과 모니터링
• 서버의 각종 로그에 대한 확인

 MySQL 쿼리 브라우저

MySQL 쿼리 브라우저는 MySQL 데이터베이스 서버를 위한 SQL 쿼리를 제작, 실행, 최적화를 위한 편리한 GUI 기반 도구이다.

• 쿼리를 쉽게 생성하고 실행하며 쿼리 히스토리를 저장하는 쿼리 툴바
• SQL 구문을 생성하고 수정하는 스크립트 에디터
• 여러 쿼리의 결과를 비교하며 작업할 수 있는 결과창(Results Window)
• 웹 브라우저와 유사한 인터페이스를 가진 오브젝트 브라우저를 통해 데이터베이스, 북마크, 히스토리 등을 관리
• 테이블을 생성, 삭제하며 쿼리를 위한 테이블이나 필드를 선택할 수 있는 데이터베이스 익스플로러
• 테이블 에디터를 통해 쉽게 테이블을 생성하고 수정하고 삭제 가능

 

<화면 3> MySQL 마이그레이션 툴킷의 실행화면

 

MySQL 마이그레이션 툴킷

MySQL 마이그레이션 툴킷은 데이터베이스 마이그레이션 마법사를 기반으로 하는 강력한 GUI 기반 데이터베이스 이전 도구이다. 데이터베이스 마이그레이션 마법사를 그대로 따라하는 것만으로도 기존의 다른 데이터베이스에서 MySQL로 테이블 구조와 모든 데이터 그리고 스토어드 프로시저, 트리거, 뷰까지도 모두 이전할 수 있다. MySQL 마이그레이션 툴킷의 장점은 다음과 같다.

• 오라클, MS SQL 서버, MS Access로부터 쉽고 빠른 데이터베이스 이전
• 다양한 방법으로 테스트된 마이그레이션 툴킷을 사용함으로써 데이터베이스 이전에 따르는 각종 위험의 감소
• 시간과 인력 비용의 감소
• 확장 가능한 모듈기반 아키텍처를 통해 사용자가 원하는 대로 마이그레이션 가능
• 데이터베이스 서버의 플랫폼과는 상관없이 양쪽 모두 원격에 둔 상태로 마이그레이션 가능

기업시장의 문을 두드리는 MySQL 5.0

MySQL은 최근 몇 년간 계속해서 폭발적인 사용자 증가세를 기록해 왔지만 몇몇 주요 기능이 미비해 기업의 핵심 업무에 사용되기는 힘든 면이 많았다. 하지만 2년에 가까운 개발 기간과 8개월 이상의 배타 테스트 기간을 거치며 이제 곧 선을 보이는 MySQL 5.0은 그 동안 아쉬웠던 점들을 거의 모두 채웠다. 이번 기사에서 자세히 알아본 많은 새로운 기능들 외에도 MySQL 5.0은 속도와 안정성 면에서도 주목할 만한 발전을 이뤘으며 기업용 제품에 걸맞는 각종 관리도구도 갖췄다. 이제는 MySQL의 기업시장 공략 준비는 모두 끝났다. 앞으로의 MySQL의 선전을 기대하며 MySQL 5.0의 신기능에 대한 소개를 마친다.

'DB' 카테고리의 다른 글

데몬 작동 ERROR :해결 방법  (0) 2013.05.10

 

 

'DB > Mysql' 카테고리의 다른 글

TIMESTAMP 특성  (0) 2013.10.17
MySQL 기본 쿼리문 정리  (0) 2013.06.17

특정 사용자 계정의 외부접속 허용하기 - 여기서는 root 를 예로 든다. 


1. mysql 접속 후 mysql database 선택 

mysql> use mysql;


2. user 테이블 살펴보기 

mysql> select host, user, password from user;


root 의 host 값들은 localhost, 127.0.0.1 등으로 기본 등록되어 있지만, 외부접속을 나타내는 값이 없다. 특정 아이피로 지정할 수도 있지만 여기선 % 기호로 어디서든 접속 가능하게 만든다. 


3. 권한 설정 

mysql> grant all privileges on *.* to 'root'@'%' identified by 'root의 패스워드';

Query OK, 0 rows affected (0.03 sec)


4. 등록확인하기

mysql> select host, user, password from user;


root 계정의 host 필드에 % 가 등록되었는지 확인한다. 


5. refrash

mysql> flush privileges;

Query OK, 0 rows affected (0.00 sec)


위 단계는 my.cnf 파일 수정후 서버를 재시작할 것이기 때문에 굳이 안해도 된다. 


6. my.cnf 에서 외부접속 관련사항 변경하기 

user@home:~$ sudo vim /etc/mysql/my.cnf 


파일 내용중 

bind-address = 127.0.0.1 

부분 주석처리후 저장하기 


7. mysql 재시작 

user@home:~$ sudo /etc/init.d/mysql restart 


8. 완료. 

이제 외부 클라이언트 프로그램에서 접속이 가능하다

(데이터베이스 조회)
mysql> show databases;


(데이터베이스 사용)
mysql> use 데이터베이스이름; 


(데이터베이스 생성)
mysql> create database 데이터베이스이름;

(데이터베이스 삭제)
mysql> drop database 데이터베이스이름;


(테이블 삽입)
mysql> use 데이터베이스이름;

mysql> create table 테이블이름(

->id varchar(128), //필드 자료형 옵션,

->pw varchar(128), //필드 자료형 옵션

->);



(테이블 조회)
mysql> desc 테이블이름;


(테이블 삭제)
mysql> drop table 테이블이름;


(레코드 추가)
mysql> inisert into 테이블이름 value('내용','내용');


(레코드 선택 추가)
mysql> insert into 테이블이름 (필드, 필드) value('내용','내용');


(레코드 암호화)
mysql> insert into 테이블이름 (필드) value(password('내용'));


(레코드 조회)
mysql> select *from 테이블이름;



(레코드 선택조회)
mysql> select 필드 from 테이블이름;


(레코드 검색 조회)
mysql> select * from 테이블이름 where 필드='내용';


(레코드 삭제)
mysql> delete from 테이블이름 where 필드='내용';


(레코드 수정)
mysql> update 테이블이름 set 필드='바꿀내용' where 필드='바꾸기 전 내용';

'DB > Mysql' 카테고리의 다른 글

TIMESTAMP 특성  (0) 2013.10.17
Mysql 데이터 타입  (0) 2013.06.21

'DB > windows Mysql5.0' 카테고리의 다른 글

windows Mysql 설치안내  (0) 2013.06.13

+ Recent posts