웹프로그래밍 () 2005 년봄학기 문양세컴퓨터과학과강원대학교자연과학대학
데이터베이스? (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
데이터베이스? (2/4) 용어이해 속성 (attribute), 필드 (field) 이름을가진논리적데이터의최소단위 ( 예 : 나이필드, 이름속성 ) 특정객체 (object, entity) 의한성질의값 테이블 (table) 의 attribute 로이해할수있음 레코드 (record), 튜플 (tuple) 논리적으로서로연관된하나이상의데이터필드 ( 항목 ) 들의집합 엔티티타입 ( 예 : 학생 = { 이름필드, 학번필드, 성별필드, }) Page 3
데이터베이스? (3/4) 용어이해 ( 계속 ) 테이블 (table) 레코드 ( 정확히는레코드인스턴스 ) 의집합 (set of records) 관계형 DBMS 에서는대부분의연관성있는데이터를테이블로관리함 테이블의예 : 학생테이블, 성적테이블, 급여관리테이블등 인덱스 (index), 색인 검색하고자하는레코드를빠르게찾아내기위하여별도의 ( 메모리, 디스크 ) 구조를관리일반적으로, Unique한하나의속성에대해서인덱스를구성함트리혹은해싱등의인덱스기술 (technique) 을사용함인덱스의예 : 학생테이블에대해 학번 속성으로색인을구성 Page 4
데이터베이스? (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
데이터접근 (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
데이터접근 (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
데이터접근 (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
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
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
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
phpmyadmin 실행및로그인 (2/2) 로그인하기 root/apmsetup Page 19
phpmyadmin 새로운 DB 만들기 (1/4) 새로운 DB 의이름을입력하고만들기를클릭 Page 20
phpmyadmin 새로운 DB 만들기 (2/4) 새로운 DB 의생성결과 대응되는 SQL Statement Page 21
phpmyadmin 새로운 DB 만들기 (3/4) 생성된 DB 확인하기 Page 22
phpmyadmin 새로운 DB 만들기 (4/4) 생성된 DB 확인하기 ( 결과화면 ) Page 23
phpmyadmin 새로운 Table 만들기 (1/5) Table 을만들고자하는 DB 를선택 ( 예의경우 goods) Page 24
phpmyadmin 새로운 Table 만들기 (2/5) 만들고자하는 Table 의이름과속성 ( 필드 ) 개수를입력 Page 25
phpmyadmin 새로운 Table 만들기 (3/5) Table 을구성하는속성의정보 ( 타입, 크기, 색인정보등 ) 를입력 Page 26
phpmyadmin 새로운 Table 만들기 (4/5) Table 생성에대한수행결과 대응되는 SQL Statement Page 27
phpmyadmin 새로운 Table 만들기 (5/5) 생성된 Table 에대한정보조회결과 Page 28
phpmyadmin 레코드삽입하기 (1/4) 원하는 Table 을메뉴에서삽입을클릭 Page 29
phpmyadmin 레코드삽입하기 (2/4) 해당레코드의 ( 속성 ) 값을입력하고실행 Page 30
phpmyadmin 레코드삽입하기 (3/4) 레코드생성의수행에따른결과화면 대응되는 SQL Statement Page 31
phpmyadmin 레코드삽입하기 (4/4) 레코드생성반복 Page 32
phpmyadmin 레코드검색하기 (1/6) 원하는 Table 을메뉴에서검색을클릭 Page 33
phpmyadmin 레코드검색하기 (2/6) 검색조건을입력 ( 아래예는테이블전체검색 ) Page 34
phpmyadmin 레코드검색하기 (3/6) 테이블전체검색의결과화면 대응되는 SQL Statement Page 35
phpmyadmin 레코드검색하기 (4/6) 검색조건을입력 ( 아래예는가격속성에조건입력 ) Page 36
phpmyadmin 레코드검색하기 (5/6) 가격속성에조건을준경우의결과화면 대응되는 SQL Statement Page 37
phpmyadmin 레코드검색하기 (6/6) SQL 문장을직접입력하는예제 Page 38
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
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
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
MySQL 을이용한웹프로그래밍 (4/7) 삽입프로그램 (fruit2.php) 의실행결과 Page 45
MySQL 을이용한웹프로그래밍 (5/7) 검색을통한삽입결과확인 (fruit_mysql.php) Page 46
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
Homework #10 교재연습문제 (Ch. 8): 1 해당하는 SQL 문장을작성하여보고서형식으로제출할것 Due Date: 6/8( 수 ) Page 49