INFORMIX User Guide        2001. 6     Informix Korea
목차     RDB 란 무엇인가     SQL 개요     dbaccess 를 이용한 query 실행     Informix DBMS 의 이해     SQL 을 이용한 질의 방법     DB Admin 작업 ...
RDB 란 무엇인가      정보와 데이터      정보시스템      자료처리시스템      데이터베이스의 정의      데이터베이스의 특성      DBMS 발전 배경      데이터 독립성과 데이터 구...
정보와 데이터   데이터       현실 세계 (Real World) 로부터 단순한 관찰이나 측정을 통해서 수집한 사실        (Fact) 또는 값 (Values)   정보       어떤 상황에 관한 어떤...
정보 시스템     경영   정보    시스템 (MIS : Management Information System)     군사   정보    시스템 (Military Information System)     행정...
자료 처리 시스템   정보 시스템을 구축 하기 위해 정확한 최신의 정보를 적시에 제공하는 시    스템       자료 처리 시스템의 종류           일괄 처리 시스템 (batch Processing)   ...
데이터베이스의 정의   데이터베이스란 어느 한 조직의 다수 응용 시스템들이 사용하기위해 통    합 , 저장된 운영 데이터의 집합       통합된 데이터 (Integrated Data)           최소의 ...
데이터 베이스의 특성   실시간 접근성 (Real Time Accessibility)       수시적이고 비 정형적인 데이터의 검색이나 처리를 요구하는 질의       질의 (Queries) 에 대하여 실시간에 ...
DBMS 발전 배경   데이터의 종속성   데이터의 중복성   내부적 일관성 (Consistency)       보안성 (Security)       경제성 (Economics)       무결성 (Integ...
데이터 독립성과 데이터 구조간의 사   상            프로그램 데이터 구조         데이터베이스                                 논리적 구조                A     ...
데이터베이스 관리시스템   응용 프로그램과 데이터의 중재자로써 모든 응용 프로그램들이 데이터베    이스를 공용할 수 있게끔 관리해 주는 소프트웨어 시스템       정의 기능           데이터베이스의 논리...
데이터 모델링       객체 ( 그        엔티티 타입                 레코드           룹         에트리뷰트                 데이터 필드            )      ...
관계 데이터 모델   현실 세계를 ER 다이어 그램으로 표현한 것은 현실 세계를 사람이 이해    할 수 있게 표현한 논리적 구조    현실 세계                     ER                 ...
계층 데이터 모델            교과목                        데이터베이스                                                     CS 421.2   선수 과...
네트워크 데이터 모델      1000, 갑 , 경영 , 4   A    영어 , 4                         B                         C                       ...
Primary Key 와 Foreign Key   Primary Key         각 개체를 유일하게 구분할 수 있는 속성 혹은 속성의 조합 .         Primary 는 반드시 존재하는 값이어야 한다 ....
정규화 - 1NF(First Normal Form)   엔티티 (entity) 안에 반복되는 속성 그룹을 제거한다                         주문            주문                 ...
정규화 - 2NF(Second Normal   Form)   1NF 에서 모든 속성은 전체 Primary Key 에 종속되어야한다   엔티티의 모든 속성은 Primary Key 에 functionally depend...
정규화 - 3NF(Third Normal   Form)   Primary Key 에 종속적인 Key 가 아닌 속성에 종속적인 속성이 있으면    안된다 .   어떠한 속성도 Primary Key 에 transitiv...
SQL 개요      SQL 이란 무엇인가      SQL 의 종류      DB 내의 object 이름 규칙      인포믹스 자료형 (Data Type)      Character Data Type    ...
SQL 이란 무엇인가 ?     Structured Query Language 의 준말     영어와 흡사한 언어     Database 와의 관련 작업을 가능하게 함 .     논리적인 database 의 mo...
SQL 의 종류   DDL(Data Definition Language)           DB 나 table 을 생성하고 , 그 구조를 수정하는 작업관련 구문   DML(Data Manipulation Langu...
DB 내의 object 이름 규칙   Informix version 에 따라 길이 제한이 다름 .       Informix 7.*,8.* ,9.1*: 18 글자 ( 영문기준 )       Informix 9.2*...
인포믹스 자료형 (data type)                                  Character                              char                         ...
Character Data Type   char (size)       고정 길이 문자 저장       1~ 32,767 byte 까지의 character 저장 가능       default 값은 1   var...
Numeric Data Type   decimal (precision,scale) or numeric (precision,scale)       고정 소수점 실수를 저장 ,32 유효자리수까지 표현       def...
Numeric Data Type   float or double precision       부동 소수점 실수를 저장       유효자리수 16 까지 표현 가능   real or smallfloat       ...
Large-Object Data Type   Large-Object data type       text           2G 까지의 ASCII character 형식의 object 를 저장       byte...
Time Data Type   date       연 , 월 , 일의 날짜를 저장       Format 을 정의할 수 있음 .(default : mm/dd/yyyy)       환경변수 DBDATE 를 이용해 ...
Row Data Type   C 언어의 구조체와 유사한 여러 종류의 데이터의 모음   Unnamed Row Data Type          create table part ( part_id serial ,     ...
Collection Data Type   Set       데이터 입력 순서에 의미 없고 , 중복된 값을 허용하지 않음           alter table part add (defective_dates set(d...
Complex Data Type   User-defined Data Types (UDTs) 라고 부른다   Distinct Types       기존에 존재하는 데이터형을 기반으로한 새로운 데이터형을 나타낸다   ...
dbaccess 를 이용한 query 실행       dbaccess   란?       dbaccess   실행       dbaccess   의 메뉴 구조       dbaccess   의 실행방법
Dbaccess 란 ?   Query 를 실행하고 , db 나 table 에 대한 information 을 볼 수 있는    toolINFORMIX User                34
Dbaccess 실행   $ dbaccess   메뉴의 사용법       Space-bar 를 이용하거나 화살표키로 이동       혹은 각 메뉴의 대문자로 쓰여진 문자를 누름           예 : Exit...
Dbaccess 의 메뉴구조   Query Language    Connection     Database        Table       Session     Exit    New             Connect...
Dbaccess 의 실행 방법   구문을 적은 file 을 명령 프롬프트에서 바로 실행하여 결과를 볼 수 있    다.       Shell program, cron job 등에 응용 가능       dbacces...
Informix DBMS 의 이해       Informix DBMS 의 아키텍쳐       Database Server 의 구성요소       물리적인 저장 공간       논리적인 저장 공간       물리...
Informix DBMS 의 아키텍쳐     Client/Server 구조                 Multi-threaded 구조         client 는 server 에게                ...
Database Server 의 구성 요소    빠른 access    를 위하여 disk              Shared Memory    로부터 데이터    를 cache 하는                    ...
물리적인 저장 공간   Page         IDS 의 기본적인 I/O 의 단위         CHUNK 를 구성하는 최소 단위 .         메모리 버퍼의 사이즈와 동일         Size : 2K ...
논리적인 저장공간   Tblspaces       Table 에 할당된 extent 의 묶음       하나의 dbspace 에만 존재가능   Dbspaces       Informix 가 사용하는 저장 공간으...
물리적인 디스크 공간 할당                                           first_table          create table first_table (             tab_i...
논리적 디스크 공간 할당          create database example1db;          create database example2db in dbspace1;   rootdbs          cre...
SYSMASTER 데이터베이스   Informix 서버의 정보를 저장   Informix 서버가 초기화 되는 시점에 자동 생성   공유메모리의 실제 데이터를 접근 (access)     SELECT dbsnum, ...
데이터베이스 구조 (1)   시스템 카타로그 테이블 (system catalog table)       데이터베이스의 구조에 대한 정보를 저장       데이터베이스가 생성되는 시점에 자동적으로 생성       ...
데이터베이스 구조 (2)   제약조건 (Constraints)         Referential constraint : 테이블간의 integrity 보장         Default values : 입력 내용이 ...
데이터베이스 구조 (3)   dbschema utility       데이터베이스의 구조를 파악할 수 있는 유틸리티       사용법             dbschema   -d   <DB   이름   >   ...
SQL 을 이용한 질의 방법      SQL 질의 작성 방법      DML 문의 종류      SELECT      SELECT 의 예      SQL 실행 경로 확인      INSERT, UPDATE, ...
SQL 질의 작성 방법   구문 ( 구문 , 테이블이름 , 컬럼이름등 ..) 은 대 소문자 상관 없다 .   질의의 내용이 아닌 주석의 경우       줄단위로는 “ --” 를 이용하고       단락단위로는 “...
DML 문의 종류   SELECT       테이블내의 자료를 가져옴 .       Row, column 단위   INSERT       테이블내에 새로운 자료를 입력       Row 단위   UPDATE...
SELECT   문법      Select 가져올 컬럼 리스트      From 테이블 이름      Where 가져올 조건      Group by 그룹으로 만들 대상 컬럼      Having 그룹내의 가져올 조건...
Select 의 예 (1)         SYNTAX                            SELECT * FROM customer;    Select *    From table_name ;  S 테이블의 ...
Select 의 예 (2)         SYNTAX                                     SELECT phone[2,3] FROM    Select column [ first, last ] ...
Select 의 예 (3) – where 조건 적   용         SYNTAX                                 SELECT stock_num, manu_code, unit    Select...
Select 의 예 (3-1) – where 조건     적용         SYNTAX     Select . . .                    SELECT * FROM customer     From . . ...
Select 의 예 (3-2) – where 조건     적용         SYNTAX     Select . . .                 SELECT * FROM customer     From . . .  ...
Select 의 예 (3-3) – where 조건     적용         SYNTAX     Select . . .              SELECT * FROM customer     From . . .     ...
Select 의 예 (4) – 정렬         SYNTAX    Select . . .     SELECT stock_num, manu_code    From . . .         FROM stock    Ord...
Select 의 예 (5) – 조건식의 사용         SYNTAX    CASE                           SELECT title,                                   ...
Select 의 예 (5-1) – 조건식의 사   용         SYNTAX                                     SELECT fname,                            ...
Select 의 예 (5-2) – 조건식의 사   용          SYNTAX                                          SELECT DECODE   DECODE(value1, valu...
Select 의 예 (6) – function 의 사   용          SYNTAX                                        UPDATE orders    today           ...
Select 의 예 (6-1) – Algebraic         SYNTAX                                              SELECT * FROM orders  ABS ( num_e...
Select 의 예 (6-2) –   Log,hex,length         SYNTAX    EXP (float_expression)      SELECT EXP(3) FROM angles;              ...
Select 의 예 (6-3) – time         SYNTAX                                        SELECT * FROM order  DATE (non_date_expr)   ...
Select 의 예 (6-4) – time         SYNTAX                                              SELECT TO_CHAR(begin_date,            ...
Select 의 예 (6-5) –   trigonometric         SYNTAX                                      SELECT COS(degrees*180/3.14)    COS...
Select 의 예 (6-6) – string         SYNTAX TRIM ( source_expr)                  SELECT TRIM(c1),                            ...
Select 의 예 (6-7) – string         SYNTAX                                  SELECT REPLACE(‘Mighxzy xzime’,’xz’,’t’)    REPL...
Select 의 예 (6-8) – string         SYNTAX                                  SELECT LPAD(‘Here we are’,16,’-_’ )             ...
Select 의 예 (6-9) – string         SYNTAX                                  SELECT city, LOWER(city), UPPER(city),    UPPER ...
Select 의 예 (6-10) – aggregate         SYNTAX                                  SELECT count(*) FROM stock;  COUNT(*)       ...
Select 의 예 (7) – group by,having         SYNTAX                          SELECT order_num,sum(total_price)    SELECT . . ....
Select 의 예 (8) – HINT 의 사용   Optimizer Directive (HINT) 란 ?       SQL 을 어떠한 방식으로 실행할 것인가를 결정하는 optimizer 에게 주는 지        ...
Select 의 예 (8-1) – access   method         SYNTAX                                   SELECT --+ INDEX(e salary_indx)    --+...
Select 의 예 (8-2) – access   method         SYNTAX                                     SELECT {+ FULL(e) } name, salary    ...
Select 의 예 (8-3) – Join Order         SYNTAX                                  SELECT --+ ORDERED    --+ ORDERED           ...
Select 의 예 (8-4) – Join Method         SYNTAX                            SYNTAX    --+ USE_NL                        --+ A...
Select 의 예 (8-2) – Optimization   Goal         SYNTAX                                    SELECT --+ FIRST_ROWS    --+ FIRS...
Select 의 예 (8-2) – First N         SYNTAX                                 SELECT FIRST 10 name, salary    SELECT FIRST n  ...
SQL 실행 경로 확인   SQL 구문이 optimizing 된 결과를 볼 수 있다 .       Set explain on;       확인하고자 하는 구문들 . . .       Set explain off;...
INSERT,UPDATE,DELETE   문법       Insert into 테이블 ( 컬럼이름들 ) values( 값들 );           테이블에 값들을 입력       Update 테이블 set 컬럼 ...
Concurrency Control   DB 는 다수의 사용자에 의해 공유됨 .   Read Concurrency - SELECT       4 가지의 isolation level 로 적용 .           ...
Concurrency Control - READ  Dirty Read                            Committed Read                     server process       ...
Concurrency Control - READ   Isolation level 의 적용       DB 의 형태 별 default 가 존재 한다 .             NO Logging DB : Dirty R...
Concurrency Control - UPDATE  Database Level Locking               Table Level Locking     database stores exclusive;     ...
Concurrency Control - Lock   Mode   다른 사용자에 의해 lock 이 걸려 있는 자료에 접근할때에는 default 로    기다리지 않고 error 를 return.      Set Lock...
Concurrency Control -   Page/Row   테이블 생성 시 default lock mode 는 page 단위      create table row_lock_table (         id    ...
SPL   Stored Procedure Language   Stored procedure 를 작성하는 데 사용됨 .   Stored procedure       DB 내에 저장된 SQL 문들과 , SPL 로 작...
SPL - 간단한 예제   작성         Stored procedure 의 이름   매개 변수의 이름   매개 변수의 type     create procedure test_proc(name varchar(10)...
SPL - 코드 내용 보기   DBSCHEMA utility      dbschema -d <dbname> -f <procedure 이름 >   sql.sql      dbschema -d <dbname> -f all...
SPL 생성 및 실행 - 기본구조   기본구조   Stored procedure 의 이름       매개변수                   문장 블럭 (statement block)      create proced...
SPL 생성 및 실행 - 매개변수와 리   턴값      create procedure delete_order (p_order_num int default null )         returning int, int; ...
SPL 생성 및 실행 - 커서사용   SPL                                         ESQL/C                                              EXEC...
SPL 생성 및 실행 - 호출 / 제거   SQL 문에서 호출      select * from orders where order_num = get_biggest_order(114);      insert into o...
SPL 구문 - 변수   SPL 내부에서 변수 선언         define   p_order_date date;                    유효한 데이터베이스 자료형         define   p_c...
SPL 구문 - 조건식   구문      IF 조건식 THEN 문장 1      ELIF 조건식 THEN 문장 2      ELSE 문장 3      END IF   조건식의 예      if exists (sele...
SPL 구문 - 루프   FOREACH      foreach select ship_charge into p_ship_charge from orders          :      end foreach;   WHIL...
SPL 구문 – dbinfo 사용   serial 값 반환      define ser int;      insert into orders (order_num, order_date, customer_num)      ...
SPL 구문 - 기타   업데이트 커서        define p_ship_date date;                                               업데이트 커서의 이름을 명시해야 한다 ...
Trigger   트리거 (Trigger) 는 어떠한 이벤트가 발생했을때 자동적으로 SQL 문을    실행하도록 하는 데이터베이스 메커니즘   트리거 이벤트 (event) 는 특정 테이블에 대해 INSERT, UPD...
Trigger - Event / Action   트리거 이벤트 (event)         INSERT ON 테이블이름         DELETE ON 테이블이름                             ...
Trigger - referencing   트리거 동작 전 , 후의 값을 구분하기 위하여 correlation name 을 부여   NEW, OLD 는 키워드로 DELETE 이벤트에서는 NEW 가 사용 될 수 없  ...
Trigger - when   트리거 이벤트가 발생되었을때 WHEN 절에 조건이 만족하는지 먼저 검    사한 후 조건이 맞을 때에 트리거 액션이 동작한다 .   예제      create trigger ins_cu...
DB admin 작업       DB admin 작업이란       DB 의 생성       Table 의 생성       Table 의 분할       보안의 설정       데이터 무결성 보장      ...
DB admin 작업이란   DB admin 작업이란 ?         DB 와 관련된 사항을 결정하고 , 변경하는 작업         DB 나 table 을 생성하는 작업         보안을 적용하는 작업  ...
DB 의 생성   DB 의 생성시 다음의 사항을 고려해야 한다 .       DB 를 물리적으로 어느 위치에 둘 것인가           DB 가 위치할 dbspace 를 지정함 .       DB 는 어떤 형태...
Table 의 생성   Table 생성시 다음의 사항을 고려해야 한다 .         컬럼에는 어떤 자료형을 사용할 것인가         테이블에 대해 분할 할 것인가         테이블의 위치       ...
Table 의 분할     한 테이블의 데이터를 여러 dbspace 에 분할한다     병렬적으로 데이터를 입출력 할 수 있다     입출력의 부하를 균등하게 조절할 수 있다     데이터의 가용성을 향상 시킨다...
Table 의 분할 - round robin                create table roundtable (                          col_1 serial,                  ...
Table 의 분할 - Expression           create table exprtable (                    col_1 serial,                    col_2 char(...
Table 의 분할 - hash           create table exprtable (                    col_1 serial,                    col_2 char(20),  ...
Table 의 분할 - guidelines     가급적 remainder 절을 쓰지 않도록 expression 을 만든다     여러 디스크에 I/O 를 분산할 수 있도록 고려한다     expression 은 ...
보안의 설정   보안의 적용 방법       권한 제한       View 의 사용       Role 의 사용   권한의 종류       DB level : DBA,RESOURCE,CONNECT      ...
보안의 설정 - 권한 제한   권한 설정 방법       GRANT 권한이름 <on 테이블이름 ( 컬럼이름 )> to user 이름 ;       REVOKE 권한이름 <on 테이블이름 > from user 이름 ...
보안의 설정 - view 의 사용   View 는 테이블의 일부 혹은 계산된 값등에 설정될 수 있다 .   예          create view cust_seoul as          select * from ...
보안의 설정 - role 의 사용   Role 이란 , 사용자의 그룹 권한의 제한이 , 개인별로가 아닌 그룹별로    해야할 필요가 있을때에 쓰임 .   개인은 개인의 권한으로의 작업도 가능하고 , role 의 일원...
데이터 무결성의 보장 (1)   데이터값에 대한 속성을 제한자 (constraint) 를 통해 적용 .   종류         Primary Key         Foreign key         CHECK ...
데이터 무결성의 보장 (2)   Constraint 의 이름은 자동적으로 부여 될 수 있지만 , 직접 명시할 수도    있다          CREATE TABLE orders (            order_num...
데이터 무결성의 보장 (3)   Referential Constraint 의 종류       Cyclic referential constraints                                      ...
데이터 무결성의 보장 (4)   Cyclic referential constraints          create table customer (                                        ...
데이터 무결성의 보장 (5)   Multiple path referential constraints          create table stock (                                    ...
인덱스의 생성   테이블에 대해 빠른 접근을 위해 사용   OLTP 업무의 경우 인덱스의 생성은 매우 중요함 .   다음에 해당되는 컬럼에 생성하는 것이 좋음 .       조인의 대상이 되는 컬럼       ...
질의 수행을 최적화 해주기 위한 작   업   서버로 전달된 모든 질의는 다음의 과정을 거침          Parsing       Optimizing       Executing    유효성 , 문법 등을 체크  ...
질의 수행을 최적화 해주기 위한 작   업   Update statistics       System catalog 의 데이터 관련 통계자료를 갱신       데이터에 대한 분포도를 만들어줌 .   Mode 의 ...
질의 수행을 최적화 해주기 위한 작   업   언제 수행하여야 하나 ?       대량의 데이터 변경시에는 반드시 해주어야 한다 .            Bulk Data loading 후 , bulk update ...
Data Migration   DB 혹은 table 을 file 로 내릴 필요가 있을때 사용 .   Data Backup 의 하나의 방법으로도 사용 가능   서로 다른 기종의 machine 에 있는 서버로 데이터를...
Data Migration - Unloading   종류       UNLOAD 구문           SQL 구문이므로 사용하기 쉽고 , 원하는 조건에 따라 내려 받을 수 있다 .                 ...
Data Migration - Loading   종류       LOAD 구문           SQL 구문이므로 사용하기 쉽고 , 원하는 조건에 따라 내려 받을 수 있다 .                 LOAD...
ESQL/C 를 이용한 프로그래밍      ESQL/C 란      ESQL/C 의 사용      ESQL/C 프로그램 작성 규칙      ESQL/C 프로그램 compile      ESQL/C 프로그램 작성...
ESQL/C 란  
Informix user guide
Informix user guide
Informix user guide
Informix user guide
Informix user guide
Informix user guide
Informix user guide
Informix user guide
Informix user guide
Informix user guide
Informix user guide
Informix user guide
Informix user guide
Informix user guide
Informix user guide
Informix user guide
Informix user guide
Informix user guide
Informix user guide
Informix user guide
Informix user guide
Informix user guide
Informix user guide
Informix user guide
Informix user guide
Informix user guide
Informix user guide
Informix user guide
Informix user guide
Informix user guide
Informix user guide
Informix user guide
Informix user guide
Informix user guide
Informix user guide
Informix user guide
Informix user guide
Informix user guide
Informix user guide
Informix user guide
Informix user guide
Informix user guide
Informix user guide
Informix user guide
Informix user guide
Informix user guide
Informix user guide
Informix user guide
Informix user guide
Informix user guide
Informix user guide
Informix user guide
Informix user guide
Informix user guide
Informix user guide
Informix user guide
Informix user guide
Informix user guide
Informix user guide
Informix user guide
Informix user guide
Informix user guide
Informix user guide
Informix user guide
Informix user guide
Informix user guide
Informix user guide
Informix user guide
Informix user guide
Informix user guide
Informix user guide
Informix user guide
Informix user guide
Informix user guide
Informix user guide
Informix user guide
Informix user guide
Informix user guide
Informix user guide
Informix user guide
Informix user guide
Informix user guide
Upcoming SlideShare
Loading in …5
×

Informix user guide

2,772 views

Published on

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
2,772
On SlideShare
0
From Embeds
0
Number of Embeds
4
Actions
Shares
0
Downloads
29
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Informix user guide

  1. 1. INFORMIX User Guide 2001. 6 Informix Korea
  2. 2. 목차  RDB 란 무엇인가  SQL 개요  dbaccess 를 이용한 query 실행  Informix DBMS 의 이해  SQL 을 이용한 질의 방법  DB Admin 작업  ESQL/C 를 이용한 프로그래밍  System Admin 작업  Client/Server Connectivity  Data Migration  Backup & Restore  GLS (Global Language Support)INFORMIX User 2
  3. 3. RDB 란 무엇인가  정보와 데이터  정보시스템  자료처리시스템  데이터베이스의 정의  데이터베이스의 특성  DBMS 발전 배경  데이터 독립성과 데이터 구조간의 사상  데이터베이스 관리시스템  데이터 모델링  관계 데이터 모델  계층 데이터 모델  네트워크 데이터 모델  Primary Key 와 Foreign Key  정규화 (Normalization)
  4. 4. 정보와 데이터  데이터  현실 세계 (Real World) 로부터 단순한 관찰이나 측정을 통해서 수집한 사실 (Fact) 또는 값 (Values)  정보  어떤 상황에 관한 어떤 의사 결정을 할 수 있게 하는 지식 (Knowledge) 로써 데이터의 유효한 해석 (Interpretation) 이나 데이터 상호간의 관계 (Relationship) 처리기 (P) 정보 (I) 데이터 (D)INFORMIX User 4
  5. 5. 정보 시스템  경영 정보 시스템 (MIS : Management Information System)  군사 정보 시스템 (Military Information System)  행정 정보 시스템 (Administration Information System)  인사 정보 시스템 (Personnel Information System)  의사 결정 지원 시스템 (Decision Support System) 의 수집 입력 출력 사 현실 세계 처리기 (P) 정보 (I) 분배 데이터 (D) 결 정 저장 데이터INFORMIX User 5
  6. 6. 자료 처리 시스템  정보 시스템을 구축 하기 위해 정확한 최신의 정보를 적시에 제공하는 시 스템  자료 처리 시스템의 종류  일괄 처리 시스템 (batch Processing)  온라인 처리 시스템 (on-line processing)  분산 처리 시스템 (distributed processing)INFORMIX User 6
  7. 7. 데이터베이스의 정의  데이터베이스란 어느 한 조직의 다수 응용 시스템들이 사용하기위해 통 합 , 저장된 운영 데이터의 집합  통합된 데이터 (Integrated Data)  최소의 중복 , 통제된 중복 허용  저장된 데이터 (Stored Data)  운영 데이터 (Operational Data)  존재 목적이 뚜렷하고 필수 적인 데이터  공용 데이터 (Shared Data)INFORMIX User 7
  8. 8. 데이터 베이스의 특성  실시간 접근성 (Real Time Accessibility)  수시적이고 비 정형적인 데이터의 검색이나 처리를 요구하는 질의  질의 (Queries) 에 대하여 실시간에 처리 응답  계속적인 변화 (Continuous Evolution)  데이터의 삽입 , 삭제 , 갱신을 통하여 가장 최근의 정확한 데이터를 유지  동시 공유 (Concurrent Sharing)  동시에 여러사용자가 접근 이용 가능  내용에 의한 참조 (Content Reference)  데이터 레코드들은 주소나 위치에 의해 참조되는 것이 아니라 데이터의 내용 즉 , 어떤 특정 조건을 만족하는 레코드들은 모두 하나의 논리적 단위로 취급 되고 접근INFORMIX User 8
  9. 9. DBMS 발전 배경  데이터의 종속성  데이터의 중복성  내부적 일관성 (Consistency)  보안성 (Security)  경제성 (Economics)  무결성 (Integrity)  데이터의 독립성  논리적 데이터 독립성  물리적 데이터 독립성INFORMIX User 9
  10. 10. 데이터 독립성과 데이터 구조간의 사 상 프로그램 데이터 구조 데이터베이스 논리적 구조 A B C A 물리적 D 데이터베이스 응용 프로그램 1 B C 논 물 B 리 D 리 사적 사적 A B C E 상 상 D E F 구 E 구 F G H ... 응용 프로그램 2 조 조 F G G H A 응용 프로그램 3 CINFORMIX User 10
  11. 11. 데이터베이스 관리시스템  응용 프로그램과 데이터의 중재자로써 모든 응용 프로그램들이 데이터베 이스를 공용할 수 있게끔 관리해 주는 소프트웨어 시스템  정의 기능  데이터베이스의 논리적 구조와 그 특성을 어떤 데이터 모델에 따라 명세  데이터베이스의 물리적 구조를 명세  물리적 구조와 논리적 구조의 변환이 가능하도록 사상 (mapping) 을 명세  조작 기능  데이터 처리가 간편하고 쉬우며 명확하고 완전하고 효율적  제어 기능  데이터 무결성 제어  보안과 권한을 검사  동시성 제어 (Concurrency Control)INFORMIX User 11
  12. 12. 데이터 모델링 객체 ( 그 엔티티 타입 레코드 룹 에트리뷰트 데이터 필드 ) 값 값 성 질 값 현실 세계 ( 실체 개념 세계 ( 정보 ) 컴퓨터 세계 ( 데이터 ) ) 정보 모델링 현실 세계 개념 세계 데이터 일치성 모델링 데이터구조화 물리적 데이터 모델 데이터베이스 컴퓨터 세계INFORMIX User 12
  13. 13. 관계 데이터 모델  현실 세계를 ER 다이어 그램으로 표현한 것은 현실 세계를 사람이 이해 할 수 있게 표현한 논리적 구조 현실 세계 ER 데이터 저장 다이어그램 모델 데이터베이스 학번 이름 학년 학과 학번 과목 번호 성적 학생 수강 1234 김철수 3 전산 1235 CS312 90 1235 이상철 4 전산 1246 CS312 85 1246 박영수 3 전자 1234 CS322 88 1248 조성진 3 전기 1235 CS322 95 1225 강신조 1 산공 1248 CS322 94 1234 CS412 98 과목 번호 과목이름 학점 교과목 1235 CS412 75 CS312 자료 구조 3 1246 CS412 80 CS322 파일 처리 3 CS412 데이터베이스 3INFORMIX User 13
  14. 14. 계층 데이터 모델 교과목 데이터베이스 CS 421.2 선수 과목 강 좌 파일 처리론 CS 421.1 홍수영 교 수 학 생 이상길 김철수INFORMIX User 14
  15. 15. 네트워크 데이터 모델 1000, 갑 , 경영 , 4 A 영어 , 4 B C 역사 , 3 2000, 을 , 전산 , 3 D A 음악 , 2 3000, 병 , 영문 , 2 B CINFORMIX User 15
  16. 16. Primary Key 와 Foreign Key  Primary Key  각 개체를 유일하게 구분할 수 있는 속성 혹은 속성의 조합 .  Primary 는 반드시 존재하는 값이어야 한다 .  모든 개체는 하나의 primary key 를 가져야 한다 .  예  고객 개체 : 주민번호  상품 개체 : 상품 코드 , 제조업체  학생 개체 : 학번  Foreign Key  다른 개체의 primary key 를 참조해야 하는 개체의 속성  개체 간에 관계를 설정하기위해 사용되는 속성 혹은 속성의 집합  값이 없어도 가능  중복된 값 가능  수정 가능  예  주문 개체의 주문 고객 속성 고객 개체의 고객번호  수강 개체의 수강 학생 속성 학생 개체의 학번INFORMIX User 16
  17. 17. 정규화 - 1NF(First Normal Form)  엔티티 (entity) 안에 반복되는 속성 그룹을 제거한다 주문 주문 주문번호 주문날짜 주문번호 composite 총액 항목번호 primary key 항목번호 1 수량 항목수량 1 주문날짜 반복되는 속성은 데이터를 유 항목번호 2 총액 연하게 저장할 수 없다 . 항목수량 2 지불날짜 여기서 , 항목은 최대 4 개밖에 항목번호 3 저장할 수 없다 항목수량 3 항목번호 4 항목수량 4INFORMIX User 17
  18. 18. 정규화 - 2NF(Second Normal Form)  1NF 에서 모든 속성은 전체 Primary Key 에 종속되어야한다  엔티티의 모든 속성은 Primary Key 에 functionally dependent 해야 한다  데이터항목 a 가 데이터항목 b 에 의해 정의될 수 있다면 a 는 b 에 functionally dependant 하다고 한다 주문 주문마스터 주문번호 주문날짜 , 총액 , 주문번호 주문날짜 지불날짜는 단지 항목번호 총액 주문번호에만 수량 지불날짜 functionally 주문날짜 dependant 하다 총액 지불날짜 주문상세 주문번호 주문번호 1010 1010 1011 1010 항목의 지불 항목번호 항목번호 1 2 3 수량 수량 20 3 12 날짜가 바뀌면 모 주문날짜 1/4/2001 1/4/2001 1/4/2001 든 1010 항목을 수 총액 50,000 50,000 50,000 지불날짜 2/4/2001 2/4/2001 2/4/2001 정해야 한다INFORMIX User 18
  19. 19. 정규화 - 3NF(Third Normal Form)  Primary Key 에 종속적인 Key 가 아닌 속성에 종속적인 속성이 있으면 안된다 .  어떠한 속성도 Primary Key 에 transitively dependent 하면 안된다 .  데이터항목 a 가 다른 데이터항목 b 에 종속적이면 a 는 b 가 종속적인 다른 데이터 항목에도 함께 종속적인 관계가 되고 이를 transitively dependent 하다고 말한다 주문가격 주문 품목 주문번호 주문번호 항목번호 항목번호 품목번호 품목번호 품목번호 제조코드 제조코드 제조코드 단가 수량 수량 단가 주문번호 1010 1010 1011 주문하지 않은 항목에 대한 단가를 입력할 수 없다 항목번호 1 2 1 품목번호 1 30 1 항목을 포함한 주문이 삭제되면 그 항목의 단가를 잃는다 제조코드 ABC XYZ ABC 단가는 중복적으로 저장된다 수량 20 3 12 단가 1,000 3,500 1,000 단가가 변경되면 그 항목을 포함한 모든 주문에 대해서 변 경해야 한다INFORMIX User 19
  20. 20. SQL 개요  SQL 이란 무엇인가  SQL 의 종류  DB 내의 object 이름 규칙  인포믹스 자료형 (Data Type)  Character Data Type  Numeric Data Type  Large Object Data Type  Time Data Type  Row Data Type  Collection Data Type  Complex Data Type
  21. 21. SQL 이란 무엇인가 ?  Structured Query Language 의 준말  영어와 흡사한 언어  Database 와의 관련 작업을 가능하게 함 .  논리적인 database 의 model 을 관계형 DB 의 schema 로 번역하는 데 사용되는 언어 .  schema 란 - DB 내에서의 table 의 물리적인 정의  table 이란 - 열과 행으로 이루어진 2 차원 표현INFORMIX User 21
  22. 22. SQL 의 종류  DDL(Data Definition Language)  DB 나 table 을 생성하고 , 그 구조를 수정하는 작업관련 구문  DML(Data Manipulation Language)  Data 를 가져오고 , 수정하고 , 삭제하는 등의 Data 를 사용하는데 사용되는 구문  Cursor Manipulation  Cursor 를 사용하는데 사용되는 구문  Dynamic Management  동적으로 자원을 사용 , 관리하는데 사용되는 구문  Data Access  Data 에 대한 권한을 설정하고 , lock 을 거는등의 작업에 사용되는 구문  Data integrity  Transaction 을 관리하는데 사용되는 구문  Query optimization  질의 최적화에 사용되는 구문  Stored procedure  Stored procedure 를 실행하는 작업에 사용되는 구문INFORMIX User 22
  23. 23. DB 내의 object 이름 규칙  Informix version 에 따라 길이 제한이 다름 .  Informix 7.*,8.* ,9.1*: 18 글자 ( 영문기준 )  Informix 9.2* : 128 글자 ( 영문기준 )  숫자로 시작하면 안됨 .  특수문자의 사용 불가  예 : 공백문자 , tab 문자 , 등…  “_ ” 는 사용 가능  ANSI-reserved word 사용 안됨 .INFORMIX User 23
  24. 24. 인포믹스 자료형 (data type) Character char Numeric Exact varchar Built-in Data Type Large-object Approximate lvarchar User-defined Data Type Time byte decimal/numeric Complex Data Type boolean text money Opaque Data Type blob integer/int Distinct Data Type clob smallint Row Type Named Row Type date int8 Collection Type Unnamed Row Type datetime serial set interval serial8 list decimal multiset float realINFORMIX User 24
  25. 25. Character Data Type  char (size)  고정 길이 문자 저장  1~ 32,767 byte 까지의 character 저장 가능  default 값은 1  varchar (max, reserve)  가변 길이 문자 저장  1~ 255 byte 까지 가능  Reserve(default 로 0 ) 는 option 이나 Max 는 반드시 주어야 함 .  lvarchar  2K 까지의 가변길이 문자를 저장INFORMIX User 25
  26. 26. Numeric Data Type  decimal (precision,scale) or numeric (precision,scale)  고정 소수점 실수를 저장 ,32 유효자리수까지 표현  default 자리수 : 16, default 소수점이하 : 0  money (precision, scale)  내부적으로 decimal 과 같으나 , 화폐단위기호가 붙어서 출력됨 .  integer or int  4bytes integer 저장 : -(2 31 -1) ~ 2 31 -1  int8  8bytes integer 저장 : -(2 63 -1) ~ 2 63 -1  smallint  2bytes integer 저장 : -(2 15 -1) ~ 2 15 -1  serial (start) / serial8 (start)  서버에 의해 자동적으로 1 씩 증가되는 값을 저장할 수 있는 type.  내부적으로 int 와 같음 .INFORMIX User 26
  27. 27. Numeric Data Type  float or double precision  부동 소수점 실수를 저장  유효자리수 16 까지 표현 가능  real or smallfloat  부동 소수점 실수를 저장  유효자리수 8 까지 가능INFORMIX User 27
  28. 28. Large-Object Data Type  Large-Object data type  text  2G 까지의 ASCII character 형식의 object 를 저장  byte  2G 까지의 binary character 형식의 object 를 저장  Smart Large Object data type  clob  4T 까지의 ASCII character 형식의 object 를 저장  blob  4T 까지의 binary character 형식의 object 를 저장INFORMIX User 28
  29. 29. Time Data Type  date  연 , 월 , 일의 날짜를 저장  Format 을 정의할 수 있음 .(default : mm/dd/yyyy)  환경변수 DBDATE 를 이용해 변경  datetime  날짜를 시간까지 저장할 수 있음 .  default : yyyy-mm-dd hh:MM:ss.fff  interval  시간의 간격 ( 기간 ) 을 저장할 수 있음 .INFORMIX User 29
  30. 30. Row Data Type  C 언어의 구조체와 유사한 여러 종류의 데이터의 모음  Unnamed Row Data Type create table part ( part_id serial , cost decimal, part_dimensions row (length decimal, width decimal, height decimal, weight decimal) ); insert into part values (0, 10.00, row(1.0, 2.0, 3.0, 4.0));  Named Row Data Type create row type dimension_t ( length decimal, width decimal, height decimal, weight decimal); create table part ( part_id serial, cost decimal, part_dimensions dimension_t); constructor Cast operator Row data type insert into part values (0, 10.00, row(1.0, 2.0, 3.0, 4.0)::dimension_t;  Row Data Type 데이터 조회 select part_id, cost, part_dimensions from part where part_dimensions.weight > 100;INFORMIX User 30
  31. 31. Collection Data Type  Set  데이터 입력 순서에 의미 없고 , 중복된 값을 허용하지 않음 alter table part add (defective_dates set(date not null)); insert into part (part_id, defective_dates) values (0,(set{2/23/2001,3/15/2001})); select * from part where ‘1/26/2001’ in defective_dates;  MultiSet  데이터 순서에 의미 없고 , 중복된 데이터를 허용함  List  데이터 순서가 의미 있고 , 중복된 데이터를 허용함INFORMIX User 31
  32. 32. Complex Data Type  User-defined Data Types (UDTs) 라고 부른다  Distinct Types  기존에 존재하는 데이터형을 기반으로한 새로운 데이터형을 나타낸다 create distinct type inches as decimal; create row type dimension_t ( length inches, width inches, . . . );  Opaque Data Types  C 언어나 JAVA 를 이용하여 데이터형의 내부 구조와 함수를 정의한다  Create Opaque Type 문을 이용하여 새로운 데이터형을 등록한다  Create Function 문을 사용하여 이 데이터형을 지원하는 함수를 등록한다INFORMIX User 32
  33. 33. dbaccess 를 이용한 query 실행  dbaccess 란?  dbaccess 실행  dbaccess 의 메뉴 구조  dbaccess 의 실행방법
  34. 34. Dbaccess 란 ?  Query 를 실행하고 , db 나 table 에 대한 information 을 볼 수 있는 toolINFORMIX User 34
  35. 35. Dbaccess 실행  $ dbaccess  메뉴의 사용법  Space-bar 를 이용하거나 화살표키로 이동  혹은 각 메뉴의 대문자로 쓰여진 문자를 누름  예 : Exit 의 경우 “ e” 를 누름INFORMIX User 35
  36. 36. Dbaccess 의 메뉴구조 Query Language Connection Database Table Session Exit New Connect Select Create Run Disconnect Create Alter Modify Exit Info Info Use-Editor Drop Drop Output cLose Exit Save Exit Info Drop Exit  NEW dbaccess editor 에서 SQL 문장을 작성한다 , 작성이 끝나면 ESC 키를 눌러야 메뉴로 돌아간다  RUN 작성된 SQL 문장을 실행한다  MODIFY dbaccess editor 에서 SQL 문장을 수정한다  USE_EDITOR vi editor 를 호출하여 SQL 문장을 작성 및 수정한다 . 작성이 끝나면 저장하고 vi 를 종료한다  OUTPUT 출력결과를 파일로 저장한다  SAVE editor 에 기록되어 있는 SQL 문장을 파일로 저장한다 ( 확장자 : .sql)  INFO 현재 연결된 데이터베이스의 테이블 정보를 본다  DROP 현재 디렉토리에 저장된 SQL 파일 ( 확장자 : .sql) 을 삭제한다  EXIT Query Language 종료INFORMIX User 36
  37. 37. Dbaccess 의 실행 방법  구문을 적은 file 을 명령 프롬프트에서 바로 실행하여 결과를 볼 수 있 다.  Shell program, cron job 등에 응용 가능  dbaccess DB 이름 SQL 파일명 dbaccess test_db test.sql  Interactive mode 로 prompt 상에서 실행한다  SQL 문장 끝에 세미콜론 (;) 을 넣어야 실행된다  종료는 interrupt 키를 눌러 빠져나온다 dbaccess test_db - > select * from customer;  여러 문장을 그룹으로 프롬프트에서 실행한다  새 입력 라인 첫 자리에 종료 문자가 나타날때까지 문장을 입력 받는다 dbaccess test_db << ! > select * from customer; > select * from state; !INFORMIX User 37
  38. 38. Informix DBMS 의 이해  Informix DBMS 의 아키텍쳐  Database Server 의 구성요소  물리적인 저장 공간  논리적인 저장 공간  물리적 디스크 공간 할당  논리적 디스크 공간 할당  SYSMASTER 데이터베이스  데이터베이스 구조
  39. 39. Informix DBMS 의 아키텍쳐  Client/Server 구조  Multi-threaded 구조  client 는 server 에게  적은 프로세스 소요 command 나 query 를 보내  여러 프로세스가 하나의 어플리케이션 고 결과를 받는다 을 위하여 작업  server 는 데이터베이스의 컨  서버 프로세스 안에서 thread 텐츠를 관리하며 client 가 보 scheduling 과 context switching 낸 query 를 해석하고 실행하 여 결과를 client 에게 보낸다 application •interpre t •execute SQL •return results process process process Client Server ServerINFORMIX User 39
  40. 40. Database Server 의 구성 요소 빠른 access 를 위하여 disk Shared Memory 로부터 데이터 를 cache 하는 Lock, LRU, Buffer Pool, Resident Portion Logical log buffer, 영역 사용자 세션 관 Physical Log Buffer.. Virtual Message 리 MT, Sort, client 와 Portion Portion server 간의 통 Session, Procedure, Dictionary, 신 영역 메모리와 디스 크 데이터의 동 Big buffer, Global.. 환경변수 : INFORMIXSERVER, INFORMIXDIR, 기화 작업 PATH checkpoin t Processes Chunk Disk Page V.P 는 자체적으로 Extent thread 를 Tblspace scheduling 하고 Dbspace 실행한다 Blobspace Virtual Processors Smart Blobspace (CPU, PIO, LIO, AIO, ADT, MSC, SHM, Physical Log, Logical Log TLI, SOC, ADM, OPT, JVP..)INFORMIX User 40
  41. 41. 물리적인 저장 공간  Page  IDS 의 기본적인 I/O 의 단위  CHUNK 를 구성하는 최소 단위 .  메모리 버퍼의 사이즈와 동일  Size : 2K 혹은 4K  Extent  Table 이나 index, fragment 에 저장영역을 할당하는 단위로서 , 연속된 페 이지의 묶음 .  Chunk  Informix 에 할당된 연속된 disk 의 공간  Raw device 나 cooked device(file) 가능INFORMIX User 41
  42. 42. 논리적인 저장공간  Tblspaces  Table 에 할당된 extent 의 묶음  하나의 dbspace 에만 존재가능  Dbspaces  Informix 가 사용하는 저장 공간으로 하나 이상의 Chunk 로 구성됨 . /dev/rvol1 Tab1 의 tablespace dbspace Tab2 의 tablespace /usr/ifmxdata /dev/rvol2INFORMIX User 42
  43. 43. 물리적인 디스크 공간 할당 first_table create table first_table ( tab_id int , name char(20) , second_table address char(50) ) extent size 32 next size 16; create table second_table ( ………… tab_id int , name char(20) , address char(50) ) extent size 16 next size 8; pageINFORMIX User 43
  44. 44. 논리적 디스크 공간 할당 create database example1db; create database example2db in dbspace1; rootdbs create table first_table ( tab_id int , name char(20) , example1db address char(50) ) ; create table second_table ( dbspace1 tab_id int , name char(20) , example2db address char(50) ) in dbspace2; first_table dbspace2 second_tableINFORMIX User 44
  45. 45. SYSMASTER 데이터베이스  Informix 서버의 정보를 저장  Informix 서버가 초기화 되는 시점에 자동 생성  공유메모리의 실제 데이터를 접근 (access) SELECT dbsnum, name, owner, nchuncks, is_temp, shared memory is_blobspace, flags SELECT partnum, dbsnum, FROM sysdbspaces owner, tabname FROM systabnamess process WHERE dbsname = “DB 이름 ” SELECT name, owner, created, is_logging, sysmaster is_buff_log, is_ansi FROM sysdatabases SELECT sid, username, uid SELECT c.dbsnum, chknum, hostname, nxchknum, d.name, connected chksize, nfree FROM syssessions FROM syschunks c, sysdbspaces c WHERE c.dbsnum = d.dbsnum AND d.name = “dbspace 이름”INFORMIX User 45
  46. 46. 데이터베이스 구조 (1)  시스템 카타로그 테이블 (system catalog table)  데이터베이스의 구조에 대한 정보를 저장  데이터베이스가 생성되는 시점에 자동적으로 생성  데이터베이스내의 테이블 구조가 변경되는 시점에 자동으로 수정  데이터 테이블  테이블을 생성할 때 고려할 사항  dbspace : 테이블이 생성될 위치  extent/next size : 연속으로 할당할 공간의 크기  lock mode : row 또는 page 단위의 locking 사용  인덱스  데이터를 빠르게 접근하기 위한 정보를 저장  인덱스의 종류  데이터 중복 여부에 따라 unique / duplicate 인덱스로 구분  여러 컬럼을 인덱스 키로 사용하는 composite 인덱스  인덱스 생성 시 데이터의 물리적 위치를 재 정렬시키는 cluster 인덱스INFORMIX User 46
  47. 47. 데이터베이스 구조 (2)  제약조건 (Constraints)  Referential constraint : 테이블간의 integrity 보장  Default values : 입력 내용이 없을 경우 지정한 기본값 저장  NOT NULL constraint : null 값을 허용하지 않는 컬럼 지정  Check constraint : 입력 , 수정시 허용하는 컬럼 값을 지정  Unique constraint : 컬럼값이 테이블안에서 유일  뷰 (view) 테이블  실제 테이블에서 데이터를 가져오는 가상의 테이블  Stored Procedure  사용자가 정의한 함수  데이터베이스 안에 저장되는 로직  Trigger  테이블에 이벤트 발생시 자동적으로 실행INFORMIX User 47
  48. 48. 데이터베이스 구조 (3)  dbschema utility  데이터베이스의 구조를 파악할 수 있는 유틸리티  사용법  dbschema -d <DB 이름 >  dbschema -d <DB 이름 > -t <table 이름 >  dbschema -d <DB 이름 > -s <synonym 이름 >  dbschema -d <DB 이름 > -f <procedure 이름 >  table 이름 , synonym 이름 , procedure 이름 대신 “ all” 을 사용하면 지정한 데이 터베이스 내의 모든 table, synonym, procedure 에 대한 정보를 출력한다  옵션뒤에 파일 이름을 명시하면 실행결과가 파일로 저장된다  -ss 옵션을 추가하면 테이블의 lock mode, extent, space 정보 등을 자세히 출 력한다 .INFORMIX User 48
  49. 49. SQL 을 이용한 질의 방법  SQL 질의 작성 방법  DML 문의 종류  SELECT  SELECT 의 예  SQL 실행 경로 확인  INSERT, UPDATE, DELETE  Concurrency Control  SPL  SPL 생성 및 실행  SPL 구문  Trigger
  50. 50. SQL 질의 작성 방법  구문 ( 구문 , 테이블이름 , 컬럼이름등 ..) 은 대 소문자 상관 없다 .  질의의 내용이 아닌 주석의 경우  줄단위로는 “ --” 를 이용하고  단락단위로는 “ { }” 를 이용한다 .  문자를 입력하거나 , 비교할때에는 인용부호가 필요하다 .  조건의 대상이되는 문자열의 경우 대소문자를 구별한다 .  “CA” ,”ca”, “Ca” 는 모두 다르다 .  한 문장은 “ ;” 로 끝난다 .INFORMIX User 50
  51. 51. DML 문의 종류  SELECT  테이블내의 자료를 가져옴 .  Row, column 단위  INSERT  테이블내에 새로운 자료를 입력  Row 단위  UPDATE  테이블내의 자료를 갱신  Column 단위  DELETE  테이블내의 자료를 삭제  Row 단위INFORMIX User 51
  52. 52. SELECT  문법 Select 가져올 컬럼 리스트 From 테이블 이름 Where 가져올 조건 Group by 그룹으로 만들 대상 컬럼 Having 그룹내의 가져올 조건 Order by 정렬 기준 컬럼 Into temp 임시테이블의 이름INFORMIX User 52
  53. 53. Select 의 예 (1) SYNTAX SELECT * FROM customer; Select * From table_name ; S 테이블의 모든 컬럼을 가져온다 . SYNTAX SELECT distinct customer_num Select distinct 컬럼이름 FROM orders From table_name ; 테이블의 특정 컬럼중 유일한 값만을 가져 온다 .INFORMIX User 53
  54. 54. Select 의 예 (2) SYNTAX SELECT phone[2,3] FROM Select column [ first, last ] customer; From table_name ; Output : Phone 테이블의 특정 컬럼의 first 부터 last 까 08 지를 11 가져온다 . 12 SYNTAX SELECT substr(phone,2,3) Select substr(column,first,n) FROM customer; From table_name ; Output : (expression) 테이블의 특정 컬럼의 first 부터 n 개의 문자를 789 가져온다 . 822 328INFORMIX User 54
  55. 55. Select 의 예 (3) – where 조건 적 용 SYNTAX SELECT stock_num, manu_code, unit Select . . . FROM stock From . . . WHERE unit != ‘case’; Where [ 조건 ] ] 특정 row 를 가져옴 .  stock 테이블 중 unit 컬럼 값이 case join 의 조건 인 것만 가져온다 . SELECT stock_num, manu_code, unit FROM stock WHERE unit != ‘case’;  stock 테이블 중 unit 컬럼 값이 case 가 아닌 것만 가져온다 .INFORMIX User 55
  56. 56. Select 의 예 (3-1) – where 조건 적용 SYNTAX Select . . . SELECT * FROM customer From . . . WHERE customer_num in Where 컬럼 in ( 값 , 값 . . . ); (118,114,106); 테이블의 컬럼이 값들중에 있다면 모두 가져온다 . SYNTAX Select . . . SELECT * FROM stock From . . . WHERE unit_price between 20.00 and Where 컬럼 between A and B; 30.00; . 테이블의 컬럼이 A 와 B 사이인것을 가져온다 .INFORMIX User 56
  57. 57. Select 의 예 (3-2) – where 조건 적용 SYNTAX Select . . . SELECT * FROM customer From . . . WHERE address2 is null; Where 컬럼 is null ; S 테이블의 컬럼이 null 값인것을 가져온다 . SYNTAX Select . . . SELECT * FROM customer From . . . WHERE address2 is not null; Where 컬럼 is not null ; . 테이블의 컬럼이 null 값이 아닌것을 가져온다 .INFORMIX User 57
  58. 58. Select 의 예 (3-3) – where 조건 적용 SYNTAX Select . . . SELECT * FROM customer From . . . WHERE phone[1,3] matches ‘415’; Where 컬럼 matches ‘* 값 *’; SELECT * FROM customer WHERE company matches S 테이블의 컬럼에 값을 포함한 것을 가져온다 . ‘*City*’; SYNTAX Select . . . SELECT customer_num , company From . . . FROM customer Where 컬럼 like ‘% 값 %’; WHERE company like ‘City%’; . 테이블의 컬럼에 값을 포함한 것을 가져온다 .INFORMIX User 58
  59. 59. Select 의 예 (4) – 정렬 SYNTAX Select . . . SELECT stock_num, manu_code From . . . FROM stock Order by 컬럼 ; ORDER BY stock_num;  stock 테이블의 row 를 stock_num 순서로 가져온다 . SELECT stock_num, manu_code FROM stock ORDER BY stock_num desc;  stock 테이블의 row 를 stock_num 내림 순서로 가져온다 .INFORMIX User 59
  60. 60. Select 의 예 (5) – 조건식의 사용 SYNTAX CASE SELECT title, CASE movie_type WHEN condition1 THEN result1 WHEN 1 THEN ‘HORROR’ WHEN condition2 THEN result2 WHEN 2 THEN ‘COMEDY’ . . . WHEN 3 THEN ‘ROMANCE’ ELSE result n WHEN 4 THEN ‘WESTERN’ END ELSE ‘UNCLASSIFIED’ END, S 조건에 따라 다른값을 출력한다 . our_cost FROM movie_titles;INFORMIX User 60
  61. 61. Select 의 예 (5-1) – 조건식의 사 용 SYNTAX SELECT fname, NVL(addr, “Address is missing”) NVL(value1, value2) as address FROM employees;value1 이 null 값이면 value2 를 출력한다 . Input : fname address Peter 3318 Rockdale Paul NULL Output : fname address Peter 3318 Rockdale Paul Address is missingINFORMIX User 61
  62. 62. Select 의 예 (5-2) – 조건식의 사 용 SYNTAX SELECT DECODE DECODE(value1, value2, value3, (city, “Menlo Park”, “local”, value4, . . . value n ) “Palo Alto”, “Tall Tree”, city) city FROM customer; value1 이 Input : Output : value2 이면 value3 을 return 하고 , city city value4 이면 value5 를 return 하고 , Menlo Park Local 아니면 valuen 을 return 한다 . Santa Clara Santa Clara Palo Alto Tall Tree San Francisco San FranciscoINFORMIX User 62
  63. 63. Select 의 예 (6) – function 의 사 용 SYNTAX UPDATE orders today SET order_date = TODAY current WHERE order_num = 1005; INSERT INTO orders VALUES (0, TODAY, 120, NULL, NULL, NULL);S 오늘 날짜를 return 한다 .today : 연 , 월 , 일 CREATE TABLE new_acct (current : 연 , 월 , 일 , 시 , 분 , 초 , 각 col1 int, col2 datetime year to day default current year to day ); DELETE FROM cust_calls WHERE res_dtime < CURRENT YEAR TO MINUTE; SELECT * FROM orders WHERE DAY(ord_date)<DAY(CURRENT); SELECT * FROM cust_calls WHERE call_dtime BETWEEN ‘1997-1-1 00:00:00’ AND CURRENT;INFORMIX User 63
  64. 64. Select 의 예 (6-1) – Algebraic SYNTAX SELECT * FROM orders ABS ( num_expression ) WHERE ABS(ship_charge) > 20; MOD ( dividend, divisor ) SELECT POW ( base, exponent ) MOD(today-mdy(1,1,year(today)),30) ROOT ( radicand, index ) default index:2 FROM orders; SELECT * FROM circle ROUND ( expr, factor ) default factor:0 WHERE (3.14 * POW(radius,2)) < SQRT ( sqrt_radicand ) 1000; TRUNC ( expr, factor ) default factor:0 SELECT ROOT(9) FROM square; SELECT ROOT(64,3) FROM cube; SELECT SQRT(9) FROM angles;INFORMIX User 64
  65. 65. Select 의 예 (6-2) – Log,hex,length SYNTAX EXP (float_expression) SELECT EXP(3) FROM angles; SELECT LOGN(population) FROM history LOGN (float_expression) ORDER BY date; LOG10 (float_expression) SELECT LOG10(distance) +1 digits HEX (expression) FROM travel; LENGTH(expression) SELECT tabname, HEX(partnum) FROM systables; SELECT HeX(order_num + 1) FROM orders; SELECT LENGTH(fname) + LENGTH(lname), LENGTH(‘How many bytes ?’) FROM customer;INFORMIX User 65
  66. 66. Select 의 예 (6-3) – time SYNTAX SELECT * FROM order DATE (non_date_expr) 1. WHERE DAY (date/datetime_expr) order_date<DATE(‘12/31/99’); MONTH (date/datetime_expr) 2. WHERE order_date < DATE(365); WEEKDAY (date/datetime_expr) 3. WHERE DAY(order_date) > DAY (CURRENT); YEAR (date/datetime_expr) SELECT order_num, MONTH(order_date) EXTEND (datetime_expr, first to last) FROM orders; MDY (month, day, year) SELECT * FROM orders WHERE WEEKDAY(paid_date) = WEEKDAY(CURRENT); SELECT order_num FROM orders WHERE YEAR(ship_date) < Date(365) = 12/31/1899+365day = 12/31/1900 YEAR(TODAY); WEEKDAY 는 일요일을 0 으로 시작하여 각 요일을 나타낸다 0 : Sunday, 1 : Monday, …INFORMIX User 66
  67. 67. Select 의 예 (6-4) – time SYNTAX SELECT TO_CHAR(begin_date, ‘%A %B %d, %Y %R’) FROM tab1; TO_DATE (String [,fmt] ) UPDATE tab1 TO_CHAR (String [,fmt] ) SET begin_date = TO_DATE (“Wednesday February 07, 01 14:17”, “%A %B %d, %Y %R”); The full weekday name as defined %A Input : in the locale begin_date The full month name as defined 2001-02-07 14:17 %B in the locale The day of the month as a decimal Output : %d number begin_date Wednesday February 07, 01 14:17 %Y The year as a 4-digit decimal number %R The time in 24-hour notationINFORMIX User 67
  68. 68. Select 의 예 (6-5) – trigonometric SYNTAX SELECT COS(degrees*180/3.14) COS/SIN/TAN (radian_expr) FROM anglestb1; ASIN/ACOS/ ATAN (numeric_expr) SELECT SIN(radians) FROM anglestb1; ATAN2 (y,x) SELECT TAN(radians) FROM anglestb1; SELECT ACOS(-0.73) FROM anglestb1; SELECT ASIN(-0.73) FROM anglestb1; SELECT ATAN(-0.73) FROM anglestb1 WHERE angles > ATAN2(4,5);INFORMIX User 68
  69. 69. Select 의 예 (6-6) – string SYNTAX TRIM ( source_expr) SELECT TRIM(c1), TRIM(TRAILING ‘#’ FROM TRIM ({ LEADING|TRAILING|BOTH } c1), [trim_expr] FROM source_expr) TRIM(LEADING FROM c1) TRIM ( trim_expr FROM source_expr) FROM tab; UPDATE c1 = ‘xyz’ FROM tab WHERE LENGTH(TRIM(c1))=5; SELECT c1, TRIM(LEADING ‘#’ FROM TRIM(TRAILING ‘%’ FROM ‘###abc %%%’)) FROM tab;INFORMIX User 69
  70. 70. Select 의 예 (6-7) – string SYNTAX SELECT REPLACE(‘Mighxzy xzime’,’xz’,’t’) REPLACE(string,old [,new] ) FROM mytable; Output : string 의 old 값을 new 로 대체한다 . (constant) Mighty timeINFORMIX User 70
  71. 71. Select 의 예 (6-8) – string SYNTAX SELECT LPAD(‘Here we are’,16,’-_’ ) FROM mytable; LPAD(string,length [,pad] ) SELECT RPAD(‘Where are you’,18,’?!’) RPAD(string,length [,pad] ) FROM mytable; Output : (constant) -_-_-Here we are W 왼쪽이나 오른쪽에 특정 문자를 채워 Length 만큼의 문자열을 만든다 . (constant) Where are you?!?!?INFORMIX User 71
  72. 72. Select 의 예 (6-9) – string SYNTAX SELECT city, LOWER(city), UPPER(city), UPPER (column or string) INITCAP(city) LOWER(column or string) FROM weather INITCAP (column or string) WHERE UPPER(city) = “SUNNYVALE”; Output : city UPPER : 모두 대문자로 sunnyVale LOWER : 모두 소문자로 INITCAP : 처음 문자만 대문자로 city (constant) (constant) (constant) sunnyVale sunnyvale SUNNYVALE SunnyvaleINFORMIX User 72
  73. 73. Select 의 예 (6-10) – aggregate SYNTAX SELECT count(*) FROM stock; COUNT(*) SELECT sum(total_price) FROM stock; AVG ( [DISTINCT|UNIQUE] column) SELECT city,state,count(*) MAX ( [DISTINCT|UNIQUE] column) FROM customer MIN ( [DISTINCT|UNIQUE] column) GROUP BY city,state; SUM ( [DISTINCT|UNIQUE] column) SELECT order_num,sum(total_price) FROM items COUNT([DISTINCT|UNIQUE] column) GROUP BY order_num; RANGE (expr) STDEV (expr) VARIANCE (expr)INFORMIX User 73
  74. 74. Select 의 예 (7) – group by,having SYNTAX SELECT order_num,sum(total_price) SELECT . . . FROM items FROM . . . GROUP BY order_num GROUP BY 컬럼 HAVING COUNT(*) > 2; HAVING 조건 ; H 기준 컬럼에 의해 만들어진 group 안에서 조건을 만족하는 그룹의 결과만을 가져온다 .INFORMIX User 74
  75. 75. Select 의 예 (8) – HINT 의 사용  Optimizer Directive (HINT) 란 ?  SQL 을 어떠한 방식으로 실행할 것인가를 결정하는 optimizer 에게 주는 지 시자 .  Index 의 사용 , join 방법 등을 지정할 수 있다 .  문법  그 줄의 끝까지가 DIRECTIVE 일때  “--+” 로 시작  여러 줄 혹은 그 줄의 일부가 DIRECTIVE 일때 {+ } 로 묶음INFORMIX User 75
  76. 76. Select 의 예 (8-1) – access method SYNTAX SELECT --+ INDEX(e salary_indx) --+ INDEX name, salary ( {table|view|synonym|alias} FROM emp e index[,index] ) WHERE e.dno = 1 AND e.salary > 50000; W 특정 테이블에 대해 인덱스를 사용하여 질의하도록 함 . SYNTAX SELECT --+ AVOID_INDEX(e salary_indx) --+ AVOID_INDEX name, salary ( {table|view|synonym|alias} FROM emp e index[,index] ) WHERE e.dno = 1 AND e.salary > 50000; S 특정 테이블에 대해 인덱스를 사용하지 않도록 질의하도록 함 .INFORMIX User 76
  77. 77. Select 의 예 (8-2) – access method SYNTAX SELECT {+ FULL(e) } name, salary --+ FULL FROM emp e ( {table|view|synonym|alias} ) WHERE e.dno = 1 AND e.salary > 50000; W 특정 테이블에 대해 full scan 하여 질의하도록 함 . SYNTAX SELECT {+ AVOID_FULL(e), --+ AVOID_FULL INDEX(e salary_indx) } ( {table|view|synonym|alias} ) name, salary FROM emp e WHERE e.dno = 1AND e.salary > 50000; S 특정 테이블에 대해 full scan 하지 말고 질의하도록 함 .INFORMIX User 77
  78. 78. Select 의 예 (8-3) – Join Order SYNTAX SELECT --+ ORDERED --+ ORDERED name, title, dept FROM dept, job, emp WHERE title = “clerk” Join 의 대상 테이블에 대한 Join 의 순서를 AND emp.dno = dept.dno from 절 다음의 테이블 순서대로 하도록 한다 . AND emp.job = job.job;INFORMIX User 78
  79. 79. Select 의 예 (8-4) – Join Method SYNTAX SYNTAX --+ USE_NL --+ AVOID_NL ( {table|view|synonym|alias} ) ( {table|view|synonym|alias} ) Join 에 있어서 Nested Loop Join 방 Join 에 있어서 Nested Loop Join 을 사용하지 법을 않는다 . 사용한다 . SYNTAX SYNTAX --+ USE_HASH --+ AVOID_HASH ( {table|view|synonym|alias} ( {table|view|synonym|alias} [/BUILD|/PROBE] ) [/BUILD|/PROBE] ) Join 에 있어서 HASH Join 방법을 사용한다  Join 에 있어서 HASH Join 방법을 사용하지 . 않는다 .INFORMIX User 79
  80. 80. Select 의 예 (8-2) – Optimization Goal SYNTAX SELECT --+ FIRST_ROWS --+ FIRST_ROWS name, age --+ ALL_ROWS (default) FROM employee e, department d WHERE e.dept_no = d.dept_no; Query Optimizer 가 질의를 최적화 할때 SET OPTIMIZATION FIRST_ROWS; 에, SELECT …… 그 목적을 처음 몇개의 row 를 빨리 가 져올 수 OPT_GOAL. 파라매터를 사용하여 최적화 방법을 있도록 최적화 하거나 , 전체 row 를 빨 결정할 수 있다 리 OPT_GOAL = -1 : ALL_ROWS 가져올 수 있도록 최적화 할 것인가를 OPT_GOAL = 0 : FIRST_ROWS 지정할 수 있다 . . 이 방법은 질의의 대상이 전체가 아닌 일부분의 데이터 만을 가져오는 “ first n” 과 함께 사용될때 가장 좋은 성능을 낼 수 있다 ,INFORMIX User 80
  81. 81. Select 의 예 (8-2) – First N SYNTAX SELECT FIRST 10 name, salary SELECT FIRST n FROM emp ORDER BY salary DESC; O 질의의 결과중 처음 n 개의 row 를 가져옴 .INFORMIX User 81
  82. 82. SQL 실행 경로 확인  SQL 구문이 optimizing 된 결과를 볼 수 있다 .  Set explain on;  확인하고자 하는 구문들 . . .  Set explain off;  UNIX 의 경우 현재 이 구문을 실행한 application 이 실행된 디렉토리 밑에 “ sqexplain.out” 이라는 file 에 기록된다 .  NT 의 경우 $INFORMIXDIR/sqexpln 디렉토리 안에 현재 구문을 실행 한 “ user 이름 .out” 이라는 file 에 기록된다 . 예> QUERY: ------ select * from customer Estimated Cost: 1 Estimated # of Rows Returned: 28 1) anchoi.customer: SEQUENTIAL SCANINFORMIX User 82
  83. 83. INSERT,UPDATE,DELETE  문법  Insert into 테이블 ( 컬럼이름들 ) values( 값들 );  테이블에 값들을 입력  Update 테이블 set 컬럼 ( 들 ) = 값 where 조건 ;  테이블중 조건에 만족하는 row 의 컬럼을 값으로 갱신  Delete 테이블 Where 조건 ;  테이블에 조건을 만족하는 row 를 삭제INFORMIX User 83
  84. 84. Concurrency Control  DB 는 다수의 사용자에 의해 공유됨 .  Read Concurrency - SELECT  4 가지의 isolation level 로 적용 .  Dirty Read  Committed Read  Cursor Stability  Repeatable Read  Update Concurrency - INSERT, DELETE, UPDATE  Lock 의 크기로 적용  Type of Locking  Exclusive  Shared  Update  Levels of locking  Database, Table, Page, Row, KeyINFORMIX User 84
  85. 85. Concurrency Control - READ Dirty Read Committed Read server process server process Can lock be acquired? 기존의 lock 을 check 하지 않고 , 자신이 lock 을 걸수 있는지 check 하고 읽어내림 . Data 를 읽어내림 . 그러나 자신은 lock 을 걸지 않음 . 이때에 자신도 lock 을 걸지 않고 읽음 . Cursor Stability Repeatable Read server process server process Shared lock Locks put on placed on row all rows examined Cursor 가 현재 fetch 하고 있는 row 에 대해 자신의 process 가 질의에서 참조하고 있는 Lock 을 걸고 , 다음 row 를 fetch 할때에 모든 row 에 대해 lock 을 걸고 작업함 . Lock 을 해제함 .INFORMIX User 85
  86. 86. Concurrency Control - READ  Isolation level 의 적용  DB 의 형태 별 default 가 존재 한다 .  NO Logging DB : Dirty Read  Logging DB : Committed Read  ANSI DB : Repeatable Read  따라서 default 이외로 변경시에는 다음의 구문으로 적용하여야 한다 .  해당 세션에만 적용된다 .  구문 Set Isolation To Dirty Read; Set Isolation To Committed Read; Set Isolation To Cursor Stability; Set Isolation To Repeatable Read;INFORMIX User 86
  87. 87. Concurrency Control - UPDATE Database Level Locking Table Level Locking database stores exclusive; lock table customer in share mode; stores customer 다른 사용자는 데이터 select select 베이스에 접근할 수 없다 update delete insert set isolation to dirty read customer lock table customer in exclusive mode;INFORMIX User 87
  88. 88. Concurrency Control - Lock Mode  다른 사용자에 의해 lock 이 걸려 있는 자료에 접근할때에는 default 로 기다리지 않고 error 를 return. Set Lock Mode to Wait ; Set Lock Mode to Not Wait ; Set Lock Mode to Wait 20 ; set lock mode to wait 20 lock 이 해제될때까지 20 초 동안 기다림 set lock mode to not wait set lock mode to wait lock 이 해제될때까지 기다리지 lock 이 해제될때까지 않고 즉시 에러를 리턴함 무한정 기다림INFORMIX User 88
  89. 89. Concurrency Control - Page/Row  테이블 생성 시 default lock mode 는 page 단위 create table row_lock_table ( id char(20), name char(20) ) lock mode row; alter table page_lock_table lock mode (page); page modify access page modifyINFORMIX User 89
  90. 90. SPL  Stored Procedure Language  Stored procedure 를 작성하는 데 사용됨 .  Stored procedure  DB 내에 저장된 SQL 문들과 , SPL 로 작성된 구문의 묶음 .  주로 business logic 을 DB 에 저장하는 용도로 사용됨 .  SQL 문은 미리 parsing 되고 optimize 된 상태로 해당 DB 의 시스템 카타로그 테이블 (sysprocedures, sysprocbody, sysprocplan, sysprocauth) 에 저장됨 .INFORMIX User 90
  91. 91. SPL - 간단한 예제  작성 Stored procedure 의 이름 매개 변수의 이름 매개 변수의 type create procedure test_proc(name varchar(10)) insert into test_tab values(name); end procedure;  실행 매개 변수로 넘어 온 값을 test_tab 이라는 table 에 insert 하라는 구문 execute procedure test_proc(“anna”);INFORMIX User 91
  92. 92. SPL - 코드 내용 보기  DBSCHEMA utility dbschema -d <dbname> -f <procedure 이름 > sql.sql dbschema -d <dbname> -f all spl.sql  System Catalog Table select data from sysprocedures d, sysprocbody b where datakey = “T” and d.procname = “procedure 이름” and d.procid = b.procidINFORMIX User 92
  93. 93. SPL 생성 및 실행 - 기본구조  기본구조 Stored procedure 의 이름 매개변수 문장 블럭 (statement block) create procedure raise_prices (per_cent int) update stock -- increase by percentage set unit_price = unit_price + (unit_price * (per_cent / 100 ) ); end procedure 주석 (comment) document “usage : execute procedure raise_prices (xxx) “, “xxx = percentage from 1 – 100 “ document 절은 생략 가능 with listing in “warn_file”; 컴파일 warning 저장 execute procedure raise_prices (5); execute procedure db@servername:raise_prices(5)INFORMIX User 93
  94. 94. SPL 생성 및 실행 - 매개변수와 리 턴값 create procedure delete_order (p_order_num int default null ) returning int, int; default 값 define item_count int; select count(*) into item_count from items 매개변수 where order_num=p_order_num; delete from items where order_num = p_order_num; delete from orders where order_num = p_order_num;두 개의 정수 반환 예정 returning p_order_num, item_count; end procedure; 두 개의 정수 변수 반환  DBACCESS execute procedure delete_order (1001) ;  ESQL/C EXEC SQL execute procedure delete_order(:p_order_num) into :p_order_num, :p_item_count;INFORMIX User 94
  95. 95. SPL 생성 및 실행 - 커서사용  SPL ESQL/C EXEC SQL declare geti cursor for create procedure get_items() execute procedure get_items(); returning integer, char(3), integer; EXEC SQL open geti while(1) { define p_stock_no integer; EXEC SQL fetch geti define p_manu_code char(3); into :p_num, :p_code, :p_qty; define p_quantity integer; if (sqlca.sqlcode == 100) break; foreach } select stock_num, manu_code, quantity SQL close geti; EXEC into p_stock_no, p_manu_code, p_quantity from items return p_stock_no, p_manu_code, p_quantity with resume; end foreach; end procedure; 커서 사용 foreach 문안에서 계속 리턴값을 반환하도록 한다INFORMIX User 95
  96. 96. SPL 생성 및 실행 - 호출 / 제거  SQL 문에서 호출 select * from orders where order_num = get_biggest_order(114); insert into old_orders execute procedure get_orders(114);  SPL 에서 호출 create procedure give_disconnect (p_customer_num integer) define p_order_num integer; call get_biggest_order (p_customer_num ) returning p_order_num; : end procedure  SPL 제거 drop procedure get_biggest_order;INFORMIX User 96
  97. 97. SPL 구문 - 변수  SPL 내부에서 변수 선언  define p_order_date date; 유효한 데이터베이스 자료형  define p_customer_num like orders.customer_num;  define global global_bar integer default 1;  define blob_var references text; 명시한 테이블 컬럼의 자료형 세션 안에서 전역값을 가진다 BLOB 자료형  변수값 할당  let c = 10; let d = 5;  let p_order_date = today;  let a,b = 10,c+d;  let a,b = (select col_a, col_b from tab1 where col_c=10);  let a = proc_name();  let a = c || d;INFORMIX User 97
  98. 98. SPL 구문 - 조건식  구문 IF 조건식 THEN 문장 1 ELIF 조건식 THEN 문장 2 ELSE 문장 3 END IF  조건식의 예 if exists (select order_num from orders where order_num = 1023) then : end if if p_total_price > all (select total_price from items where order_num = 1023) then : end if if p_customer_name matches “A*” then : end ifINFORMIX User 98
  99. 99. SPL 구문 - 루프  FOREACH foreach select ship_charge into p_ship_charge from orders : end foreach;  WHILE ※ 루프 제어 for i = 1 to 10 while i < nbr_rows if i = 5 then insert into test_tab values ( i ); continue for; elif i = 8 then let i = i + 1; exit for; end while end if  FOR end for; for i = 1 to 10 step 2 : end for for i in (1,5,10,15) … end for for i in (1 to 20 step 5, 20 to 1 step –5, 1,2,3,4,5) … end forINFORMIX User 99
  100. 100. SPL 구문 – dbinfo 사용  serial 값 반환 define ser int; insert into orders (order_num, order_date, customer_num) values (0, “04/01/99”, 102); let ser = dbinfo(“sqlca.sqlerrd1”);  처리된 행의 수 반환 define num_rows int; delete from orders where customer_num = 104; let num_rows = dbinfo(“sqlca.sqlerrd2”);INFORMIX User 100
  101. 101. SPL 구문 - 기타  업데이트 커서 define p_ship_date date; 업데이트 커서의 이름을 명시해야 한다 begin work; foreach cur1 for select ship_date into p_ship_date from orders where order_date < today - 100 if p_ship_date is not null then 현재 커서가 오픈하고 있는 행 delete from orders where current of cur1; end if end foreach; commit work; 업데이트 된 행의 lock 해제  OS 명령어 호출 system “echo ““Delete Operation Completed”” | mail judy” ; system “mail –s violation ” || usr1 || “ ” || usr2 || “< vio.file”;INFORMIX User 101
  102. 102. Trigger  트리거 (Trigger) 는 어떠한 이벤트가 발생했을때 자동적으로 SQL 문을 실행하도록 하는 데이터베이스 메커니즘  트리거 이벤트 (event) 는 특정 테이블에 대해 INSERT, UPDATE, DELETE 와 같은 SQL 문  트리거 액션 (action) 은 INSERT, UPDATE, DELETE 및 EXECUTE PROCEDURE 문 Create Trigger Trigger name Trigger Trigger Trigger event action correlation nameINFORMIX User 102
  103. 103. Trigger - Event / Action  트리거 이벤트 (event)  INSERT ON 테이블이름  DELETE ON 테이블이름 event  UPDATE ON 테이블이름 update orders  UPDATE OF 컬럼이름 ON 테이블이름 set ship_instruct = “express”  트리거 액션 (action) where customer_num =  BEFORE ( SQL 문 ) 106;  FOR EACH ROW ( SQL 문 )  AFTER ( SQL 문 ) 106  예제 106 create trigger test1 update on orders action before (execute procedure check_permission()) execute check_permission for each row (execute procedure log_chg()) update 1 row after (execute procedure log_total()); execute log_chg update 1 row execute log_chg execute log_totalINFORMIX User 103
  104. 104. Trigger - referencing  트리거 동작 전 , 후의 값을 구분하기 위하여 correlation name 을 부여  NEW, OLD 는 키워드로 DELETE 이벤트에서는 NEW 가 사용 될 수 없 고 , INSERT 이벤트에서는 OLD 가 사용 될 수 없다 .  예제 create trigger items_upd update of total_price on items referencing new as post old as pre for each row (update orders set order_price = order_price + post.total_price = pre.total_price where order_num = post.order_num );INFORMIX User 104
  105. 105. Trigger - when  트리거 이벤트가 발생되었을때 WHEN 절에 조건이 만족하는지 먼저 검 사한 후 조건이 맞을 때에 트리거 액션이 동작한다 .  예제 create trigger ins_cust_calls insert on cust_calls referencing new as post for each row when (post.call_code = “B”) ( insert into warn_billing values (post.customer_num) );INFORMIX User 105
  106. 106. DB admin 작업  DB admin 작업이란  DB 의 생성  Table 의 생성  Table 의 분할  보안의 설정  데이터 무결성 보장  인덱스의 생성  질의 수행을 최적화 해주기 위한 작업  Data Migration
  107. 107. DB admin 작업이란  DB admin 작업이란 ?  DB 와 관련된 사항을 결정하고 , 변경하는 작업  DB 나 table 을 생성하는 작업  보안을 적용하는 작업  데이터의 무결성을 보장하는 작업  동시 사용자에 관한 제어  인덱스와 관련된 작업  질의 수행을 최적화해 주는 작업  Data migrationINFORMIX User 107
  108. 108. DB 의 생성  DB 의 생성시 다음의 사항을 고려해야 한다 .  DB 를 물리적으로 어느 위치에 둘 것인가  DB 가 위치할 dbspace 를 지정함 .  DB 는 어떤 형태로 만들것인가  DB 에 대한 logging 작업을 할 것인가를 결정 create database <DB 이름 > in <DB 를 저장할 dbspace 이름 > default: rootdbs with <DB 의 logging 모드 >;  default : no logging  예> create database test_db in dbspace1 with log; create database test_db with log; create database test_db in dbspace1 ; create database test_db in dbspace1 with buffered log;INFORMIX User 108
  109. 109. Table 의 생성  Table 생성시 다음의 사항을 고려해야 한다 .  컬럼에는 어떤 자료형을 사용할 것인가  테이블에 대해 분할 할 것인가  테이블의 위치  얼마만큼의 디스크 공간을 할당할 것인가  테이블에 대한 lock 모드 create table < 테이블이름 >( 컬럼이름 컬럼자료형 ) in <dbspace 이름 > or < 분할 방법및 위치 > extent size < 초기에 할당할 영역 크기 K 단위 : default 는 8page> next size < 증가분에 할당할 영역 크기 K 단위 : default 는 8page> lock mode <row or page : default 는 page>;INFORMIX User 109
  110. 110. Table 의 분할  한 테이블의 데이터를 여러 dbspace 에 분할한다  병렬적으로 데이터를 입출력 할 수 있다  입출력의 부하를 균등하게 조절할 수 있다  데이터의 가용성을 향상 시킨다  다양한 기준으로 데이터를 분할할 수 있다 입출력 부하 분산 fragment1 scan thread table 병렬 스 fragment2 scan thread 캔 fragment3 scan threadINFORMIX User 110
  111. 111. Table 의 분할 - round robin create table roundtable ( col_1 serial, col_2 char(20), : ) fragment by round robin in dbspace1, dbspace2, dbspace3 extent size 10000 next size 3000 ;insert into roundtable(col_1, col_2) values (0, ‘aabb’);insert into roundtable(col_1, col_2) values (0, ‘aabb’);insert into roundtable(col_1, col_2) values (0, ‘aabb’);insert into roundtable(col_1, col_2) values (0, ‘aabb’);insert into roundtable(col_1, col_2) values (0, ‘aabb’);insert into roundtable(col_1, col_2) values (0, ‘aabb’); dbspace1 dbspace2 dbspace3INFORMIX User 111
  112. 112. Table 의 분할 - Expression create table exprtable ( col_1 serial, col_2 char(20), : ) fragment by expression col_1 <= 100 and col_1 >= 1 in dbspace1, col_1 <= 200 and col_1 > 100 in dbspace2, remainder in dbspace3 ; insert into exprtable(col_1) values (50); insert into exprtable(col_1) values (700); insert into exprtable(col_1) values (120); dbspace1 dbspace2 dbspace3INFORMIX User 112
  113. 113. Table 의 분할 - hash create table exprtable ( col_1 serial, col_2 char(20), : ) fragment by expression mod (col_1, 3) = 0 in dbspace1, mod (col_1, 3) = 1 in dbspace2, mod (col_1, 3) = 2 in dbspace3 ; insert into exprtable(col_1) values (17); insert into exprtable(col_1) values (34); insert into exprtable(col_1) values (66); dbspace1 dbspace2 dbspace3INFORMIX User 113
  114. 114. Table 의 분할 - guidelines  가급적 remainder 절을 쓰지 않도록 expression 을 만든다  여러 디스크에 I/O 를 분산할 수 있도록 고려한다  expression 은 가능한한 단순한 형태여야 한다  expression 에서 가장 제한적인 조건이 먼저 나올 수 있도록 한다  데이터의 변환이 필요한 expression 은 피한다  데이터 로드 및 전체 조회가 주된 목적이라면 round robin 을 사용한다  인덱스 또한 fragment 구문에 의해 분할 될 수 있지만 , 가급적 별도의 dbspace 에 fragment 되지 않은 형태 (detached index) 로 생성한다 create index idx_roundtable on roundtable(col_1) in dbspace4;  테이블 분할에 의한 이득이 그다지 많지 않다면 분할하지 않는다INFORMIX User 114
  115. 115. 보안의 설정  보안의 적용 방법  권한 제한  View 의 사용  Role 의 사용  권한의 종류  DB level : DBA,RESOURCE,CONNECT  Table,Column level : SELECT,INSERT,UPDATE,DELETE,ALTER…INFORMIX User 115
  116. 116. 보안의 설정 - 권한 제한  권한 설정 방법  GRANT 권한이름 <on 테이블이름 ( 컬럼이름 )> to user 이름 ;  REVOKE 권한이름 <on 테이블이름 > from user 이름 ;  Table 의 경우 일단 모든 권한을 뺏고 하나하나 설정한다 .  예 GRANT DBA to user1; GRANT CONNECT to user2; REVOKE ALL ON tab1 from PUBLIC; GRANT SELECT ON tab1 to user2; GRANT DELETE,UPDATE,INSERT on tab1 to user1; GRANT SELECT(col1,col2) on tab2 to user2;INFORMIX User 116
  117. 117. 보안의 설정 - view 의 사용  View 는 테이블의 일부 혹은 계산된 값등에 설정될 수 있다 .  예 create view cust_seoul as select * from customer where city=‘ 서울’ ; create view big_order_won as select total_price*1200 from orders where total_price > 10000; create view detail_info_cust as select company, order_num,total_price from customer,orders where customer.customer_num=orders.customer_num;INFORMIX User 117
  118. 118. 보안의 설정 - role 의 사용  Role 이란 , 사용자의 그룹 권한의 제한이 , 개인별로가 아닌 그룹별로 해야할 필요가 있을때에 쓰임 .  개인은 개인의 권한으로의 작업도 가능하고 , role 의 일원으로서의 작업 도 가능하다  예 Create role marketing; Create role sales; Grant marketing to user1,user2; Grant sales to user3,user4;  만일 user1 이 marketing role 로서 작업하려면 다음 구문을 실행해야 함. Set role marketing;INFORMIX User 118
  119. 119. 데이터 무결성의 보장 (1)  데이터값에 대한 속성을 제한자 (constraint) 를 통해 적용 .  종류  Primary Key  Foreign key  CHECK  UNIQUE  NOT NULLINFORMIX User 119
  120. 120. 데이터 무결성의 보장 (2)  Constraint 의 이름은 자동적으로 부여 될 수 있지만 , 직접 명시할 수도 있다 CREATE TABLE orders ( order_num integer UNIQUE CONSTRAINT order_num_uq, order_date date NOT NULL CONSTRAINT order_num_nn DEFAULT TODAY); ALTER TABLE orders MODIFY order_num integer NOT NULL CONSTRAINT order_num_nn;  Constraint 는 컬럼 단위 또는 테이블 단위로 정의할 수 있는데 , 다른 컬럼에 대한 정의가 포함될 경우는 테이블 단위로 정의해야만 한다 -- 테이블 단위 ALTER TABLE items ADD CONSTRAINT CHECK (quantity >= 1); -- 컬럼 단위 ALTER TABLE items MODIFY quantity smallint CHECK (quantity >= 1); -- 컬럼 단위는 다른 컬럼을 사용할 수 없다 . ALTER TABLE orders MODIFY paid_date date CHECK (paid_date > ship_date); # #676: Invalid check constraint column.INFORMIX User 120
  121. 121. 데이터 무결성의 보장 (3)  Referential Constraint 의 종류  Cyclic referential constraints parent child  Self referential constraints parent  Multiple path constraints parent child child  Primary / Foreign Key 규칙  Primary key 는 자동적으로 unique index 역할을 하게 된다  Foreign key 컬럼값은 Primary key 에 값이 있어야 입력 , 수정 할 수 있다  Foreign Key 값이 있는 상태에서 Primary Key 값을 삭제 , 수정 할 수 없다INFORMIX User 121
  122. 122. 데이터 무결성의 보장 (4)  Cyclic referential constraints create table customer ( customer orders customer_num serial, customer_num order_num fname char(20), fname customer_num primary key (customer_num) constraint pk_cnum ); create table orders ( order_num serial, customer_num integer, foreign key (customer_num) references customer constraint fk_cnum);  Self referential constrains emp create table emp ( enum enum serial, mnum mnum integer, primary key (enum) constraint pk_enum, foreign key (mnum) references emp(enum) constraint fk_enum) ;INFORMIX User 122
  123. 123. 데이터 무결성의 보장 (5)  Multiple path referential constraints create table stock ( stock stock_num smallint, stock_num manu_code char(3), manu_code primary key (stock_num, manu_code) constraint pk_stock); create table items ( items catalog item_num smallint, item_num catalog_num stock_num smallint, stock_num stock_num manu_code char(3), manu_code manu_code foreign key (stock_num, manu_code) references stock constraints fk1_stock); create table catalog ( catalog_num serial, stock_num smallint, manu_code char(3), foreign key (stock_num, manu_code) references stock constraints fk2_stock);INFORMIX User 123
  124. 124. 인덱스의 생성  테이블에 대해 빠른 접근을 위해 사용  OLTP 업무의 경우 인덱스의 생성은 매우 중요함 .  다음에 해당되는 컬럼에 생성하는 것이 좋음 .  조인의 대상이 되는 컬럼  조건 비교의 대상이 되는 컬럼  정렬의 기준이 되는 컬럼 Create index < 인덱스이름 > on 테이블이름 ( 컬럼이름 ) In < 인덱스를 저장할 위치 >;  예 create unique index idx_cust on customer(customer_num) in dbspace1; create index idx_stock on stock (stock_num, manu_code) ;INFORMIX User 124
  125. 125. 질의 수행을 최적화 해주기 위한 작 업  서버로 전달된 모든 질의는 다음의 과정을 거침 Parsing Optimizing Executing 유효성 , 문법 등을 체크 최적화된 질의 수행의 실행 경로를 결정  질의 수행 경로를 결정하는데 참조하는 데이터는 system catalog 의 정 보를 기반으로 함 .  질의 수행 경로를 결정하는 데 영향을 미치는 요인  인덱스 유무 , 데이터의 양 , 데이터 분포도 등 ..  따라서 , 현재상황의 데이터에 관한 정확한 정보를 제공하여야 , 최적의 질의를 수행할 수 있음 .INFORMIX User 125
  126. 126. 질의 수행을 최적화 해주기 위한 작 업  Update statistics  System catalog 의 데이터 관련 통계자료를 갱신  데이터에 대한 분포도를 만들어줌 .  Mode 의 종류  Low  system catalog 의 통계정보만 갱신  Medium  통계정보 갱신과 함께 , 데이터 분포도를 만듬 . 이때 , 표본 추출에 의해 분포도를 만듬 .  High  medium 과 같으나 , 표본추출이 아닌 전체 데이터를 가지고 분포도를 만듬 .INFORMIX User 126
  127. 127. 질의 수행을 최적화 해주기 위한 작 업  언제 수행하여야 하나 ?  대량의 데이터 변경시에는 반드시 해주어야 한다 .  Bulk Data loading 후 , bulk update 등 ..  시스템 유휴 시간대에 정기적으로 해주어도 좋다 .  구문  Update statistics [low|medium|high] ;  Update statistics [low|medium|high] for table;  Update statistics [low|medium|high] for table 테이블이름 ;  Update statistics [low|medium|high] for table 테이블이름 ( 컬럼이름 );INFORMIX User 127
  128. 128. Data Migration  DB 혹은 table 을 file 로 내릴 필요가 있을때 사용 .  Data Backup 의 하나의 방법으로도 사용 가능  서로 다른 기종의 machine 에 있는 서버로 데이터를 옮기고자 할때 유 용.  Data 를 기존의 table 에 append 할때에 유용 .  사용 용도나 , 제공되는 기능에 따라 다양한 tool, 구문을 제공 .INFORMIX User 128
  129. 129. Data Migration - Unloading  종류  UNLOAD 구문  SQL 구문이므로 사용하기 쉽고 , 원하는 조건에 따라 내려 받을 수 있다 .  UNLOAD to ‘ 파일이름’ select * from customer;  ONUNLOAD  DB 담위 , table 단위 가능  Binary 형태로 받음 .  onunload –t /dev/rmt0 DB 이름  DBEXPORT  DB 단위의 작업 지원 : DB 단위작업에 가장 많이 사용  Ascii 형태로 받음 .  dbexport DB 이름  ONPLOAD  HPL(High Performance Loader) 을 구성하는 process  많은 양의 데이터에 대해 가장 좋은 성능을 냄 .INFORMIX User 129
  130. 130. Data Migration - Loading  종류  LOAD 구문  SQL 구문이므로 사용하기 쉽고 , 원하는 조건에 따라 내려 받을 수 있다 .  LOAD from ‘ 파일이름’ insert into customer;  ONLOAD  DB 담위 , table 단위 가능  Binary 형태로 받음 .  onload –t /dev/rmt0 DB 이름  DBIMPORT  DB 단위의 작업 지원 : DB 단위작업에 가장 많이 사용  Ascii 형태로 받음 .  dbimport DB 이름  ONPLOAD  HPL(High Performance Loader) 을 구성하는 process  많은 양의 데이터에 대해 가장 좋은 성능을 냄 .INFORMIX User 130
  131. 131. ESQL/C 를 이용한 프로그래밍  ESQL/C 란  ESQL/C 의 사용  ESQL/C 프로그램 작성 규칙  ESQL/C 프로그램 compile  ESQL/C 프로그램 작성 예제  호스트변수 (Host Variables)  데이터베이스 연결  SQLCA 구조체  EXCEPTION 테스트  GET DIAGNOSTICS 사용  prepare 를 사용한 단순 DML 처리  Indicator 사용  커서 (Cursors)
  132. 132. ESQL/C 란 

×