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