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