지금까지 데이터베이스를 쓸때 컬럼과 필드를 같은 뜻인줄 알고 써왔다. -.-;;


위키백과의 컬럼 (데이터베이스)를 보니 아래와 같이 씌여있다.


컬럼(column)이란 관계형 데이터베이스 테이블에서 특정한 단순 자료형의 일련의 데이터값과 테이블에서의 각 열(row)을 말한다. 컬럼은 열이 어떻게 구성되어야 할 지에 대한 구조를 제공한다.


관계형 데이터베이스 용어에서 컬럼과 같은 의미로 사용되는 것은 속성(attribute)이다.


‘필드’(field)라는 용어가 종종 컬럼의 대용으로 동일한 의미로 사용되지만, 필드와 필드값은 한 열이나 한 컬럼 사이의 교차로 존재하는 단일 항목을 특정할 때 언급하는 것이다.


앞으로는 정확히 용어를 알고 사용해야겠다.

Posted by 떡잎


● 데이터 베이스 사용자 만들기


create user wwwi with password 'wwwi';


● 데이터베이스  만들기


create database wwwi;


● 테이블 만들기


create table testa (

  key          char(16) primary key,

  val1        integer,

  val2        integer,

);


  *테이블 만들 때에  NOT NULL 제약(NULL Data 입력 금지), 

  UNIQUE 제약, (동일한 Data 입력 금지)

  DEFAULT 초기값 설정가능


create table testa (

  key          char(16) primary key,

  val1        integer not null,

  val2        integer unique,

  val3        integer default 0 not null

);


  *constraint으로 Primary Key를 설정하거나 복수의 Primary Key는

  아래와 같은 방법으로 설정


create table testa (

  key          char(16),

  val1        integer,

  val2        integer,

  constraint PK_NAME primary key (

    key,

    val1

  )

);


● 테이블 지우기


drop table testa;


● 기본적인 필드 타입


    smailint                           2 바이트 정수

    integer                            4 바이트 정수

    bigint                             8 바이트 정수

    decimal(a, a)/numeric(a, s)        10진수형

    real                               6자리 단정도 부동소수점

    double precision                   15 자리 배정도 부동소수점

    serial                             4 바이트 일련번호

    bigserial                          8 바이트 일련번호

    date                               일자

    time                               시간

    timestamp                          일자시간

    char(문자수)/character             고정길이 문자열  (최대 4096 문자)

    varchar(문자수)/charcter varying   가변길이 문자열  (최대 4096 문자)

    text                               무제한 텍스트

    Large Object                       oid형

    boolean/bool                       true/false


● 키 만들기


  *단일 키 설정은 테이블 만들 때에 create table에서 하는 편이 좋다.

    단일 키를 설정할 필드에 primary key를 지정하면 된다.


  key          char(16)     primary key,


  *복수 키는 아래와 같이 추가할 수 이싿.


create table testa (

  key          char(16),

  val1        integer,

  val2        integer,

  constraint PK_NAME primary key (

    key,

    val1

  )

);


  * 인덱스를 추가하면 검색 속도를 빠르게 할 수 있지만 너무 많이 만들면

    갱신할 때에 부하가 걸릴 수 있다.

    

create unique index PK_NAME on testa (

  key,

  val1

);


create index PK_NAME on testa (

  key,

  val1

);


● 키 지우기


drop index PK_NAME;


● 일련번호  만들기


  *일변번호는 serial로 정의해서 사용할 수 있음


create table testa (

  key          char(16),

  val1        serial,

  val2        integer,

);


insert into testa values('key00A');

insert into testa values('key00B');


   key      | val1 | val2 

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

 key00A   |    1 |      

 key00B   |    2 |      



create sequence seq;


  *다음과 같이 만들면 10 ~ 1000000, 100씩 증가하며 최대값이 되면 다시 최소값으로 돌아간다.


create sequence seq

  increment    10

  minvalue     10

  maxvalue     1000000

  start        10

  cache        100

  cycle

;


  *일련번호는 다음과 같이 사용한다.

    nextval이 일련번호를 만들어 내고

    currval은 일변번호의 현재값을 가져온다.


insert into testa values ('k001', nextval('seq'), 10);

insert into testa values ('k002', nextval('seq'), 10);

insert into testa values ('k003', currval('seq'), 10);


   key    | val1 | val2 

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

 k001     | 10   |   10 

 k002     | 20   |   10 

 k003     | 20   |   10 


● 일련번호  지우기


drop sequence seq;


Posted by 떡잎
Firebird의 Timestamp에서 특정 년월일만을 검색하는 방법

select * from testLOG
where
    extract(year from logStamp) > 2007 and
    extract(month from logStamp) = 1 and
    extract(day from logStamp) < 10 and

extract를 사용하면 TIMESTAMP형 필드에서 년,월,일에 대해 검색하기가 쉬워진다.
Posted by 띠리

Firebird의 Timestamp형을 문자열로 바꾸는 SQL문

SELECT CAST(timestamp_column AS VARCHAR(24)) FROM table_name;

이거 찾는라고 반나절 걸렸다.
Posted by 띠리

Timestamp형에서 날짜와 시간을 분리하는 SQL
SELECT 
    cast(extract(day from myTIMESTAMP)|| '.'||
           extract(month from myTIMESTAMP)|| '.'||
           extract(year from myTIMESTAMP) as date) ,
    cast(extract(Hour from myTIMESTAMP)|| ':'||
           extract(Minute from myTIMESTAMP)|| ':'||
           extract(Second from myTIMESTAMP) as Time) 
FROM MyLOG

위의 SQL문을 쓰면 Timestamp형 필드를 날짜형과 시간형으로 바꾸어준다.

TIMESTAMP형 WHERE문
SELECT  * FROM MyLOG
WHERE myTIMESTAMP > '2009-1-7 12:00:00'

SELECT  * FROM MyLOG
WHERE myTIMESTAMP > '2009-1-1'

Timestamp에서 WHERE문을 쓸 때는 날짜만 써도 된다.
아마도 날짜만 입력하면 뒤에 자동으로 00:00:00으로 처리하는 것 같다.
Posted by 띠리
Data Type Specifics
Name Size Range/Precision Description

Varchar(n) n chars 1 to 32767 bytes Variable length char or text string. NB, multi-byte character sets reduce number of possible characters proportionately

Smallint 16 bits -2^15 to 2^15-1 Signed short (word)

Integer 32 bits -2^31 to 2^31-1 Signed long (longword)

Float 32 bits 3.4 x 10^-38 to 3.4 x 10^38 Accurate to 7 digits

Double Precision 64 bits 1.7 x 10^-308 to 1.7 x 10^308 Accurate to 15 digits

Timestamp 64 bits (2 X 32 bits) 1 Jan 100 CE to 28 Feb 32768 CE Includes time and date as two 32-bit structures

Date 32 bits 1 Jan 100 CE to 28 Feb 32768 CE Date only. Time part is not stored.

Time 32 bits 0:00 to 23:59.9999

BLOB <32GB -- Stores data of variable indeterminate size

Numeric (precision, scale) Variable (16, 32, or 64 bits) specifies exactly precision digits of precision Example: Numeric(10,3) holds numbers accurately in the following format: ppppppp.sss

Decimal (precision, scale) Variable (16, 32, or 64 bits) specifies at least precision digits of precision Example: Decimal(10,3) holds numbers accurately in the following format: ppppppp.sss



원문
Firebird Novice's Guide
Posted by 띠리
사용자 삽입 이미지


Firebird
InterBase에서 파생된 오픈소스 관계형 데이터베이스 관리 시스템 (RDBMS : Relational database management system)이다.
오픈 소스로 개발된 RDBMS이고 라이선스는 Mozilla Public License를 기본으로 한 InterBase Public License로 상용이나 비상용으로 사용할 수 있지만 원 소스를 바꾸었을 경우에는 반드시 바꾼 소스를 공개하도록 되어있다.

PostgreSQL의 MVCC(멀티 버젼 동시 실행 제어)와 같게 MGA(Multi Generation Architecture)에 의한 고도의 트렌젝션 관리 기능을 가지고 있다. 스토어드 프로시져(stored procedure)나 트리거(trigger), 유저 정의 함수(UDF)등의 상용 데이터베이스에 있는 기능등을 갖추고 있다.

PostgreSQL, MySQL에 이어 3대 오픈 소스 RDBMS이다.


파이어버드 홈페이지
 Firebird - The RDBMS that's going where you're going
Posted by 띠리

ANSI SQL
데이터형
Microsoft
Access
데이터형
별명 Microsoft
SQL Server
데이터형
BIT,
BIT VARYING
BINARY VARBINARY,
BINARY VARYING
BIT VARYING
BINARY,
VARBINARY
미지원 BIT BOOLEAN,
LOGICAL,
LOGICAL1,
YESNO
BIT
미지원 TINYINT INTEGER1,
BYTE
TINYINT
미지원 COUNTER AUTOINCREMENT -
미지원 MONEY CURRENCY MONEY
DATE,
TIME,
TIMESTAMP
DATETIME DATE,
TIME
DATETIME
미지원 UNIQUEIDENTIFIER GUID UNIQUEIDENTIFIER
DECIMAL DECIMAL NUMERIC,
DEC
DECIMAL
REAL REAL SINGLE,
FLOAT4,
IEEESINGLE
REAL
DOUBLE
PRECISION,
FLOAT
FLOAT DOUBLE,
FLOAT8,
IEEEDOUBLE,
NUMBER
FLOAT
SMALLINT SMALLINT SHORT,
INTEGER2
SMALLINT
INTEGER INTEGER LONG, INT,
INTEGER4
INTEGER
INTERVAL 미지원 - 미지원
미지원 IMAGE LONGBINARY,
GENERAL,
OLEOBJECT
IMAGE
미지원 TEXT LONGTEXT,
LONGCHAR,
MEMO,
NOTE,
NTEXT
TEXT
CHARACTER,
CHARACTER
VARYING,
NATIONAL
CHARACTER,
NATIONAL
CHARACTER
VARYING
CHAR TEXT(n),
ALPHANUMERIC,
CHARACTER,
STRING,
VARCHAR,
CHARACTER
VARYING,
NCHAR,
NATIONAL
CHARACTER,
NATIONAL CHAR,
NATIONAL
CHARACTER
VARYING,
NATIONAL CHAR
VARYING
CHAR,
VARCHAR,
NCHAR,
NVARCHAR

[출처]
http://msdn2.microsoft.com/en-us/library/bb177899.aspx

어느 타이밍인가 MEMO 타입와 TEXT 타입의 구분이 없어졌군.
Posted by 띠리

데이터형 크기 설명
BINARY 1 바이트 어떤 데이터형도 저장될 수 있는 데이터형.
어떻게 데이터를 넣느냐에 따라서 데이터를 가져올때도 그에 맞게 가져와야된다. (문자당 1바이트)
BIT 1 바이트 예/아니오 값
TINYINT 1 바이트 0 ~ 255 정수값
MONEY 8 바이트 –922,337,203,685,477.5808 ~ 922,337,203,685,477.5807 정수값
DATETIME 8 바이트 100 ~ 9999 사이의 날짜 시간값
UNIQUEIDENTIFIER 128 비트 원격 프로시져 호출시 키 넘버로 사용
REAL 4 바이트 단정도 부동소수
음수값 –3.402823E38 ~ –1.401298E-45,
양수값 1.401298E-45 ~ 3.402823E38, 0
FLOAT 8 바이트 배정도 부동소수
음수값 –1.79769313486232E308 ~ –4.94065645841247E-324,
양수값 4.94065645841247E-324 ~ 1.79769313486232E308, 0
SMALLINT 2 바이트 –32,768~32,767 사이의 정수
INTEGER 4 바이트 –2,147,483,648 ~ 2,147,483,647 사이의 정수
DECIMAL 17 바이트 큰 소수나 정수를 계산할 때 사용
소수점 위치 0~28 사이값 지정(우측해서)
소수점 위치 지정을 없이 지정했을 경우
-79,228,162,514,264,337,593,543,950,335 ~
79,228,162,514,264,337,593,543,950,335
소수점 위치 지정을 28로 지정했을 경우
 -7.9228162514264337593543950335 ~
7.9228162514264337593543950335
TEXT 2 바이트 0 ~ 2.14 GB (문자당 2바이트)
IMAGE - 0 ~ 2.14 GB / OLE 오브젝트용 [As(?) 필요]
CHARACTER 2 바이트 0 ~ 255 문자(문자당 2바이트: 결국 512바이트란 이야긴가?)


TEXT가 언제부터 2기가나 지원하게 된것이지?


원본 링크
http://msdn2.microsoft.com/en-us/library/bb208866.aspx
Posted by 띠리
델파이로 MDB 데이터베이스 만들기
MDB 패스워드 설정하기
MDB 패스워드 변경하기
MDB 최적화하기




uses
  Windows, Messages, SysUtils, Variants, Classes,
  Graphics, Controls, Forms, Dialogs,
  ComObj, ActiveX, StdCtrls;

// 데이터베이스 생성(MDB)
function CreateDB(const sPath: string;
                  var sErr: string): Boolean;
const
    csConnStr = 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source="%s"';
var
    oleCatalog: OleVariant;
    sConnStr: string;
begin
    Result := false;
    sConnStr := Format(csConnStr, [sPath]);
    try
        try
            oleCatalog := CreateOleObject('ADOX.Catalog');
            oleCatalog.Create(sConnStr);
        finally
            oleCatalog := Unassigned;
        end;
        Result := true;
    except
        on Err:Exception do sErr := Err.Message;
    end;
end;


// 패스워드 설정/변경
// 데이터베이스 최적화하기
function ChangePWD(const sPath, sOldPass, sNewPass: string;
                   var sErr: string): Boolean;
const
    CONN_STR = 'Data Source="%s";Jet OLEDB:Database Password=%s';
var
    ovEngine: OleVariant;
    sBakPath: string;
    sStr1, sStr2: string;
begin
    Result := false;
    // 백업파일 패스
    sBakPath := ChangeFileExt(sPath, '.bak');
    // 기존 백업 파일 삭제
    DeleteFile(sBakPath);

    sStr1 := Format(CONN_STR, [sPath, sOldPass]);
    sStr2 := Format(CONN_STR, [sBakPath, sNewPass]);
    try
        try
            ovEngine := CreateOleObject('JRO.JetEngine');
            // 최적화기능을 이용한 패스워드 설정
            ovEngine.CompactDatabase(sStr1, sStr2);
            // 기존 데이터 삭제
            DeleteFile(sPath);
            RenameFile(sBakPath, sPath);
        finally
            ovEngine := Unassigned;
        end;
        Result := true;
    except
        on Err:Exception do sErr := Err.Message;
    end;
end;



Posted by 띠리
BLOG main image
프로그래밍 공부하면서 써가는 개인 노트 (따라서 여기에 씌여있는 소스의 신빙성을 보장 못함 -.-;;) 이 블로그 보면서 틀린 점이 있으면 꼬옥 알려주세요. by 띠리

공지사항

카테고리

분류 전체보기 (323)
Win32 SDK 초보 (27)
통신관련 (11)
MFC TIP (20)
C/C++ TIP (10)
개발기타 (10)
링크 (2)
견물생심 (24)
이것저것 (8)
용어메모 (3)
데이터베이스 (32)
비주얼 베이직 (10)
하드웨어 (3)
C# (42)
Xcode (3)
델파이 (82)
홈페이지 (5)
MindStorm (0)
낙서 (5)
스크래치 (0)
기타 (6)
아두이노 (1)
라즈베리파이 (2)
안드로이드 (6)
파이썬 (0)
WEB (2)
Total : 944,292
Today : 19 Yesterday : 397