웹 프로그래밍 및 실습 (web programming & practice) mysql 연동 문양세...

49
웹 웹웹웹웹웹 웹 웹웹 (Web Programming & Practice) MySQL 웹웹 웹웹웹 웹웹웹웹웹 IT 웹웹 웹웹웹웹웹웹웹

Upload: kelsie-bridges

Post on 04-Jan-2016

153 views

Category:

Documents


0 download

DESCRIPTION

웹 프로그래밍 및 실습 (Web Programming & Practice) MySQL 연동 문양세 강원대학교 IT 대학 컴퓨터과학전공. 데이터베이스 ? (1/4). MySQL 연동. 데이터베이스 (database), DBMS 처리 / 관리하고자 하는 정보 혹은 데이터를 모아놓은 저장소 저장된 정보에 의미를 부여하고 , 다양한 연산 ( 검색 , 갱신 등 ) 을 제공하는 소프트웨어 시스템 사용자에 의해 지시되는 일련의 연산 (transaction) 을 효과적이고 정확하게 처리하는 소프트웨어 시스템 - PowerPoint PPT Presentation

TRANSCRIPT

웹 프로그래밍 및 실습(Web Programming & Practice)

MySQL 연동

문양세강원대학교 IT 대학 컴퓨터과학전공

Web Program-mingby Yang-Sae Moon

Page 2

데이터베이스 (database), DBMS

• 처리 / 관리하고자 하는 정보 혹은 데이터를 모아놓은 저장소

• 저장된 정보에 의미를 부여하고 , 다양한 연산 ( 검색 , 갱신 등 ) 을 제공하는 소프트웨어 시스템

• 사용자에 의해 지시되는 일련의 연산 (transaction) 을 효과적이고 정확하게 처리하는 소프트웨어 시스템

상용 DBMS (Commercial DBMS)

• Disk-based DBMS: Oracle, Informix, Sybase, UniSQL, MySQL, …

• Main Memory DBMS: Ten-Times, Altibase, UniSQL, …

데이터베이스 ? (1/4)MySQL 연동

Web Program-mingby Yang-Sae Moon

Page 3

용어 이해

• 속성 (attribute), 필드 (field)

− 이름을 가진 논리적 데이터의 최소 단위 ( 예 : 나이 필드 , 이름 속성 )

− 특정 객체 (object, entity) 의 한 성질의 값

− 테이블 (table) 의 attribute 로 이해할 수 있음

• 레코드 (record), 튜플 (tuple)

− 논리적으로 서로 연관된 하나 이상의 데이터 필드 ( 항목 ) 들의 집합

− 엔티티 타입 ( 예 : 학생 = { 이름 필드 , 학번 필드 , 성별 필드 , …})

데이터베이스 ? (2/4)MySQL 연동

Web Program-mingby Yang-Sae Moon

Page 4

용어 이해 ( 계속 )

• 테이블 (table)

− 레코드 ( 정확히는 레코드 인스턴스 ) 의 집합 (set of records)

− 관계형 DBMS 에서는 대부분의 연관성 있는 데이터를 테이블로 관리함

− 테이블의 예 : 학생 테이블 , 성적 테이블 , 급여 관리 테이블 등

• 인덱스 (index), 색인

− 검색하고자 하는 레코드를 빠르게 찾아내기 위하여 별도의 ( 메모리 , 디스크 ) 구조를 관리

− 일반적으로 , Unique 한 하나의 속성에 대해서 인덱스를 구성함

− 트리 혹은 해싱 등의 인덱스 기술 (technique) 을 사용함

− 인덱스의 예 : 학생 테이블에 대해 “학번” 속성으로 색인을 구성

데이터베이스 ? (3/4)MySQL 연동

Web Program-mingby Yang-Sae Moon

Page 5

테이블 구성의 예

데이터베이스 ? (4/4)MySQL 연동

학번

1243

1257

1332

1334

1367

1440

이름

홍길동

김철수

박영희

이기수

정미영

최미숙

나이

10

20

19

21

20

21

본적

강원

경기

충청

전라

서울

강원

Schema

At-tribute(Col-umn)

Tuple(Record)Index

Web Program-mingby Yang-Sae Moon

Page 6

SQL• Structured Query Language (, SEQUEL)

• 데이터베이스에서 정보를 얻거나 갱신하기 위한 표준화된 언어

DML (Data Manipulation Language)• SELECT: 검색 조건에 맞는 데이터 ( 레코드 ) 를 선택 ( 조회 )

• INSERT: 새로운 데이터 ( 레코드 ) 를 삽입

• UPDATE: 기존의 데이터 ( 레코드 , 속성 ) 를 수정

• DELETE: 기존의 데이터 ( 레코드 ) 를 삭제

DDL(Data Definition Language)?• 데이터 형태 및 데이터베이스 자체를 정의하는 언어

• 예 : 테이블 생성 및 삭제 (create/drop table), 인덱스 생성 , DB 생성

데이터 접근 (Data Access) (1/6)MySQL 연동

Web Program-mingby Yang-Sae Moon

Page 7

MySQL 연동

name price color country

사과 10 빨간색 한국

배 20 노란색 한국

복숭아 30 분홍색 한국

수박 40 초록색 한국

감 50 주황색 한국

토마토 60 빨간색 미국

바나나 70 노란색 인도네시아

키위 80 초록색 호주

파인애플 90 초록색 인도네시아

대추 100 초록색 한국

테이블 예제 : fruit 테이블

데이터 접근 (Data Access) (2/6)

Web Program-mingby Yang-Sae Moon

Page 8

MySQL 연동데이터 접근 (Data Access) (3/6)

SELECT• 특정 테이블에서 원하는 데이터 ( 레코드 , 속성 ) 를 검색할 때 사용

• 상기 예는 fruit 테이블을 사용하여 색깔 (color) 이 빨간색인 과일의 이름 (name) 과 가격 (price) 를 가져오는 문장임

• SQL 에서 특정 데이터가 문자열로 되어 있으면 작은 따옴표 (‘’) 로 묶어주어야 하며 숫자는 작은 따옴표로 묶지 않고 그냥 사용

• 상기 SQL 문장의 실행 결과는 다음과 같음

SELECT name, price FROM fruit WHERE color = ‘ 빨간색’ ;

name price

사과 10

토마토 60

Web Program-mingby Yang-Sae Moon

Page 9

MySQL 연동데이터 접근 (Data Access) (4/6)

INSERT• 특정 테이블에 새로운 데이터 ( 레코드 ) 를 삽입할 때 사용

• 상기 예는 fruit 테이블에서 “이름은 멜론이고 가격은 110 원 , 색깔은 초록색이며 원산지는 한국”인 새로운 레코드를 삽입

• 상기 SQL 문장의 실행 결과는 다음과 같은 레코드가 fruit 테이블에 추가됨

INSERT INTO fruit VALUES (‘ 멜론’ , 110, ‘ 초록색’ , ‘ 한국’ );

name price color country

멜론 110 초록색 한국

Web Program-mingby Yang-Sae Moon

Page 10

MySQL 연동데이터 접근 (Data Access) (5/6)

UPDATE• 특정 테이블에서 기존 데이터 ( 레코드 ) 의 내용을 수정할 때 사용

• 상기 예는 fruit 테이블에서 “이름 (name) 이 멜론인 레코드의 가격 (price) 을 120원으로 , 원산지 (country) 를 미국으로 수정”하는 경우임

• 상기 SQL 문장의 실행 결과 , 기존 레코드는 다음과 같이 내용이 변경됨

UPDATE fruit SET price=120, country=‘ 미국’ WHERE name=‘ 멜론’ ;

name price color country

멜론 120 초록색 미국

Web Program-mingby Yang-Sae Moon

Page 11

MySQL 연동데이터 접근 (Data Access) (6/6)

DELETE• 특정 테이블에서 기존 데이터 ( 레코드 ) 를 지울 때 사용

• 상기 예는 fruit 테이블에서 “이름 (name) 이 멜론인 레코드를 삭제”하는 경우임

• 상기 SQL 문장의 실행 결과 , 이름이 멜론인 레코드가 fruit 테이블에서 삭제됨

DELETE FROM fruit WHERE name=‘ 멜론’ ;

Web Program-mingby Yang-Sae Moon

Page 12

MySQL 사용 순서

MySQL 사용법 (1/6)MySQL 연동

mysql_connect() 데이터베이스 접속

mysql_select_db() 사용자 데이터베이스 선택

mysql_query() SQL 명령 실행

mysql_fetch_row() 실행 결과를 한 튜플 ( 행 ) 씩 가져옴

mysql_close() 데이터베이스 접속 해제

Web Program-mingby Yang-Sae Moon

Page 13

MySQL 연동

mysql_connect

• MySQL 이 설치된 hostname 에 접근하여 username 과 password 를 통해 MySQL에 로그인을 수행함

• 성공하면 MySQL link identifier 를 리턴함 ( 다음 단계에서 활용함 )

• mysql_close() 를 호출하지 않아도 스크립트의 실행이 끝나면 자동으로 close 됨

MySQL 사용법 (2/6)

resource mysql_connect (

[string hostname [:port] [:/path/to/socket]

[, string username [, string password]]])

Web Program-mingby Yang-Sae Moon

Page 14

MySQL 연동

mysql_select_db

• link_identifier 서버에서 database_name 의 데이터베이스를 연결함

• 연결에 성공하면 TRUE, 실패하면 FALSE 를 리턴함

• 만일 link_identifier 가 없으면 자동으로 이전에 열렸던 link_identifier 를 이용하여 데이터베이스를 연결함

MySQL 사용법 (3/6)

bool mysql_select_db (

string database_name [, resource link_identifier])

Web Program-mingby Yang-Sae Moon

Page 15

MySQL 연동

mysql_query

• 지정된 link_identifier 를 사용하여 현재 활성화된 데이터베이스에서 주어진 질의문(query) 를 실행함

• 성공하면 TRUE, 실패하면 FALSE 를 리턴함

• query 에 들어가는 문자열의 마지막에는 세미콜론 (;) 을 사용하지 않음

MySQL 사용법 (4/6)

resource mysql_query (

string query [, resource link_identifier])

Web Program-mingby Yang-Sae Moon

Page 16

MySQL 연동

mysql_fetch_row

• 질의문 ( 주로 Select 문 ) 의 수행 결과에 따라 , 각각의 레코드 (tuple, row) 를 차례로 읽어 들이는 함수임

• result 로부터 결과 값을 배열로 리턴

• 이 함수를 계속 호출하게 되면 result 로부터 다음 row( 레코드 ) 를 차례로 읽어 옴

• 더 이상 읽어 올 row 가 없으면 FALSE 를 리턴

MySQL 사용법 (5/6)

array mysql_fetch_row (resource result)

Web Program-mingby Yang-Sae Moon

Page 17

MySQL 연동

mysql_close

• link_identifier 로 연결된 MySQL 을 닫음 ( Resource 를 반환함 )

• 성공하면 TRUE, 실패하면 FALSE 를 리턴함

• 만일 link_identifier 가 연결되어 있지 않으면 마지막으로 연결된 link_identifier 를 닫음

MySQL 사용법 (6/6)

bool mysql_close ([resource link_identifier])

Web Program-mingby Yang-Sae Moon

Page 18

MySQL 연동

phpMyAdmin• DB 및 SQL 명령을 자세히 알지 않고서도 MySQL 에 대한 사용을 용이하게 해주는

유틸리티

• APM 을 정상적으로 설치한 경우 , 자동적으로 함께 설치됨

실행하기

phpMyAdmin – 실행 및 로그인 (1/2)

Web Program-mingby Yang-Sae Moon

Page 19

MySQL 연동

로그인하기

phpMyAdmin – 실행 및 로그인 (2/2)

root/apmsetup

Web Program-mingby Yang-Sae Moon

Page 20

MySQL 연동

새로운 DB 의 이름을 입력하고 만들기를 클릭

phpMyAdmin – 새로운 DB 만들기 (1/4)

Web Program-mingby Yang-Sae Moon

Page 21

MySQL 연동

새로운 DB 의 생성 결과

phpMyAdmin – 새로운 DB 만들기 (2/4)

대응되는 SQL Statement

Web Program-mingby Yang-Sae Moon

Page 22

MySQL 연동

생성된 DB 확인하기

phpMyAdmin – 새로운 DB 만들기 (3/4)

Web Program-mingby Yang-Sae Moon

Page 23

MySQL 연동

생성된 DB 확인하기 ( 결과 화면 )

phpMyAdmin – 새로운 DB 만들기 (4/4)

Web Program-mingby Yang-Sae Moon

Page 24

MySQL 연동

Table 을 만들고자 하는 DB 를 선택 ( 예의 경우 goods)

phpMyAdmin – 새로운 Table 만들기 (1/5)

Web Program-mingby Yang-Sae Moon

Page 25

MySQL 연동

만들고자 하는 Table 의 이름과 속성 ( 필드 ) 개수를 입력

phpMyAdmin – 새로운 Table 만들기 (2/5)

Web Program-mingby Yang-Sae Moon

Page 26

MySQL 연동

Table 을 구성하는 속성의 정보 ( 타입 , 크기 , 색인 정보 등 ) 를 입력

phpMyAdmin – 새로운 Table 만들기 (3/5)

Web Program-mingby Yang-Sae Moon

Page 27

MySQL 연동

Table 생성에 대한 수행 결과

phpMyAdmin – 새로운 Table 만들기 (4/5)

대응되는 SQL Statement

Web Program-mingby Yang-Sae Moon

Page 28

MySQL 연동

생성된 Table 에 대한 정보 조회 결과

phpMyAdmin – 새로운 Table 만들기 (5/5)

Web Program-mingby Yang-Sae Moon

Page 29

MySQL 연동

원하는 Table 을 메뉴에서 삽입을 클릭

phpMyAdmin – 레코드 삽입하기 (1/4)

Web Program-mingby Yang-Sae Moon

Page 30

MySQL 연동

해당 레코드의 ( 속성 ) 값을 입력하고 실행

phpMyAdmin – 레코드 삽입하기 (2/4)

Web Program-mingby Yang-Sae Moon

Page 31

MySQL 연동

레코드 생성의 수행에 따른 결과 화면

phpMyAdmin – 레코드 삽입하기 (3/4)

대응되는 SQL State-

ment

Web Program-mingby Yang-Sae Moon

Page 32

MySQL 연동

레코드 생성 반복

phpMyAdmin – 레코드 삽입하기 (4/4)

Web Program-mingby Yang-Sae Moon

Page 33

MySQL 연동

원하는 Table 을 메뉴에서 검색을 클릭

phpMyAdmin – 레코드 검색하기 (1/6)

Web Program-mingby Yang-Sae Moon

Page 34

MySQL 연동

검색 조건을 입력 ( 아래 예는 테이블 전체 검색 )

phpMyAdmin – 레코드 검색하기 (2/6)

Web Program-mingby Yang-Sae Moon

Page 35

MySQL 연동

테이블 전체 검색의 결과 화면

phpMyAdmin – 레코드 검색하기 (3/6)

대응되는 SQL State-

ment

Web Program-mingby Yang-Sae Moon

Page 36

MySQL 연동

검색 조건을 입력 ( 아래 예는 가격 속성에 조건 입력 )

phpMyAdmin – 레코드 검색하기 (4/6)

Web Program-mingby Yang-Sae Moon

Page 37

MySQL 연동

가격 속성에 조건을 준 경우의 결과 화면

phpMyAdmin – 레코드 검색하기 (5/6)

대응되는 SQL State-

ment

Web Program-mingby Yang-Sae Moon

Page 38

MySQL 연동

SQL 문장을 직접 입력하는 예제

phpMyAdmin – 레코드 검색하기 (6/6)

Web Program-mingby Yang-Sae Moon

Page 39

MySQL 연동

가격이 50 원 이상인 레코드들의 출력 프로그램 (fruit_mysql.php)

SQL 을 포함한 PHP 프로그램 예제 (1/3)

<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”;

mysql_query("SET NAMES 'euckr'"); // 주의 : 한글

$result = mysql_query ($query);

Web Program-mingby Yang-Sae Moon

Page 40

MySQL 연동

가격이 50 원 이상인 레코드들의 출력 프로그램 ( 계속 )

SQL 을 포함한 PHP 프로그램 예제 (2/3)

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>

Web Program-mingby Yang-Sae Moon

Page 41

MySQL 연동

가격이 50 원 이상인 레코드들의 출력 프로그램 실행 화면

SQL 을 포함한 PHP 프로그램 예제 (3/3)

Web Program-mingby Yang-Sae Moon

Page 42

MySQL 연동

테이블 (fruit) 에 새로운 레코드를 삽입하는 웹 화면의 구성

fruit1.php

MySQL 을 이용한 웹 프로그래밍 (1/7)

<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>

Web Program-mingby Yang-Sae Moon

Page 43

MySQL 연동

fruit1.php 의 실행 결과

MySQL 을 이용한 웹 프로그래밍 (2/7)

Web Program-mingby Yang-Sae Moon

Page 44

MySQL 연동

삽입 프로그램 : fruit2.php

MySQL 을 이용한 웹 프로그래밍 (3/7)

<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’)”; mysql_query("SET NAMES 'euckr'"); // 한글 문제 $result = mysql_query ($query); if ($result) print “ 입력되었습니다 .<br>”; else print “ 입력되지 않았습니다 .<br>”;?></body></html>

Web Program-mingby Yang-Sae Moon

Page 45

MySQL 연동

삽입 프로그램 (fruit2.php) 의 실행 결과

MySQL 을 이용한 웹 프로그래밍 (4/7)

Web Program-mingby Yang-Sae Moon

Page 46

MySQL 연동

검색을 통한 삽입 결과 확인 (fruit_mysql.php)

MySQL 을 이용한 웹 프로그래밍 (5/7)

Web Program-mingby Yang-Sae Moon

Page 47

MySQL 연동

fruit_mysql.php 의 개선 (Sorting)

MySQL 을 이용한 웹 프로그래밍 (6/7)

..

..

..

$query = “select * from fruit where price >= 50 order by price”;

$result = mysql_query ($query);

..

..

..

Web Program-mingby Yang-Sae Moon

Page 48

MySQL 연동

fruit_mysql.php 의 개선 (Sorting) 결과 화면

MySQL 을 이용한 웹 프로그래밍 (7/7)

Web Program-mingby Yang-Sae Moon

Page 49

MySQL 연동Homework #10 ( 실습 #8)