고급웹프로그래밍 () Lectures 21 & 22: 2005 년중등 1급정교사연수 문양세컴퓨터과학과강원대학교자연과학대학 데이터베이스? (1/4) 데이터베이스 (database), DBMS 처리 / 관리하고자하는정보혹은데이터를모아놓은저장소 저장된정보에의미를부여하고, 다양한연산 ( 검색, 갱신등 ) 을제공하는소프트웨어시스템 사용자에의해지시되는일련의연산 (transaction) 을효과적이고정확하게처리하는소프트웨어시스템 상용 DBMS (Commercial DBMS) Disk-based DBMS: Oracle, Informix, Sybase, UniSQL, MySQL, Main Memory DBMS: Ten-Times, Altibase, UniSQL, Page 2 1
데이터베이스? (2/4) 용어이해 속성 (attribute), 필드 (field) 이름을가진논리적데이터의최소단위 ( 예 : 나이필드, 이름속성 ) 특정객체 (object, entity) 의한성질의값 테이블 (table) 의 attribute 로이해할수있음 레코드 (record), 튜플 (tuple) 논리적으로서로연관된하나이상의데이터필드 ( 항목 ) 들의집합 엔티티타입 ( 예 : 학생 = { 이름필드, 학번필드, 성별필드, }) Page 3 데이터베이스? (3/4) 용어이해 ( 계속 ) 테이블 (table) 레코드 ( 정확히는레코드인스턴스 ) 의집합 (set of records) 관계형 DBMS 에서는대부분의연관성있는데이터를테이블로관리함 테이블의예 : 학생테이블, 성적테이블, 급여관리테이블등 인덱스 (index), 색인 검색하고자하는레코드를빠르게찾아내기위하여별도의 ( 메모리, 디스크 ) 구조를관리 일반적으로, Unique 한하나의속성에대해서인덱스를구성함 트리혹은해싱등의인덱스기술 (technique) 을사용함 인덱스의예 : 학생테이블에대해 학번 속성으로색인을구성 Page 4 2
데이터베이스? (4/4) 테이블구성의예 Attribute (Column) 학번 이름 나이 본적 성 Schema 1243 홍길동 10 강원 남 Index 1257 1332 1334 김철수박영희이기수 20 19 21 경기충청전라 남여남 Tuple (Record) 1367 정미영 20 서울 여 1440 최미숙 21 강원 여 Page 5 데이터접근 (Data Access) (1/6) SQL Structured Query Language (, SEQUEL) 데이터베이스에서정보를얻거나갱신하기위한표준화된언어 DML (Data Manipulation Language) SELECT: 검색조건에맞는데이터 ( 레코드 ) 를선택 ( 조회 ) INSERT: 새로운데이터 ( 레코드 ) 를삽입 UPDATE: 기존의데이터 ( 레코드, 속성 ) 를수정 DELETE: 기존의데이터 ( 레코드 ) 를삭제 How about DDL(Data Definition Language)? 데이터형태및데이터베이스자체를정의하는언어 예 : 테이블생성및삭제 (create/drop table), 인덱스생성, DB 생성 Page 6 3
데이터접근 (Data Access) (2/6) 테이블예제 : fruit 테이블 name price color country 사과 10 빨간색 한국 배 20 노란색 한국 복숭아 30 분홍색 한국 수박 40 초록색 한국 감 50 주황색 한국 토마토 60 빨간색 미국 바나나 70 노란색 인도네시아 키위 80 초록색 호주 파인애플 90 초록색 인도네시아 대추 100 초록색 한국 Page 7 데이터접근 (Data Access) (3/6) SELECT 특정테이블에서원하는데이터 ( 레코드, 속성 ) 를검색할때사용 SELECT name, price FROM fruit WHERE color = 빨간색 ; 상기예는 fruit 테이블을사용하여색깔 (color) 이빨간색인과일의이름 (name) 과가격 (price) 를가져오는문장임 SQL에서특정데이터가문자열로되어있으면작은따옴표 ( ) 로묶어주어야하며숫자는작은따옴표로묶지않고그냥사용 상기 SQL 문장의실행결과는다음과같음 name 사과 토마토 price 10 60 Page 8 4
데이터접근 (Data Access) (4/6) INSERT 특정테이블에새로운데이터 ( 레코드 ) 를삽입할때사용 INSERT INTO fruit VALUES ( 멜론, 110, 초록색, 한국 ); 상기예는 fruit 테이블에서 이름은멜론이고가격은 110 원, 색깔은초록색이며원산지는한국 인새로운레코드를삽입 상기 SQL 문장의실행결과는다음과같은레코드가 fruit 테이블에추가됨 name price color country 멜론 110 초록색 한국 Page 9 데이터접근 (Data Access) (5/6) UPDATE 특정테이블에서기존데이터 ( 레코드 ) 의내용을수정할때사용 UPDATE fruit SET price=120, country= 미국 WHERE name= 멜론 ; 상기예는 fruit 테이블에서 이름 (name) 이멜론인레코드의가격 (price) 을 120 원으로, 원산지 (country) 를미국으로수정 하는경우임 상기 SQL 문장의실행결과, 기존레코드는다음과같이내용이변경됨 name price color country 멜론 120 초록색 미국 Page 10 5
데이터접근 (Data Access) (6/6) DELETE 특정테이블에서기존데이터 ( 레코드 ) 를지울때사용 DELETE FROM fruit WHERE name= 멜론 ; 상기예는 fruit 테이블에서 이름 (name) 이멜론인레코드를삭제 하는경우임 상기 SQL 문장의실행결과, 이름이멜론인레코드가 fruit 테이블에서삭제됨 Page 11 MySQL 사용법 (1/6) MySQL 사용순서 mysql_connect() 데이터베이스접속 mysql_select_db() 사용자데이터베이스선택 mysql_query() SQL 명령실행 mysql_fetch_row() 실행결과를한튜플 ( 행 ) 씩가져옴 mysql_close() 데이터베이스접속해제 Page 12 6
MySQL 사용법 (2/6) mysql_connect resource mysql_connect ( [string hostname [:port] [:/path/to/socket] [, string username [, string password]]]) MySQL이설치된 hostname에접근하여 username과 password를통해mysql에로그인을수행함 성공하면 MySQL link identifier를리턴함 ( 다음단계에서활용함 ) mysql_close() 를호출하지않아도스크립트의실행이끝나면자동으로 close됨 Page 13 MySQL 사용법 (3/6) mysql_select_db bool mysql_select_db ( string database_name [, resource link_identifier]) link_identifier 서버에서 database_name의데이터베이스를연결함 연결에성공하면 TRUE, 실패하면 FALSE를리턴함 만일 link_identifier가없으면자동으로이전에열렸던 link_identifier를이용하여데이터베이스를연결함 Page 14 7
MySQL 사용법 (4/6) mysql_query resource mysql_query ( string query [, resource link_identifier]) 지정된 link_identifier를사용하여현재활성화된데이터베이스에서주어진질의문 (query) 를실행함 성공하면 TRUE, 실패하면 FALSE를리턴함 query에들어가는문자열의마지막에는세미콜론 (;) 을사용하지않음 Page 15 MySQL 사용법 (5/6) mysql_fetch_row array mysql_fetch_row (resource result) 질의문 ( 주로 Select 문 ) 의수행결과에따라, 각각의레코드 (tuple, row) 를차례로읽어들이는함수임 result로부터결과값을배열로리턴 이함수를계속호출하게되면 result로부터다음 row( 레코드 ) 를차례로읽어옴 더이상읽어올row가없으면FALSE를리턴 Page 16 8
MySQL 사용법 (6/6) mysql_close bool mysql_close ([resource link_identifier]) link_identifier로연결된mysql을닫음 ( Resource를반환함 ) 성공하면 TRUE, 실패하면 FALSE를리턴함 만일 link_identifier가연결되어있지않으면마지막으로연결된 link_identifier를닫음 Page 17 phpmyadmin 실행및로그인 (1/2) phpmyadmin DB 및 SQL명령을자세히알지않고서도 MySQL에대한사용을용이하게해주는유틸리티 APM을정상적으로설치한경우, 자동적으로함께설치됨 실행하기 Page 18 9
phpmyadmin 실행및로그인 (2/2) 로그인하기 root/apmsetup Page 19 phpmyadmin 새로운 DB 만들기 (1/4) 새로운 DB 의이름을입력하고만들기를클릭 Page 20 10
phpmyadmin 새로운 DB 만들기 (2/4) 새로운 DB 의생성결과 대응되는 SQL Statement Page 21 phpmyadmin 새로운 DB 만들기 (3/4) 생성된 DB 확인하기 Page 22 11
phpmyadmin 새로운 DB 만들기 (4/4) 생성된 DB 확인하기 ( 결과화면 ) Page 23 phpmyadmin 새로운 Table 만들기 (1/5) Table 을만들고자하는 DB 를선택 ( 예의경우 goods) Page 24 12
phpmyadmin 새로운 Table 만들기 (2/5) 만들고자하는 Table 의이름과속성 ( 필드 ) 개수를입력 Page 25 phpmyadmin 새로운 Table 만들기 (3/5) Table 을구성하는속성의정보 ( 타입, 크기, 색인정보등 ) 를입력 Page 26 13
phpmyadmin 새로운 Table 만들기 (4/5) Table 생성에대한수행결과 대응되는 SQL Statement Page 27 phpmyadmin 새로운 Table 만들기 (5/5) 생성된 Table 에대한정보조회결과 Page 28 14
phpmyadmin 레코드삽입하기 (1/4) 원하는 Table 을메뉴에서삽입을클릭 Page 29 phpmyadmin 레코드삽입하기 (2/4) 해당레코드의 ( 속성 ) 값을입력하고실행 Page 30 15
phpmyadmin 레코드삽입하기 (3/4) 레코드생성의수행에따른결과화면 대응되는 SQL Statement Page 31 phpmyadmin 레코드삽입하기 (4/4) 레코드생성반복 Page 32 16
phpmyadmin 레코드검색하기 (1/6) 원하는 Table 을메뉴에서검색을클릭 Page 33 phpmyadmin 레코드검색하기 (2/6) 검색조건을입력 ( 아래예는테이블전체검색 ) Page 34 17
phpmyadmin 레코드검색하기 (3/6) 테이블전체검색의결과화면 대응되는 SQL Statement Page 35 phpmyadmin 레코드검색하기 (4/6) 검색조건을입력 ( 아래예는가격속성에조건입력 ) Page 36 18
phpmyadmin 레코드검색하기 (5/6) 가격속성에조건을준경우의결과화면 대응되는 SQL Statement Page 37 phpmyadmin 레코드검색하기 (6/6) SQL 문장을직접입력하는예제 Page 38 19
SQL 을포함한 PHP 프로그램예제 (1/3) 가격이 50 원이상인레코드들의출력프로그램 (fruit_mysql.php) <html> <body> <?PHP $conn = mysql_connect ( localhost, root, apmsetup ); $db_status = mysql_select_db ( goods ); if (!$db_status) { error ( DB_ERROR ); exit; } $query = select * from fruit where price >= 50 ; $result = mysql_query ($query); Page 39 SQL 을포함한 PHP 프로그램예제 (2/3) 가격이 50 원이상인레코드들의출력프로그램 ( 계속 ) print <table border=1><tr>. <th> 이름 </th>. <th> 가격 </th>. <th> 색깔 </th>. <th> 원산지 </th></tr> ; while ($row = mysql_fetch_row ($result)) { print <tr><td>. $row[0]. </td>. <td>. $row[1]. </td>. <td>. $row[2]. </td>. <td>. $row[3]. </td></tr> ; } print </table> ;?> </body> </html> Page 40 20
SQL 을포함한 PHP 프로그램예제 (3/3) 가격이 50 원이상인레코드들의출력프로그램실행화면 Page 41 MySQL 을이용한웹프로그래밍 (1/7) 테이블 (fruit) 에새로운레코드를삽입하는웹화면의구성 fruit1.php <html> <body> <form name=fruit method=post action=./fruit2.php > 새로운데이터를입력해주세요 <br> 이름 : <input type=text name=name><br> 가격 : <input type=text name=price><br> 색깔 : <input type=text name=color><br> 원산지 : <input type=text name=country><br> <input type=submit value= 입력 > <input type=reset value= 취소 > </form> </body> </html> Page 42 21
MySQL 을이용한웹프로그래밍 (2/7) fruit1.php 의실행결과 Page 43 MySQL 을이용한웹프로그래밍 (3/7) 삽입프로그램 : fruit2.php <html> <body> <?PHP $conn = mysql_connect ( localhost, root, apmsetup ); $db_status = mysql_select_db ( goods ); if (!$db_status) { error ( DB_ERROR ); exit; } $query = INSERT INTO fruit VALUES. ( $name, $price, $color, $country ) ; $result = mysql_query ($query); if ($result) print 입력되었습니다.<br> ; else print 입력되지않았습니다.<br> ;?> </body> </html> Page 44 22
MySQL 을이용한웹프로그래밍 (4/7) 삽입프로그램 (fruit2.php) 의실행결과 Page 45 MySQL 을이용한웹프로그래밍 (5/7) 검색을통한삽입결과확인 (fruit_mysql.php) Page 46 23
MySQL 을이용한웹프로그래밍 (6/7) fruit_mysql.php 의개선 (Sorting)...... $query = select * from fruit where price >= 50 order by price ; $result = mysql_query ($query);...... Page 47 MySQL 을이용한웹프로그래밍 (7/7) fruit_mysql.php 의개선 (Sorting) 결과화면 Page 48 24
Homework #4 교재연습문제 (Ch. 8): 1 ( 테이블을구성한후 ) 해당하는 SQL 문장을작성하여실행해보고, 이에대한레포트를작성하여메일로제출할것 Due Date: Page 49 Thank you so much... I sincerely wish you get whatever you want Page 50 25