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