490 likes | 822 Views
웹 프로그래밍 및 실습 (Web Programming & Practice) MySQL 연동 문양세 강원대학교 IT 대학 컴퓨터과학전공. 데이터베이스 ? (1/4). MySQL 연동. 데이터베이스 (database), DBMS 처리 / 관리하고자 하는 정보 혹은 데이터를 모아놓은 저장소 저장된 정보에 의미를 부여하고 , 다양한 연산 ( 검색 , 갱신 등 ) 을 제공하는 소프트웨어 시스템 사용자에 의해 지시되는 일련의 연산 (transaction) 을 효과적이고 정확하게 처리하는 소프트웨어 시스템
E N D
웹 프로그래밍 및 실습 (Web Programming & Practice) MySQL연동 문양세 강원대학교 IT대학 컴퓨터과학전공
데이터베이스? (1/4) MySQL 연동 • 데이터베이스(database), DBMS • 처리/관리하고자 하는 정보 혹은 데이터를 모아놓은 저장소 • 저장된 정보에 의미를 부여하고, 다양한 연산(검색, 갱신 등)을 제공하는 소프트웨어 시스템 • 사용자에 의해 지시되는 일련의 연산(transaction)을 효과적이고 정확하게 처리하는 소프트웨어 시스템 • 상용 DBMS (Commercial DBMS) • Disk-based DBMS: Oracle, Informix, Sybase, UniSQL, MySQL, … • Main Memory DBMS: Ten-Times, Altibase, UniSQL, …
데이터베이스? (2/4) MySQL 연동 • 용어 이해 • 속성(attribute), 필드(field) • 이름을 가진 논리적 데이터의 최소 단위 (예: 나이 필드, 이름 속성) • 특정 객체(object, entity)의 한 성질의 값 • 테이블(table)의 attribute로 이해할 수 있음 • 레코드(record), 튜플(tuple) • 논리적으로 서로 연관된 하나 이상의 데이터 필드(항목)들의 집합 • 엔티티 타입 (예: 학생 = {이름 필드, 학번 필드, 성별 필드, …})
데이터베이스? (3/4) MySQL 연동 • 용어 이해 (계속) • 테이블(table) • 레코드(정확히는 레코드 인스턴스)의 집합 (set of records) • 관계형 DBMS에서는 대부분의 연관성 있는 데이터를 테이블로 관리함 • 테이블의 예: 학생 테이블, 성적 테이블, 급여 관리 테이블 등 • 인덱스(index), 색인 • 검색하고자 하는 레코드를 빠르게 찾아내기 위하여 별도의 (메모리, 디스크) 구조를 관리 • 일반적으로, Unique한 하나의 속성에 대해서 인덱스를 구성함 • 트리 혹은 해싱 등의 인덱스 기술(technique)을 사용함 • 인덱스의 예: 학생 테이블에 대해 “학번” 속성으로 색인을 구성
학번 이름 나이 본적 성 1243 홍길동 10 강원 남 1257 김철수 20 경기 남 1332 박영희 19 충청 여 1334 이기수 21 전라 남 1367 정미영 20 서울 여 1440 최미숙 21 강원 여 데이터베이스? (4/4) MySQL 연동 테이블 구성의 예 Attribute (Column) Schema Tuple (Record) Index
데이터 접근 (Data Access) (1/6) MySQL 연동 • SQL • Structured Query Language (, SEQUEL) • 데이터베이스에서 정보를 얻거나 갱신하기 위한 표준화된 언어 • DML (Data Manipulation Language) • SELECT: 검색 조건에 맞는 데이터(레코드)를 선택(조회) • INSERT: 새로운 데이터(레코드)를 삽입 • UPDATE: 기존의 데이터(레코드, 속성)를 수정 • DELETE: 기존의 데이터(레코드)를 삭제 • DDL(Data Definition Language)? • 데이터 형태 및 데이터베이스 자체를 정의하는 언어 • 예: 테이블 생성 및 삭제(create/drop table), 인덱스 생성, DB 생성
데이터 접근 (Data Access) (2/6) MySQL 연동 테이블 예제: fruit 테이블
데이터 접근 (Data Access) (3/6) MySQL 연동 • SELECT • 특정 테이블에서 원하는 데이터(레코드, 속성)를 검색할 때 사용 • 상기 예는 fruit 테이블을 사용하여 색깔(color)이 빨간색인 과일의 이름(name)과 가격(price)를 가져오는 문장임 • SQL에서 특정 데이터가 문자열로 되어 있으면 작은 따옴표(‘’)로 묶어주어야 하며 숫자는 작은 따옴표로 묶지 않고 그냥 사용 • 상기 SQL 문장의 실행 결과는 다음과 같음 SELECT name, price FROM fruit WHERE color = ‘빨간색’;
데이터 접근 (Data Access) (4/6) MySQL 연동 • INSERT • 특정 테이블에 새로운 데이터(레코드)를 삽입할 때 사용 • 상기 예는 fruit 테이블에서 “이름은 멜론이고 가격은 110원, 색깔은 초록색이며 원산지는 한국”인 새로운 레코드를 삽입 • 상기 SQL 문장의 실행 결과는 다음과 같은 레코드가 fruit 테이블에 추가됨 INSERT INTO fruit VALUES (‘멜론’, 110, ‘초록색’, ‘한국’);
데이터 접근 (Data Access) (5/6) MySQL 연동 • UPDATE • 특정 테이블에서 기존 데이터(레코드)의 내용을 수정할 때 사용 • 상기 예는 fruit 테이블에서 “이름(name)이 멜론인 레코드의 가격(price)을 120원으로, 원산지(country)를 미국으로 수정”하는 경우임 • 상기 SQL 문장의 실행 결과, 기존 레코드는 다음과 같이 내용이 변경됨 UPDATE fruit SET price=120, country=‘미국’ WHERE name=‘멜론’;
데이터 접근 (Data Access) (6/6) MySQL 연동 • DELETE • 특정 테이블에서 기존 데이터(레코드)를 지울 때 사용 • 상기 예는 fruit 테이블에서 “이름(name)이 멜론인 레코드를 삭제”하는 경우임 • 상기 SQL 문장의 실행 결과, 이름이 멜론인 레코드가 fruit 테이블에서 삭제됨 DELETE FROM fruit WHERE name=‘멜론’;
mysql_select_db() 사용자 데이터베이스 선택 mysql_query() SQL 명령 실행 실행 결과를 한 튜플(행)씩 가져옴 mysql_fetch_row() 데이터베이스 접속 해제 mysql_close() MySQL 사용법 (1/6) MySQL 연동 MySQL 사용 순서 데이터베이스 접속 mysql_connect()
MySQL 사용법 (2/6) MySQL 연동 • mysql_connect • MySQL이 설치된 hostname에 접근하여 username과 password를 통해 MySQL에 로그인을 수행함 • 성공하면 MySQL link identifier를 리턴함 (다음 단계에서 활용함) • mysql_close() 를 호출하지 않아도 스크립트의 실행이 끝나면 자동으로 close됨 resourcemysql_connect ( [stringhostname [:port] [:/path/to/socket] [, stringusername [, stringpassword]]])
MySQL 사용법 (3/6) MySQL 연동 • mysql_select_db • link_identifier 서버에서 database_name의 데이터베이스를 연결함 • 연결에 성공하면 TRUE, 실패하면 FALSE를 리턴함 • 만일 link_identifier가 없으면 자동으로 이전에 열렸던 link_identifier를 이용하여 데이터베이스를 연결함 boolmysql_select_db ( stringdatabase_name [, resourcelink_identifier])
MySQL 사용법 (4/6) MySQL 연동 • mysql_query • 지정된 link_identifier를 사용하여 현재 활성화된 데이터베이스에서 주어진 질의문(query)를 실행함 • 성공하면 TRUE, 실패하면 FALSE를 리턴함 • query에 들어가는 문자열의 마지막에는 세미콜론(;)을 사용하지 않음 resourcemysql_query ( stringquery [, resourcelink_identifier])
MySQL 사용법 (5/6) MySQL 연동 • mysql_fetch_row • 질의문(주로 Select 문)의 수행 결과에 따라, 각각의 레코드(tuple, row)를 차례로 읽어 들이는 함수임 • result로부터 결과 값을 배열로 리턴 • 이 함수를 계속 호출하게 되면 result로부터 다음 row(레코드)를 차례로 읽어 옴 • 더 이상 읽어 올 row가 없으면 FALSE를 리턴 arraymysql_fetch_row (resourceresult)
MySQL 사용법 (6/6) MySQL 연동 • mysql_close • link_identifier로 연결된 MySQL을 닫음 ( Resource를 반환함) • 성공하면 TRUE, 실패하면 FALSE를 리턴함 • 만일 link_identifier가 연결되어 있지 않으면 마지막으로 연결된 link_identifier를 닫음 boolmysql_close ([resourcelink_identifier]) DB와 SQL에 대한 자세한 내용은 추후 DB 및 DBP 과목에서 수강하세요!
phpMyAdmin – 실행 및 로그인 (1/2) MySQL 연동 • phpMyAdmin • DB 및 SQL명령을 자세히 알지 않고서도 MySQL에 대한 사용을 용이하게 해주는 유틸리티 • APM을 정상적으로 설치한 경우, 자동적으로 함께 설치됨 • 실행하기
phpMyAdmin – 실행 및 로그인 (2/2) MySQL 연동 로그인하기 root/apmsetup
phpMyAdmin – 새로운 DB 만들기 (1/4) MySQL 연동 새로운 DB의 이름을 입력하고 만들기를 클릭
phpMyAdmin – 새로운 DB 만들기 (2/4) MySQL 연동 새로운 DB의 생성 결과 대응되는 SQL Statement
phpMyAdmin – 새로운 DB 만들기 (3/4) MySQL 연동 생성된 DB 확인하기
phpMyAdmin – 새로운 DB 만들기 (4/4) MySQL 연동 생성된 DB 확인하기 (결과 화면)
phpMyAdmin – 새로운 Table 만들기 (1/5) MySQL 연동 Table을 만들고자 하는 DB를 선택 (예의 경우 goods)
phpMyAdmin – 새로운 Table 만들기 (2/5) MySQL 연동 만들고자 하는 Table의 이름과 속성(필드) 개수를 입력
phpMyAdmin – 새로운 Table 만들기 (3/5) MySQL 연동 Table을 구성하는 속성의 정보(타입, 크기, 색인 정보 등)를 입력
phpMyAdmin – 새로운 Table 만들기 (4/5) MySQL 연동 Table 생성에 대한 수행 결과 대응되는 SQL Statement
phpMyAdmin – 새로운 Table 만들기 (5/5) MySQL 연동 생성된 Table에 대한 정보 조회 결과
phpMyAdmin – 레코드 삽입하기 (1/4) MySQL 연동 원하는 Table을 메뉴에서 삽입을 클릭
phpMyAdmin – 레코드 삽입하기 (2/4) MySQL 연동 해당 레코드의 (속성) 값을 입력하고 실행
phpMyAdmin – 레코드 삽입하기 (3/4) MySQL 연동 레코드 생성의 수행에 따른 결과 화면 대응되는 SQL Statement
phpMyAdmin – 레코드 삽입하기 (4/4) MySQL 연동 레코드 생성 반복
phpMyAdmin – 레코드 검색하기 (1/6) MySQL 연동 원하는 Table을 메뉴에서 검색을 클릭
phpMyAdmin – 레코드 검색하기 (2/6) MySQL 연동 검색 조건을 입력 (아래 예는 테이블 전체 검색)
phpMyAdmin – 레코드 검색하기 (3/6) MySQL 연동 테이블 전체 검색의 결과 화면 대응되는 SQL Statement
phpMyAdmin – 레코드 검색하기 (4/6) MySQL 연동 검색 조건을 입력 (아래 예는 가격 속성에 조건 입력)
phpMyAdmin – 레코드 검색하기 (5/6) MySQL 연동 가격 속성에 조건을 준 경우의 결과 화면 대응되는 SQL Statement
phpMyAdmin – 레코드 검색하기 (6/6) MySQL 연동 SQL 문장을 직접 입력하는 예제
SQL을 포함한 PHP 프로그램 예제 (1/3) MySQL 연동 가격이 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”; mysql_query("SET NAMES 'euckr'"); // 주의: 한글 $result = mysql_query ($query);
SQL을 포함한 PHP 프로그램 예제 (2/3) MySQL 연동 가격이 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>
SQL을 포함한 PHP 프로그램 예제 (3/3) MySQL 연동 가격이 50원 이상인 레코드들의 출력 프로그램 실행 화면
MySQL을 이용한 웹 프로그래밍 (1/7) MySQL 연동 테이블(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>
MySQL을 이용한 웹 프로그래밍 (2/7) MySQL 연동 fruit1.php의 실행 결과
MySQL을 이용한 웹 프로그래밍 (3/7) MySQL 연동 삽입 프로그램: 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’)”; mysql_query("SET NAMES 'euckr'"); // 한글 문제 $result = mysql_query ($query); if ($result) print “입력되었습니다.<br>”; else print “입력되지 않았습니다.<br>”; ?> </body> </html>
MySQL을 이용한 웹 프로그래밍 (4/7) MySQL 연동 삽입 프로그램(fruit2.php)의 실행 결과
MySQL을 이용한 웹 프로그래밍 (5/7) MySQL 연동 검색을 통한 삽입 결과 확인 (fruit_mysql.php)
MySQL을 이용한 웹 프로그래밍 (6/7) MySQL 연동 fruit_mysql.php의 개선 (Sorting) .. .. .. $query = “select * from fruit where price >= 50 order by price”; $result = mysql_query ($query); .. .. ..
MySQL을 이용한 웹 프로그래밍 (7/7) MySQL 연동 fruit_mysql.php의 개선 (Sorting) 결과 화면
Homework #10 (실습 #8) MySQL 연동