p บทที่ 7 การใช้ฐานข้อมูล ... -...

30
บทที7 การใช้ฐานข้อมูลเบื้องต้น การใช้เว็บโปรแกรมเพื่อนำเสนอสารสนเทศในเว็บไซต์ต่างๆ จำนวนมากมีการนำเสนอ ข้อมูลที่หลากหลาย มีการเปลี่ยนแปลงข้อมูลอยู่เสมอ และมีระบบที่ผู้ชมสามารถโต้ตอบเลือก รายการเลือกกลุ่มข้อมูลที่ต้องการ เช่น เลือกดูข่าวหัวข้อที่สนใจ เลือกดูเฉพาะข่าวบันเทิง ผูสนใจสั่งซื้อภาพยนตร์ในระบบอีคอมเมิร์ซสามารถเลือกภาพยนตร์จากหลายกลุ่ม เช่น จากดารา ประเภทของภาพยนตร์ ภาพยนตร์ที่ได้รับรางวัลออสการ์ ฯลฯ หรือผู้ต้องการสั่งซื้อหนังสือจาก www.amazon.com สามารถระบุประเภทของหนังสือหรือชื่อผู้แต่งเพื่อเลือกดูรายการหนังสือ ฯลฯ เว็บไซต์ที่เสนอข่าวประจำวันมีการเปลี่ยนแปลงข่าวสารสม่ำเสมออยู่ทุกวัน หรือบางแห่งอาจ จะมีข่าวสารใหม่ๆ เป็นรายชั่วโมงหรือเมื่อเกิดเหตุการณ์เร่งด่วน ลักษณะของการจัดการข้อมูลของเว็บไซต์ในลักษณะที่ต้องมีการเปลี่ยนแปลงหรือมีการ เลือกกลุ่มเลือกรายการได้ตามตัวอย่างข้างต้น จะต้องมีการจัดสร้างเว็บไซต์ในลักษณะที่เรียกว่า Dynamic web ซึ่งจะทำการแยกข้อมูลต่างๆ ที่จะใช้แสดงออกจากรหัสของการสร้างเว็บเพจ คือ แยกออกจาก html และจะต้องเขียนภาษาโปรแกรมในลักษณะ server side include เพื่อนำ ข้อมูลที่แยกเก็บในส่วนที่ต้องการมาแปลงเป็นรหัสภาษา html ก่อนจะส่งกลับไปหาเครื่องของผูใช้งาน การแยกเก็บข้อมูลออกจาก HTML ทำให้การจัดการข้อมูลเช่นการเปลี่ยนแปลง เพิ่ม ลบ ทำได้ง่ายโดยไม่ต้องไปแก้ไขในไฟล์ HTML ที่ออกแบบรูปร่างหน้าตามาอย่างเหมาะสมแล้ว ระบบให้บริการที่มีการเปลี่ยนแปลงข้อมูลหรือต้องใช้ข้อมูลแบบ dynamic มักจะมีการสร้างโปร แกรมเว็บเพื่อใช้สำหรับการบริหารข้อมูลสำหรับผู้ดูแลข้อมูลของระบบเว็บซึ่งเรียกว่าเป็นส่วน back office โปรแกรมในส่วนนี้มักจะแยกต่างหากโดยที่ผู้ชมทั่วไปไม่ทราบ URL. และไม่ สามารถเข้าไปใช้โปรแกรมได้ เช่น มีการป้องกันด้วยการใช้ password ดังนั้นผู้ที่จะสามารถ เปลี่ยนแปลงข้อมูลได้จะเป็นพนักงานของกิจการที่มีหน้าที่เท่านั้น เนื้อหาในบทนี้จะกล่าวถึงเทคโนโลยีฐานข้อมูลโดยสรุป การใช้คำสั่งสอบถามเพื่อเข้าถึง ข้อมูลในฐานข้อมูลด้วยภาษามาตรฐาน SQL. และการใช้คำสั่งใน PHP. เพื่อติดต่อระบบฐาน ข้อมูลเบื้องต้นโดยเน้นการใช้ระบบบริหารฐานข้อมูล MySQL

Transcript of p บทที่ 7 การใช้ฐานข้อมูล ... -...

Page 1: p บทที่ 7 การใช้ฐานข้อมูล ... - MWITjeab/sheet40201/PHP_DB1.pdf1. รวมเอาข อม ลท ส มพ นธ ก นไว ในฐานข

บทท 7การใชฐานขอมลเบองตน

การใชเวบโปรแกรมเพอนำเสนอสารสนเทศในเวบไซตตางๆ จำนวนมากมการนำเสนอขอมลทหลากหลาย มการเปลยนแปลงขอมลอยเสมอ และมระบบทผชมสามารถโตตอบเลอกรายการเลอกกลมขอมลทตองการ เชน เลอกดขาวหวขอทสนใจ เลอกดเฉพาะขาวบนเทง ผสนใจสงซอภาพยนตรในระบบอคอมเมรซสามารถเลอกภาพยนตรจากหลายกลม เชน จากดารา ประเภทของภาพยนตร ภาพยนตรทไดรบรางวลออสการ ฯลฯ หรอผตองการสงซอหนงสอจาก www.amazon.com สามารถระบประเภทของหนงสอหรอชอผแตงเพอเลอกดรายการหนงสอ ฯลฯ เวบไซตทเสนอขาวประจำวนมการเปลยนแปลงขาวสารสมำเสมออยทกวน หรอบางแหงอาจจะมขาวสารใหมๆ เปนรายชวโมงหรอเมอเกดเหตการณเรงดวน

ลกษณะของการจดการขอมลของเวบไซตในลกษณะทตองมการเปลยนแปลงหรอมการเลอกกลมเลอกรายการไดตามตวอยางขางตน จะตองมการจดสรางเวบไซตในลกษณะทเรยกวา Dynamic web ซงจะทำการแยกขอมลตางๆ ทจะใชแสดงออกจากรหสของการสรางเวบเพจ คอแยกออกจาก html และจะตองเขยนภาษาโปรแกรมในลกษณะ server side include เพอนำขอมลทแยกเกบในสวนทตองการมาแปลงเปนรหสภาษา html กอนจะสงกลบไปหาเครองของผใชงาน

การแยกเกบขอมลออกจาก HTML ทำใหการจดการขอมลเชนการเปลยนแปลง เพม ลบ ทำไดงายโดยไมตองไปแกไขในไฟล HTML ทออกแบบรปรางหนาตามาอยางเหมาะสมแลว ระบบใหบรการทมการเปลยนแปลงขอมลหรอตองใชขอมลแบบ dynamic มกจะมการสรางโปรแกรมเวบเพอใชสำหรบการบรหารขอมลสำหรบผดแลขอมลของระบบเวบซงเรยกวาเปนสวน back office โปรแกรมในสวนนมกจะแยกตางหากโดยทผชมทวไปไมทราบ URL. และไมสามารถเขาไปใชโปรแกรมได เชน มการปองกนดวยการใช password ดงนนผทจะสามารถเปลยนแปลงขอมลไดจะเปนพนกงานของกจการทมหนาทเทานน

เนอหาในบทนจะกลาวถงเทคโนโลยฐานขอมลโดยสรป การใชคำสงสอบถามเพอเขาถงขอมลในฐานขอมลดวยภาษามาตรฐาน SQL. และการใชคำสงใน PHP. เพอตดตอระบบฐานขอมลเบองตนโดยเนนการใชระบบบรหารฐานขอมล MySQL

Page 2: p บทที่ 7 การใช้ฐานข้อมูล ... - MWITjeab/sheet40201/PHP_DB1.pdf1. รวมเอาข อม ลท ส มพ นธ ก นไว ในฐานข

258

1 การแยกเกบขอมลออกจาก web pageดงทไดกลาวไวในบทท 5 มาแลววาการสราง web application สามารถแยกขอมลออกจาก

html source code โดยเกบขอมลภายนอก ซงอาจเกบบนทกขอมลใน 2 รปแบบไดแก(1) เกบเปนไฟลขอมลปกต (Data file) ซงยงแบงออกไดเปน 2 รปแบบไดแก

a. ไฟลขอความ (text file) จะจดเกบในรปรหสอกขระ อาจจะเปนมาตรฐาน ASCII หรอ Unicode

b. ไฟลขอมลทจดเปนระเบยนในรปของเลขฐานสอง (binary recorded file)

การจดเกบไฟลขอมลทงสองรปแบบนจะตองใชโปรแกรมในการเขาถงโดยผสราง web program จะตองสรางอลกอรธมหรอใชอลกอรธมในภาษาโปรแกรมเพออาน เขยนหรอประมวลผลขอมล เชน การคดเลอกขอมล การเรยงลำดบ การอานขอมลแบบสม และแมแตกระทงการลบขอมลออกจากไฟล ซงไมเหมาะกบการใชกบขอมลทมปรมาณมากหรอการใชงานหรอแสดงผลขอมลในหลากหลายรปแบบ แตอาจจะนำไปใชในกรณขอมลทไมซบซอน และมขอดคอไมตองมโปรแกรมอนๆ เพมเตม เพยงใชเวบโปรแกรมกสามารถทำงานได

(2) ใชระบบฐานขอมล (Database system) จะตองมระบบบรหารฐานขอมลซงเปนระบบแยกตางหาก เปนโปรแกรมระบบประเภทหนงซงมทงโปรแกรมสำหรบเขาถงฐานขอมลและโปรแกรมชวยอำนวยความสะดวกอนๆ ชวยทำหนาทในการจดการระบบขอมล โปรแกรมระบบบรหารฐานขอมล (Database management system) ทนำมาใชสำหรบการจดการระบบขอมลใน web application สามารถใชระบบบรหารฐานขอมลมาตรฐานทมอยมากมายหลายยหอรน และขนาดทเหมาะสมกบปรมาณขอมล เชน Oracle, Microsoft SQL.Server, DB2, Informix, Microsoft Access, MySQL ฯลฯ เปนตน

ระบบบรหารฐานขอมลทใชอยในปจจบน เปนระบบบรหารฐานขอมลแบบสมพนธ(Relational Database Management System – R.DBMS.) และอาจจะมบางระบบเปนระบบเชงวตถ (Object-Oriented Database Management System) ซงมวธการเขาถงฐานขอมลเปนมาตรฐานและขามกนไดโดยผานโปรแกรมบรหารฐานขอมลของแตละยหอ-รน โดยใชภาษาสำหรบการเขาถงฐานขอมลมาตรฐานทมชอวาภาษาเอสควแอล (Structure Query Language – SQL.)

(3) ไฟลเกบขอมลในรปแบบภาษา XML. เปนไฟลขอความทมขอมลในฟลดตางๆ ทใชโครงสรางภาษา XML (eXtensible Markup Language) ในการแสดงขอมลทแบงเปนโครงสราง อาจมการกำกบเพอตรวจสอบความถกตองของโครงสรางขอมลดวย Document Type Definition (DTD.) รายละเอยดเพมเตมเกยวกบ XML ศกษาไดจากตำราเกยวกบ XML. โดยเฉพาะ

การนำขอมลจากไฟลขอมลหรอฐานขอมลกด มาประกอบกบ html เพอสงกลบไปหาเครองของผใชทำโดยใชโปรแกรมเวบภาษา script ตางๆ เชน CGI., PHP, JSP, ASP ฯลฯ เปนตน ทกๆ ภาษาสำหรบเวบโปรแกรมจะมฟงกชน (function) หรอวธ (method) หากเปนภาษาเชงวตถ ทตดตอกบไฟลขอมลและฐานขอมลทงสน เชน PHP มฟงกชนการใชไฟลขอมลทงไฟลขอความและไฟลระเบยน ฟงกชนตดตอฐานขอมลสำหรบฐานขอมลทเปนทนยมแยกแตละยหอ (ดไดจาก www.php.net หรอดจาก php help file ใชคำสง search โดยคำวา Database function) หรอในภาษา JSP. จะม Java Database Connectivity เปน library ทประกอบดวย Object และ method สำหรบการเขาถงฐานขอมล เปนตน

1 1) ประโยชนของการใช Database

• สามารถสรางเวบทมเนอหาเปลยนแปลงอยเสมอได (Dynamic content)• งายสำหรบการจดการขอมล (Easy to manage) ทงสวนของผดแลขอมลขององคกรและผ

เขยนโปรแกรม ชวยใหผดแลขอมลสามารถเปลยนแปลงแกไขขอมล ทงการเพมเตมรายการขอมล การลบขอมลออกและการแกไขรายการขอมลทมอย โดยใชโปรแกรมทพฒนาเปนสวน Back office หรอใชเครองมอโปรแกรมทมมากบโปรแกรมบรหารฐานขอมล

• งายสำหรบผพฒนาโปรแกรมเวบแบบ dynamic เนองจากการใชฟงกชนทมอยในภาษาสำหรบเขยนเวบโปรแกรมซงจะสงคำสงใหระบบบรหารฐานขอมลเปนผดำเนนการ เชน การเพมเตมแกไขหรอลบขอมลทเปลยนทงเนอขอมลและการจดทำดชนขอมล (index) ใหโดยอตโนมต การดงขอมลออกมาใชโดยระบเงอนไขและมการจดเรยงหรอการเชอมโยงขอมลใหออกมาตามรปแบบทตองการ

บทท 7การใชฐานขอมลเบองตน

Page 3: p บทที่ 7 การใช้ฐานข้อมูล ... - MWITjeab/sheet40201/PHP_DB1.pdf1. รวมเอาข อม ลท ส มพ นธ ก นไว ในฐานข

259

• สามารถสรางโปรแกรมทมการประมวลผลขอมล ทประกอบดวยการประมวลผลเชน การคดเลอก (filter), การคนหา (search), การจดเรยง (sort), การจดกลม (grouping), การสรปผล (summary), การคำนวณ (calculation) เปนตน

• แยกการทำงานของระบบจดการฐานขอมลกบระบบบรการเวบหรอแมขายบรการเวบออกจากกนไมวาจะทำงานในแมขายเครองเดยวกน หรอแยกแมขายการทำงาน ทำใหเกดการประมวลผลทมประสทธภาพสง (Scalable – highly performance system)

• สามารถใชขอมลบางสวนรวมกบระบบประมวลผลเดมของกจการและระบบหลงราน (Back Office) เนองจากระบบประมวลผลของธรกจกจการตางๆ ทเปนระบบระดบกลางถงระดบใหญเปนระบบประมวลผลทใชเทคโนโลยฐานขอมลซงเปนระบบฐานขอมลแบบเดยวกนกบทใชในโปรแกรมเวบ ดงนนเราจงสามารถนำเอาขอมลทงจากระบบงานประมวลผลเดมและระบบโปรแกรมเวบมาใชรวมกนได (Share with back office / existing application)

WEB PROGRAMMING Using PHP. and MySQL.

Page 4: p บทที่ 7 การใช้ฐานข้อมูล ... - MWITjeab/sheet40201/PHP_DB1.pdf1. รวมเอาข อม ลท ส มพ นธ ก นไว ในฐานข

260

2 ความรเบองตนระบบฐานขอมลระบบฐานขอมลเปนเทคโนโลยดานการจดเกบและการเขาถงขอมลทสามารถรวมเอาขอมลซง

ถกแบงออกเปนกลมขอมลยอยตางๆ ซงมความสมพนธกนถกออกแบบมาใหใชในระบบงานของกจการในหลายสวนงาน ขอมลในฐานขอมลมการออกแบบใหจดเกบขอมลทถกใชงานจากหลายโปรแกรม (ทมการใชขอมลรวมกนหรอมความสมพนธกน) โดยลดการเกบขอมลทซำซอนลง ซงแกไขปญหาของการจดเกบขอมลในไฟลแบบเดมทมกออกแบบไฟลขอมลใหใชสำหรบแตละโปรแกรมแยกจากกน

ตวอยางของระบบงานในกจการตางๆ เชน ระบบงานบรหารงานบคคล ระบบงานการเงนการบญช ระบบงานควบคมสนคาและวตถดบ ระบบงานขายสนคาและจดสง ระบบงานบรการลกคา ฯลฯ ระบบงานเหลานมกจะตองมขอมลทมความสมพนธกนระหวางแตละระบบงาน เชน ระบบงานขายตองสมพนธกบระบบงานควบคมสนคาคงคลง คอการขายจะตองใชรายการสนคา ระบบควบคมสนคาคงคลงจะตองตดสตอกจากการขายสนคา ระบบการขายตองใชรายชอลกคาเชนเดยวกบระบบบญชเจาหนลกหน ระบบบรการลกคากตองใชรายชอลกคาดวยเชนกน หรอระบบบรหารงานบคคลอาจตองใชผลงานการขายของพนกงานขายทเกดจากการขายสนคา และตองมการจายเงนเดอนและคาคอมมชชนทอยในระบบบญชเงนเดอน จะเหนวาระบบบรหารงานของกจการจะมการใชขอมลทมความเกยวของสมพนธกนเสมอ

การจดเกบขอมลในไฟลแบบเดมทใชไฟลสำหรบแตละโปรแกรมแยกจากกน มกทำใหมกจะเกดปญหา ไดแก

• การเกบขอมลซำซอน (Redundancy) ขอมลเดยวกนจดเกบแยกเปนหลายชดเพอใชในแตละระบบงาน ทำใหสนเปลองทงพนทในการบนทกขอมลและเวลาทใชในการปอนเขาและแกไขขอมล สนเปลองสอและเวลาในการทำการสำรองขอมล

• ขอมลเดยวกนเมออย (และจดเกบ) ตางระบบเกดความแตกตางกน (Inconsistency) เนองจากเมอขอมลจรงมการเปลยนแปลง แตผปฏบตไมไดแกไขขอมลในทกระบบ

2 1) คณสมบตของระบบฐานขอมล มคณสมบตคอ

1. รวมเอาขอมลทสมพนธกนไวในฐานขอมลเดยวกน (Integration) โดยมการออกแบบโครงสรางการจดเกบขอมลทดเหมาะสม

2. สามารถใชขอมลรวมกนได (Sharable) ระหวางระบบงานโปรแกรมตางๆ ของหนวยงานเดยวกน และยงอาจอนญาตใหใชขามหนวยงานหรอขามสาขา โดยไมถกจำกดดวยสภาพทางกายภาพ (สถานท)

3. ขอมลเดยวกนถกตองตรงกน (Consistency) เมอปรากฏในระบบงานโปรแกรมใดๆ ทใชฐานขอมลเดยวกน เนองมาจากการออกแบบใหมการเกบขอมลรวมกน (integrate) และใชงานรวมกน (share)

การทระบบฐานขอมลมการเกบขอมลรวมกนระหวางหลายโปรแกรมและใชงานขอมลรวมกน จงตองมการออกแบบฐานขอมลสำหรบใชในงานตางๆ อยางด มระบบจดการเพอเขาใชงานขอมลอยางเหมาะสมตามความจำเปนของแตละระบบงาน มความสามารถปองกนการใชงานในฐานขอมลอยางไมเหมาะสมได และเนองจากมการใชขอมลรวมกนระหวางหลายระบบงานทำใหขอมลทเกบในฐานขอมลตองมความปลอดภย (security) และมใหใชไดอยเสมอ (Availability) ดวย รวมถงการใชงานขอมลจากฐานขอมลตองทำไดอยางมประสทธภาพและถกตองดวย

2 2) สวนประกอบระบบฐานขอมลในระบบฐานขอมลมสวนประกอบทงดานซอฟตแวร ขอมล ฮารดแวรและบคคลไดแก

• ฐานขอมล(Database)• ระบบบรหารฐานขอมล (Database management system – DBMS.)• โปรแกรมอำนวยความสะดวก (Utility program)• สวนตดตอกบโปรแกรม (Application Program Interface – API.)• โปรแกรมประยกต (Application Program)• คอมพวเตอรแมขาย เครอขาย และคอมพวเตอรลกขาย (Server, Network and

Client)• ผบรหารฐานขอมล (Database Administrator)• ผพฒนาโปรแกรมประมวลผลและผใช (Application Developers and Users)

ฐานขอมล (database) คอขอมลทถกเกบบนทกในระบบฐานขอมล ขอมลในฐานขอมลจะถกเกบแบงยอยออกเปนตารางขอมลตางๆ (data table) ในระบบฐานขอมลสมพนธ(relational database system) หรอวตถ (object) ในระบบฐานขอมลเชงวตถ (Object-oriented database system)

บทท 7การใชฐานขอมลเบองตน

Page 5: p บทที่ 7 การใช้ฐานข้อมูล ... - MWITjeab/sheet40201/PHP_DB1.pdf1. รวมเอาข อม ลท ส มพ นธ ก นไว ในฐานข

261

การเกบขอมลในฐานขอมลจะมการเขารหส (encryption) เพอความปลอดภยไมใหโปรแกรมหรอผใชนำขอมลในฐานขอมลไปใชงานใดๆ โดยตรงโดยไมผานระบบบรหารฐานขอมลได และอาจมการบบอดขอมล (compression) เพอใหสามารถเกบขอมลปรมาณมากๆ และเขาถงขอมลไดเรวขน (โดยลดการอานขอมลจากดสกลงเนองจากขนาดขอมลทเลกลง) การเกบขอมลในฐานขอมลนอกจากจะมตารางขอมลแลวจะยงมการเกบดชนขอมล (index) เพมเตมเพอการคนหาและการเขาถงขอมลไดรวดเรวขนดวย

ระบบบรหารฐานขอมล (database management system – DBMS.) คอโปรแกรมททำหนาทในการดำเนนการกบฐานขอมล โดยปกตโปรแกรมตางๆ จะเขาถงขอมลไมวาเพอเพมเตม เปลยนแปลงหรอนำขอมลออกไปแสดง จะตองดำเนนการผานโปรแกรมน ซงจะมโปรแกรมทดำเนนการกบฐานขอมลในการใชงานแบบตางๆ เชน การเพม ลบ แกไข การดงรายการขอมลไปใชในรปแบบตางๆ การสรางและปรบปรงดชน

การเขาถงฐานขอมลผานระบบบรหารฐานขอมลอาจกระทำในวธทางตางๆ ไดแก จากโปรแกรมประมวลผลตางๆ รวมทงโปรแกรมเวบ จากการใชคำสงในภาษาฐานขอมล (database language) ทใชโปรแกรมรบคำสงแบบ interactive และการใชโปรแกรมอำนวยความสะดวกตางๆ

ไมวาจะเขาถงดวยวธใดๆ ผใชฐานขอมลจะตองมสทธในการเขาใชฐานขอมลอยางเหมาะสม การกำหนดสทธจะเปนหนาทของผบรหารฐานขอมล เมอจะเขาใชตองมการรบรองการแสดงตว (authentication) เชนการใสชอผใชและรหสผานทถกตอง บางครงชอผใชและรหสผานจะถกกำหนดในโปรแกรมประมวลผลอยแลว เชนโปรแกรมเวบทจะดงรายการขอมลไปแสดงใหผชม จะพบวาผชมไมตองปอนชอและรหสผานของระบบฐานขอมลเนองจากในโปรแกรมจะสงชอและรหสผานทกำหนดไวโดยอตโนมต

โปรแกรมอำนวยความสะดวก (Utility program) ในระบบฐานขอมลแตละระบบจะมการจดเตรยมโปรแกรมใหผใช นกพฒนาโปรแกรมและผดแลระบบฐานขอมล ใชงานเพอการเขาใชฐานขอมลโดยการปอนคำสงแบบ interactive และเพอการบรหารระบบ เชน การแสดงภาระและประสทธภาพของระบบ การปรบประสทธภาพของระบบ การทำสำรองขอมล การสงและรบขอมลกบระบบอนๆ ฯลฯ เปนตน ผทจะใชโปรแกรมเหลานกตองผานกระบวนการรบรองตว (Authentication) ดวยเชนกน

คอมพวเตอรแมขาย เครอขาย และคอมพวเตอรลกขาย (Computer Hardware) ในดานฮารดแวรการตดตงระบบบรหารฐานขอมลและตวฐานขอมลจะทำการตดตงในแมขายบรการฐานขอมล (Database Server) เพอใหบรการการใชงานขอมลของทงองคกรหรอจากคอมพวเตอรเครองอนๆ รวมทงอาจเรยกมาจากแมขายเครองอน เชน กรณโปรแกรมเวบแมขายเวบจะเรยกใชฐานขอมลไปยงแมขายบรการฐานขอมล ในบางระบบทมภาระการทำงานไมมากนกอาจจะตดตงโปรแกรมบรหารฐานขอมลลงบนแมขายเดยวกนกบแมขายเวบ หรออาจตดตงลงในเครองของนกพฒนาโปรแกรมเพอใชทำการทดสอบแบบแยกเดยว (Standalone) กได แตในสภาวะการทำงานตามปกตแลวแมขายฐานขอมลจะตดตอกบแมขายอนๆ หรอเครองลกขายทใชบรการผานระบบเครอขายคอมพวเตอร ซงในปจจบนผลตภณฑทางคอมพวเตอรเปนสวนใหญรวมถงระบบฐานขอมลจะใชระบบเปดทเปนมาตรฐาน ไมยดตดกบยหอหรอรนใดรนหนงสามารถใชบรการทำงานรวมกนขามระบบได ดงนนการใชแมขาย เครอขายและคอมพวเตอรลกขายจงไมขนตอกนแบบผกขาด

ผใชฐานขอมลและผบรหารฐานขอมล (Peopleware: User and Database Administrator – DBA.) ในองคประกอบดานบคคลระบบฐานขอมลทใชในองคกรเนองจากตองแบงขอมลในหลายงานและอนญาตใหใชงานไดตามความเหมาะสมจงตองมผทำหนาทบรหารจดการฐานขอมล ซงมหนาทตางๆ เชน ตดตงโปรแกรมบรหารฐานขอมล สรางฐานขอมล สรางและจดการขอมลผใช กำหนดสทธของผใชในการเขาใชฐานขอมล ตรวจสอบและปรบตงประสทธภาพของระบบฐานขอมล ทำสำรองและนำคนขอมล ตรวจสอบความถกตองของขอมลและซอมแซมขอมล ฯลฯ เปนตน ผททำหนาท DBA. จะตองมความรในการใชงานระบบบรหารฐานขอมลและโปรแกรมอำนวยความสะดวกรวมถงคำสงเกยวกบการจดการฐานขอมลเปนอยางด สวนผใชฐานขอมลอาจเปนผใชปลายทางทใชฐานขอมลผานโปรแกรมประมวลผลซงไมมความจำเปนตองเขาใจการใชระบบฐานขอมลโดยตรง เพยงแตสามารถใชโปรแกรมประมวลผลได จะมเพยงผใชฐานขอมลทใชโปรแกรมจดการฐานขอมลโดยตรงไมมโปรแกรมประมวลผลชวย และนกพฒนาโปรแกรมประมวลผลทจำเปนตองมความสามารถในการใชคำสงเขาถงฐานขอมล และคำสงอำนวยความสะดวกบางคำสง และจะตองเปนผใชทถกกำหนดบญชชอผใช (User Account) ในระบบฐานขอมลใหมสทธในการใชงานได

2 3) ชนดของระบบฐานขอมลชนดของระบบฐานขอมลนบแตอดตมามชนดตางๆ 4 ชนด ไดแก hierarchical, network ,

relational และ object-oriented database แตในปจจบนระบบฐานขอมลทยงคงนยมใชมเพยง 2 ชนดไดแก

• ฐานขอมลสมพนธ (Relational database)

WEB PROGRAMMING Using PHP. and MySQL.

Page 6: p บทที่ 7 การใช้ฐานข้อมูล ... - MWITjeab/sheet40201/PHP_DB1.pdf1. รวมเอาข อม ลท ส มพ นธ ก นไว ในฐานข

262

• ฐานขอมลเชงวตถ (Object-Oriented database)

ฐานขอมลสมพนธ เปนการจดการจดเกบขอมลภายในฐานขอมล โดยอาศยแนวคด relational algebra มการสราง relation ตางๆ สำหรบเกบขอมล (ในแตละ relation มลกษณะเหมอนตารางขอมล 2 มต) ซงแตละ relation มความสมพนธเชอมโยงกบ relation อนได สามารถใชคำสงทเปน relational expression ในการสรางคำสงสำหรบการคดเลอกขอมลทตองการใชงานทไดจากหลาย relation ทสมพนธกนตามเงอนไขทตองการ

ปจจบนฐานขอมลสมพนธเปนเทคนคทถกใชมากทสด มการกำหนดภาษามาตรฐานสำหรบการเขาถงขอมลในฐานขอมลสมพนธ มชอวาภาษา SQL. (Structured Query Language) เปนภาษาทไดรบการยอมรบจากผผลตระบบฐานขอมลและผผลตซอฟตแวรระบบตางๆ ใหเปนภาษามาตรฐาน มระบบบรหารฐานขอมลทถกผลตและไดรบความนยมมากมาย ทนยมอาทเชน Oracle, Microsoft SQL Server, DB2, MySQL, Microsoft Access เปนตน

ฐานขอมลเชงวตถ เปนเทคโนโลยของระบบฐานขอมลทสบตอเนองกบ วธการพฒนาระบบซอฟตแวรเชงวตถ (Object-Oriented Methodology) โดยคดถงขอมล ระบบ หรอสงทตางๆ ในรปแบบวตถทม คณสมบต (properties) และวธการดำเนนการตางๆ (method) กบวตถเพอใหเกดการประมวลผลหรอเปลยนแปลงคณสมบตของวตถนน และยงมหลกการทสำคญตางๆ ทเกยวของไดแก การซอนขอมลภายใน (information hiding) การสบทอดคณสมบตไปยงวตถระดบชนยอย (inherit) การสรางลกษณะการดำเนนการไดหลายอยาง (overriding) การเปลยนแปลงวธดำเนนการ (overloading) ฯลฯ

การใชเทคนคเชงวตถมการกำหนดมาตรฐานวธดำเนนการและการแสดงแบบ (model) ของระบบ ทถกยอมรบเปนมาตรฐานเรยกวา UML. (Unified Modeling Language) ซงสามารถในไปใชในกระบวนการขนตางๆ ของเทคนคเชงวตถไดรวมทงในระบบฐานขอมลเชงวตถดวย ในปจจบนมผผลตระบบบรหารฐานขอมลเชงวตถกนบาง เชน Cache ในตำรานไมไดเนนเทคนคหรอฐานขอมลเชงวตถ จงไมกลาวถงรายละเอยด ผศกษาทสนใจสามารถศกษาเพมเตมไดในตำราเกยวกบเทคนคเชงวตถ หรอระบบฐานขอมลเชงวตถ

2 4) คำสงภาษา SQL

Structure Query Language หรอ SQL. เปนภาษามาตรฐานสำหรบการสงคำสงไปยง DBMS. ในการเขยน web program เพอใชงานฐานขอมลจะตองใชภาษา SQL นเพอทำการสงคำสงจาก web program ไปยง DBMS. Server เพอให DBMS จดการกบฐานขอมลตามคำสงและคนผลลพธกลบมายง web program เพอนำขอมลหรอผลลพธทไดไปใชในคำสงของ web program ตอไป

คำสงในภาษา SQL สามารถจดเปนกลมคำสง Data Definition Language ซงเปนคำสงทใช เพอสราง เปลยนแปลง หรอ ลบ องคประกอบในฐานขอมล และกลมคำสง Data Manipulation Language ซงเปนคำสงทใชจดการกบขอมล คำสงทสำคญในแตละกลมไดแก

คำสงกลม Data Definition

• CREATE DATABASE เปนคำสงทใชสรางฐานขอมล• DROP DATABASE คอคำสงสำหรบลบฐานขอมล• CREATE TABLE คอคำสงสรางตารางขอมลในฐานขอมล• DROP TABLE คอคำสงสำหรบลบตารางในฐานขอมล• ALTER TABLE คอคำสงสำหรบแกไขเปลยนแปลงโครงสรางตารางในฐานขอมล• RENAME TABLE คอคำสงเปลยนชอตารางขอมล• CREATE INDEX คอคำสงสราง-เพม index ใหแกตารางขอมล• DROP INDEX คอคำสงลบ index

คำสงกลม Data Manipulation

• USE เปนคำสงเลอกใชฐานขอมล• INSERT INTO คอคำสงเพมรายการ row ของขอมลลงในตารางขอมล• UPDATE คอคำสงแกไขขอมลใน row ทอยในตารางขอมล• DELETE คอคำสงลบบรรทดขอมลออกจากตารางขอมล• SELECT คอคำสงเลอกนำขอมลตามเงอนไขทกำหนดออกมาจากฐานขอมล เพอใช

แสดงหรอประมวลผล

บทท 7การใชฐานขอมลเบองตน

Page 7: p บทที่ 7 การใช้ฐานข้อมูล ... - MWITjeab/sheet40201/PHP_DB1.pdf1. รวมเอาข อม ลท ส มพ นธ ก นไว ในฐานข

263

คำสงในกลมทใชบอยใน web program จะเปนกลม data manipulation สวนคำสง data definition มกใชในการสงการแบบ interactive โดยผานโปรแกรม utilities เชน phpMyAdmin หรอ phpfront ในสวนตอไปจะอธบายถงรปแบบของการใชคำสงตางๆ โดยใชรปแบบของระบบฐานขอมล MySQL version 4.0.5

คำสง CREATE DATABASE

คอคำสงสำหรบสรางฐานขอมล มรปแบบคำสงดงน

CREATE DATABASE [IF NOT EXISTS] db_name

โดย db_name หมายถงชอฐานขอมลมความยาวไดถง 64 อกขระ สามารถใชอกขระใดๆ ยกเวน ‘/’ (slash) `\' (backslash ) และ ‘.’ (period) และไมควรตงชอใหตรงกบคำเฉพาะ (Reserved word) ของ MySQL ทงนชอฐานขอมลจะมความแตกตางระหวางอกษรตวใหญ-เลก (case sensitive) หรอไมนนขนอยกบ OS เชน สำหรบ Windows ชอฐานขอมลจะ case-insensitive แตสำหรบตระกล Unix ชอฐานขอมลจะ case sensitive

แตละฐานขอมลใน MySQL จะเปน directory ซงภายหลงจะประกอบดวย File คอตารางขอมลตางๆ ทถกสรางขนในฐานขอมลนน

ถามฐานขอมลชอนนอยกอนแลว จะเกด error ขน โดยไมสรางฐานขอมล แตถากำหนด Keyword IF NOT EXISTS จะไมเกด errorและไมสรางฐานขอมลขน

ตวอยางการใชคำสง CREATE DATABASE เพอสรางฐานขอมลเพอเกบขอมลเกยวกบระบบรานเชาวดโอ โดยกำหนดใหฐานขอมลชอ vdoshop

CREATE DATABASE vdoshop;

คำสง DROP DATABASE

คอคำสงสำหรบลบฐานขอมล มรปแบบคำสงดงน

DROP DATABASE [IF EXISTS] db_name

โดย db_name หมายถงชอฐานขอมล คำสงนจะลบฐานขอมลและลบตารางขอมลทกตารางทมอยในฐานขอมลนน ถากำหนด IF EXISTS จะปองกนไมใหเกด error ถาไมมฐานขอมลนน

คำสง CREATE TABLE

เปนคำสงสำหรบสรางตารางขอมลในฐานขอมล โดยกำหนดโครงสรางของตารางขอมล มรปแบบคำสงทวไปดงน

CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name [(create_definition,...)][table_options] [select_statement]

สวนประกอบทสำคญของคำสง CREATE TABLE มความหมายดงตอไปน • TEMPORYเปน Keyword ทใชเพอสรางตารางขอมลชวคราวซงจะถกลบไปเมอสนสด

connection

• IF NOT EXISTS เปน Keyword ทใชเพอใหไมเกด error เมอมตารางขอมลชอนนอยแลว โดยถาไมใส IF NOT EXISTS และมตารางขอมลชอนนอยแลว จะเกด error

• tbl_name หมายถงชอตารางขอมลมความยาวไดถง 64 อกขระ ชอตารางสามารถใชอกขระใดๆ ยกเวน ‘/’ (slash) และ ‘.’ (period) และไมควรตงชอใหตรงกบคำเฉพาะ (Reserved word) ของ MySQL ทงนชอตารางจะมความแตกตางระหวางอกษรตวใหญ-เลก (case sensitive) หรอไมนนขนอยกบ OS เชน สำหรบ Windows

WEB PROGRAMMING Using PHP. and MySQL.

Page 8: p บทที่ 7 การใช้ฐานข้อมูล ... - MWITjeab/sheet40201/PHP_DB1.pdf1. รวมเอาข อม ลท ส มพ นธ ก นไว ในฐานข

264

ชอตารางจะ case-insensitive แตสำหรบตระกล Unix ชอตารางจะ case sensitive

• table_options ใชเพอกำหนดชนดของตารางขอมล เชน ISAM HEAP หรอ MyISAM ผศกษาสามารถศกษารายละเอยดชนดของตารางขอมลไดจาก MySQL manual

• create_definition คอรปแบบในการกำหนดโครงสรางของตารางขอมลนน อาท column ทงหมดในตารางขอมล คยหลก (PRIMARY KEY) ฟอรเรนทคย (FOREIGN KEY) และ ดรรชน (INDEX, KEY) โดยมรปแบบดงน

create_definition:

col_name type [NOT NULL | NULL] [DEFAULT default_value] [AUTO_INCREMENT] [PRIMARY KEY] [reference_definition] or PRIMARY KEY (index_col_name,...) or KEY [index_name] (index_col_name,...) or INDEX [index_name] (index_col_name,...) or UNIQUE [INDEX] [index_name] (index_col_name,...) or FULLTEXT [INDEX] [index_name] (index_col_name,...) or [CONSTRAINT symbol] FOREIGN KEY [index_name] (index_col_name,...) [reference_definition] or CHECK (expr)

การกำหนดรปสำหรบแตละ column จะเรมตนดวยชอ column (col_name) ตามดวยชนดของขอมลทจดเกบใน column (type) แลวตามดวยการกำหนดคณลกษณะของ column นนๆ ตามทตองการ อาท กำหนดใหสามารถมคาเปน NULL ไดหรอไม กำหนดคาเรมตนใหกบ column (DEFAULT) รวมถงการกำหนดใหขอมลเลขจำนวนเตมเปน AUTO_INCREMENT ได ชอ column มความยาวไดถง 64 อกขระ และไมมความแตกตางระหวางอกษรตวใหญ-เลก (case-insensitive) ชนดของขอมลสามารถจดกลมได 3 ลกษณะคอ

• ขอมลตวเลข (Numeric) ไดแกขอมลชนด NUMERIC, DECIMAL, INTEGER, SMALLINT, FLOAT, REAL, และ DOUBLE

• ขอมลวนเวลา (Date and Time) ไดแกขอมลชนด DATETIME, DATE, TIMESTAMP, TIME, และ YEAR

• ขอมลขอความ (String, characters) ไดแกขอมลชนด CHAR, VARCHAR, TEXT, ENUM, และ SET

• ขอมลทเกบขอมลแบบเลขฐานสองใดๆ เชนอาจใชเกบขอมลทมาจากไฟลเวรดโปรเซสเซอร ขอมลภาพ ฯลฯ ไดแก BLOB, TINYBLOB, MEDIUMBLOB, LONGBLOB

รายละเอยดเบองตนเกยวกบชนดขอมลทใชใน MySQL อธบายในตารางท 7.2-1 สามารถศกษารายละเอยดเพมเตมไดจาก MySQL manual

ตารางท 7.2-1 ชนดขอมลทใชในระบบฐานขอมล MySQL.

ชนดของขอมล คำอธบาย

INT(length) เลขจำนวนเตมขนาด 4 Bytes ถากำหนดใหเปน SIGNED จะมคาอยในชวง -

2147483648 ถง 2147483647 ถาเปน UNSIGNED ซงหมายถงไมสามารถเปน

คาลบจะมคาอยในชวง 0 ถง 4294967295

INTEGER(length) เหมอนกบชนด INT

TINYINT(length) เลขจำนวนเตมขนาดเลกมาก ขนาด 1 Bytes ถากำหนดใหเปน SIGNED จะม

คาอยในชวง -128 ถง 127 ถาเปน UNSIGNED จะมคาอยในชวง 0 ถง 255

SMALLINT(length) เลขจำนวนเตมขนาดเลก ขนาด 2 Bytes ถากำหนดใหเปน SIGNED จะมคาอย

ในชวง -32768 ถง 32767 ถาเปน UNSIGNED จะมคาอยในชวง 0 ถง 65535

บทท 7การใชฐานขอมลเบองตน

Page 9: p บทที่ 7 การใช้ฐานข้อมูล ... - MWITjeab/sheet40201/PHP_DB1.pdf1. รวมเอาข อม ลท ส มพ นธ ก นไว ในฐานข

265

ชนดของขอมล คำอธบาย

MEDIUMINT(length) เลขจำนวนเตมขนาดกลาง ขนาด 3 Bytes ถากำหนดใหเปน SIGNED จะมคา

อยในชวง -8388608 ถง 8388607 ถาเปน UNSIGNED จะมคาอยในชวง 0

ถง 16777215

BIGINT(length) เลขจำนวนเตมขนาดใหญ ขนาด 8 Bytes ถากำหนดใหเปน SIGNED จะมคา

อยในชวง -9223372036854775808 ถง 9223372036854775807ถาเปน

UNSIGNED จะมคาอยในชวง 0 ถง 18446744073709551615

DOUBLE(length,decimals) เลขทศนยม ขนาด 8 Bytes มคาอยในชวง -1.7976931348623157E+308 ถง

-2.2250738585072014E-308, 0, และอยในชวง

2.2250738585072014E-308 ถง 1.7976931348623157E+308. โดยถากำหนด

ใหเปน UNSIGNED จะไมสามารถเปนคาลบ

REAL(length,decimals) เหมอนกบ ชนด DOUBLE

FLOAT(length,decimals) เลขทศนยม ขนาด 4 Bytes มคาอยในชวง -3.402823466E+38 ถง

-1.175494351E-38, 0, และอยในชวง 1.175494351E-38 ถง 3.402823466E

+38. โดยถากำหนดใหเปน UNSIGNED จะไมสามารถเปนคาลบ

DECIMAL(length,decimals) เลขทศนยม ซงเกบขอมลแบบ string โดยจะเกบ 1 อกขระตอหนงหลก

NUMERIC(length,decimals) เหมอนกบ ชนด DECIMAL

CHAR(length) ขอความ มความยาวไดถง 255 อกขระ โดยกำหนดขนาดไวคงท ทงนถาใส

ขอมลทมจำนวนอกขระนอยกวาทกำหนดไว ในการจดเกบจะทำการเตมชอง

วาง (space) ตอทายขอความใหครบเทากบความยาวทกำหนดไว

VARCHAR(length) ขอความ มความยาวไดถง 255 อกขระ โดยจะใชพนทจดเกบตามจำนวน

อกขระจรง รวมกบอกหนง Byte สำหรบเกบความยาวของขอความ

DATE วนท ขนาด 3 Bytes MySQL จะแสดงขอมล DATE ในรปแบบ ป เดอน วนท

'YYYY-MM-DD' มขอบเขตอยในชวง '1000-01-01' ถง '9999-12-31'.

TIME เวลา ขนาด 3 Bytes มขอบเขตอยในชวง '-838:59:59' to '838:59:59' MySQL

จะแสดงขอมล TIME ในรปแบบ ชวโมง นาท วนาท คอ 'HH:MM:SS' หรอ

‘HHH:MM:SS’ เมอตองการแสดงชวงเวลา

TIMESTAMP[(M)] วนและเวลา ขนาด 4 Bytes มขอบเขตอยในชวง '1970-01-01 00:00:00' ถง ป

2037 MySQL จะแสดงขอมล TIMESTAMP ในหลายรปแบบคอ

YYYYMMDDHHMMSS, YYMMDDHHMMSS, YYYYMMDD,

YYMMDD YYMM หรอ YY เมอกำหนดคา M ใหเปน 14, 12, 8, 6, 4 หรอ

2 ตามลำดบ

DATETIME วนและเวลา ขนาด 8 Bytes มขอบเขตอยในชวง '1000-01-01 00:00:00' ถง

'9999-12-31 23:59:59'. MySQL จะแสดงขอมล DATETIME ในรปแบบ ป

เดอน วนท ชวโมง นาท วนาท 'YYYY-MM-DD HH:MM:SS'

BLOB รองรบการเกบขอมลขนาดใหญเรยกวา Binary Large Object ซง MySQL จะ

เหนเปน object ทแยกตางหาก สามารถเกบไฟลเอกสาร ขอมล binary รวมถง

รปภาพ การเกบและการเปรยบเทยบขอมลเปน case sensitive มความยาว

สงสดไดถง 65535 Bytes (2^16 – 1, 64KB-1) โดยขนาดทใชเกบขอมลจะขน

อยขนาดของขอมลจรง

WEB PROGRAMMING Using PHP. and MySQL.

Page 10: p บทที่ 7 การใช้ฐานข้อมูล ... - MWITjeab/sheet40201/PHP_DB1.pdf1. รวมเอาข อม ลท ส มพ นธ ก นไว ในฐานข

266

ชนดของขอมล คำอธบาย

TINYBLOB ขอมล Binary Large Object ขนาดเลก ซงมความยาวสงสดไดถง 255 Bytes

(2^8 – 1)

MEDIUMBLOB ขอมล Binary Large Object ขนาดกลาง มความยาวสงสดไดถง 16777215

Bytes (2^24 – 1, 16MB-1)

LONGBLOB ขอมล Binary Large Object ขนาดใหญ มความยาวสงสดไดถง 4294967295

Bytes (2^32 – 1, 4GB -1)

TEXT รองรบการเกบขอมลขนาดใหญเรยกวา ซง MySQL จะเหนเปน object ท

แยกตางหาก สามารถเกบไฟลเอกสาร ขอมล binary รวมถงรปภาพ การเกบ

และการเปรยบเทยบขอมลเปน case insensitive มความยาวสงสดไดถง 65535

Bytes (2^16 – 1, 64KB-1) โดยขนาดทใชเกบขอมลจะขนอยขนาดของขอมล

จรง

TINYTEXT ขอมล TEXT ขนาดเลก ซงมความยาวสงสดไดถง 255 Bytes (2^8 - 1)

MEDIUMTEXT ขอมล TEXT ขนาดกลาง มความยาวสงสดไดถง 16777215 Bytes (2^24

– 1, 16MB-1)

LONGTEXT ขอมล TEXT ขนาดใหญ มความยาวสงสดไดถง 4294967295 Bytes (2^32 –

1, 4GB -1)

ENUM(value1,value2,value3,...) รายการขอมล string ซงในขณะในขณะหนงจะมคาเปนคาใดคาหนง ตามทผ

ใชไดกำหนดคาทเปนไปไดไวในรายการขอมล สามารถมจำนวนขอมลใน

รายการได 65535 ขอมล โดยแตละคาใน list ของขอมลจะม Index ซงเรมจาก

1

SET(value1,value2,value3,...) เซตของขอมล string ซงอาจจะไมมคาหรอมหลายคา โดยเลอกจากขอมลทผ

ใชไดกำหนดคาทเปนไปไดไวเปนสมาชกของเซต สามารถมจำนวนสมาชกได

ถง 64 สมาชก MySQL จะเกบขอมลสมาชก SET ในรปแบบของคาตวเลข

เรยงตามลำดบ

ตวอยางการใชคำสง CREATE TABLE

คำสงทใชเพอสรางตารางขอมลเพอเกบขอมลเกยวกบภาพยนตร โดยกำหนดใหตารางชอ movie ประกอบดวย 8 column สำหรบขอมล รหสประจำภาพยนตร ชอเรอง ประเภท ดารานำแสดง ผกำกบ ปทสราง เรตของภาพยนตร และ ประเทศผสราง และกำหนดให ใช รหสประจำภาพยนตร เปนคยหลก แสดงไดดงนCREATE TABLE `movie` ( `mov_id` int(5) unsigned NOT NULL auto_increment, `title` varchar(20) NOT NULL default '', `category` varchar(10) NOT NULL default '0', `staring` varchar(50) default '0', `director` varchar(20) default '0', `publish` date default '0000-00-00', `rate` varchar(5) NOT NULL default 'ALL', `local` varchar(15) NOT NULL default '', PRIMARY KEY (`mov_id`));

จากคำสงเบองตนเปนการสรางตารางขอมลชอ movie ซงมรายละเอยดของ column ตางๆ แสดงดงตาราง ตอไปน ตารางท 7.2-2 รายละเอยดของตาราง movie

บทท 7การใชฐานขอมลเบองตน

Page 11: p บทที่ 7 การใช้ฐานข้อมูล ... - MWITjeab/sheet40201/PHP_DB1.pdf1. รวมเอาข อม ลท ส มพ นธ ก นไว ในฐานข

267

ชอ column คำอธบาย ชนดขอมล ความยาว คณสมบตอนๆmov_id รหสประจำภาพยนตร เลขจำนวนเตม 5 หลก มเฉพาะคาบวก ตองมคาไมเปน

NULL เพมคาขนเองครงละ 1และเปนคยหลก

title ชอเรอง ขอความ 20 อกขระ ตองมคาไมเปน NULL มคาเรมตนเปน ' '

category ประเภทภาพยนตร ขอความ 10 อกขระ ตองมคาไมเปน NULL มคาเรมตนเปน อกขระ 0

staring ดารานำแสดง ขอความ 50 อกขระ มคาเรมตนเปน อกขระ 0director ผกำกบภาพยนตร ขอความ 20 อกขระ มคาเรมตนเปน อกขระ 0publish ปทสรางภาพยนตร วนท มคาเรมตนเปน 0000-00-00

rate เรตของภาพยนตร ขอความ 5 อกขระ ตองมคาไมเปน NULL มคาเรมตนเปน ALL

local ประเทศผสราง ขอความ 15 อกขระ ตองมคาไมเปน NULL มคาเรมตนเปน ' '

ทงนในการกำหนดคณสมบตของ Column

• ถาไมไดกำหนดไววาให column นน เปน NULL หรอ NOT NULL จะถอเสมอนกำหนดใหเปน NULL

• Column ทเปน Integer อาจจะกำหนดใหเปน AUTO_INCREMENT คอเพมคาขนเองครงละ 1

• กรณชนดขอมล TIMESTAMP ซงกำหนดใหเปน NULL จะเปนการกำหนดใหเปน วน และเวลาปจจบน

• การกำหนดคา Default จะตองเปนคาคงทไมสามารถจะเปน ฟงกชน หรอ นพจน ถาไมไดกำหนดคา Default ไว MySQL จะกำหนดคาหนงคาใหอตโนมต คอถา column นนเปน NULL ได MySQLจะกำหนดคา Default ใหเปน NULL ถา column นนเปน NOT NULL MySQL จะกำหนดคา Default ใหดงน

o ขอมลชนดตวเลข Numeric จะกำหนดคา Default ใหเปน 0 ยกเวน กรณAUTO_INCREMENT

o ขอมลชนด String (ยกเวน ENUM) จะกำหนดคา Default ใหเปน empty string

คำสง DROP TABLE

คอคำสงสำหรบลบตารางขอมล มรปแบบคำสงดงน

DROP TABLE [IF EXISTS] tbl_name [, tbl_name,...]

tbl_name หมายถงชอตารางขอมล คำสงนจะลบขอมลจากตารางขอมลทกตารางทกำหนดชอไว และลบตารางขอมลออกจากฐานขอมล ถากำหนด Keyword IF EXISTS จะปองกนไมใหเกด error ในกรณทไมมตารางขอมลนน

คำสง ALTER TABLE

คอคำสงสำหรบแกไขเปลยนแปลงโครงสรางตารางขอมล มรปแบบคำสงดงน

ALTER [IGNORE] TABLE tbl_name alter_spec [, alter_spec ...]

โดยท alter_spec คอการระบการแกไขเปลยนแปลงโครงสรางตารางขอมล อาท การเพม/ลบ column หรอ index หรอคยหลก การเปลยนแปลงชนดขอมลหรอชอของ column หรอการเปลยนชนดของตารางขอมล โดยใชประโยค ADD DROP CHANGE และ RENAME ตามลำดบ ทงนรายละเอยด ของรปแบบคำสง ALTER TABLE สามารถศกษาเพมเตมไดจาก MySQL manual

WEB PROGRAMMING Using PHP. and MySQL.

Page 12: p บทที่ 7 การใช้ฐานข้อมูล ... - MWITjeab/sheet40201/PHP_DB1.pdf1. รวมเอาข อม ลท ส มพ นธ ก นไว ในฐานข

268

ตวอยางการใชคำสง ALTER TABLE

กำหนดใหมตารางขอมลชอ test ซงม 2 column คอ id ซงมชนดขอมลเปน INTEGER และ name ซงมชนดขอมลเปน CHAR(10);

การเปลยนชอตารางขอมลจาก test ใหเปน member ทำไดโดยใชคำสงALTER TABLE test RENAME member;

การเปลยนชนดของขอมล ของ column ชอ id จาก INTEGER ไปเปน TINYINT NOT NULL และเปลยนชนดของขอมล ของ column ชอ name จาก CHAR(10)ไปเปน CHAR(20) พรอมทงเปลยนชอจาก name ไปเปน surname ทำไดโดยใชคำสงALTER TABLE member MODIFY id TINYINT NOT NULL, CHANGE name surname CHAR(20);

การเพม column ใหมชอ enroll โดยใหมชนดขอมลเปน TIMESTAMP ทำไดโดยใชคำสงALTER TABLE member ADD enroll TIMESTAMP;

การกำหนดให enroll เปน index และให id เปน primary key ทำไดโดยใชคำสงALTER TABLE member ADD INDEX (enroll), ADD PRIMARY KEY (id);

การลบ column ชอ surname

ALTER TABLE member DROP COLUMN surname;

คำสง RENAME TABLE

คอคำสงเปลยนชอตารางขอมล มรปแบบคำสงดงนRENAME TABLE tbl_name TO new_tbl_name[,tbl_name2 TO new_tbl_name2,...]

ตวอยางการสลบชอตารางขอมล 2 ตาราง คอตาราง banana และตาราง mango ทำไดโดยใชคำสงRENAME TABLE banana TO backup_table, mango TO banana, backup_table TO mango;

คำสง CREATE INDEX

เปนคำสงสำหรบสราง/เพม Index ใหกบตารางขอมล มรปแบบคำสงทวไปดงนCREATE [UNIQUE|FULLTEXT] INDEX index_name ON tbl_name (col_name[(length)],... )

สวนประกอบของคำสงมความหมายดงตอไปน• index_name กำหนดชอให index

• tbl_name คอชอตารางขอมล ทตองการสราง index

• col_name[(length)],... เปนการระบ column หรอกลมของ column ทจะใชเปน Index

โดย column ทเปนคา NULL ไดเทานนทสามารถกำหนดใหเปน index ได นอกจากนการกำหนด index สามารถทำไดในขนตอนการ CREATE TABLE หรอโดยใชคำสง ALTER TABLE

ตวอยางการใชคำสง CREATE INDEX

CREATE INDEX catidx ON product(category);

เปนการนำคาใน column category ของตาราง product มากำหนดใหเปน index ชอ catidx

คำสง DROP INDEX

เปนคำสงสำหรบลบ Index ทระบชอ (index_name) จากตารางขอมล มรปแบบคำสงทวไปดงนDROP INDEX index_name ON tbl_name

บทท 7การใชฐานขอมลเบองตน

Page 13: p บทที่ 7 การใช้ฐานข้อมูล ... - MWITjeab/sheet40201/PHP_DB1.pdf1. รวมเอาข อม ลท ส มพ นธ ก นไว ในฐานข

269

คำสง USE

เปนคำสงสำหรบระบวาจะใชฐานขอมลชอใด มรปแบบคำสงดงนUSE db_name

MySQL จะใชขอมลจากฐานขอมลทระบชอไว (db_name) จนจบ session หรอจนมการระบถงฐานขอมลอน ดงตวอยางUSE datagr1SELECT COUNT(*) FROM employee; # selects from datagr1.employee;

USE datagr2SELECT COUNT(*) FROM employee; # selects from datagr2.employee;

คำสง INSERT INTO

คอคำสงสำหรบการนำขอมล row ใหมเพมลงใน table มรปแบบคำสง 3 รปแบบดงนINSERT [LOW_PRIORITY | DELAYED] [IGNORE] [INTO] tbl_name [(col_name,...)] VALUES ((expression | DEFAULT),...),(...),...

INSERT [LOW_PRIORITY | DELAYED] [IGNORE] [INTO] tbl_name SET col_name=(expression | DEFAULT), ...

INSERT [LOW_PRIORITY | DELAYED] [IGNORE] [INTO] tbl_name [(col_name,...)] SELECT ...

โดยท Keyword ทสำคญมความหมายดงน• LOW PRIORITY คอกำหนดใหการเพมขอมลกระทำเมอไมมผใชอนใดทำการอาน

ขอมลจาก table นนแลว โดยทโปรแกรมททำการเพมขอมลตองรอจนกวาการเพมขอมลจะทำเสรจ หาก table นนถกใชงานมากอาจทำใหคำสงเพมขอมลตองรอนาน

• DELAYED กำหนดใหการเพมขอมลกระทำเมอไมมผใชอนใดทำการอานขอมลจาก table นนแลวเหมอนกบ LOW PRIORITY แตเมอสงคำสงเพมขอมลมาแลวแมวา DBMS. ยงไมไดดำเนนการการเพมขอมแตจะคนใหโปรแกรมกลบไปทำงานตอทนทโดยไมตองรอใหการเพมขอมลทำเสรจสนสมบรณ

• IGNORE ใชกบการ insert ททำพรอมกนหลาย row หากมบาง row ทไมสามารถ insert ได เชน ผดเงอนไข ทำใหเกดขอมลซำในสวนของ PRIMARY หรอ UNIQUE key จะขาม row นน ไป insert ขอมล row อนตอไป แตหากไมกำหนด จะเกด error และสนสดการ insert ขอมล

• INTO tbl_name กำหนดชอ table ทตองการเพมขอมล• รปแบบแรก

o (col_name, …) VALUES (expression|DEFAULT, …) คอการกำหนดรายชอ column ทจะกำหนดขอมลให (col_name) ซงไมจำเปนตองกำหนดทก column และไมจำเปนตองเรยงลำดบ column ตามการสราง table, ขอมลทกำหนดใหอาจกำหนดเปน expression หรอคำวา DEFAULT หมายถงใชคาทกำหนดเปน default ในคำสง CREATE TABLE

o การเพมขอมลในรปแบบแรกสามารถเพมไดหลาย row จากคำสงเดยวโดยกำหนด column list ครงเดยวแตกำหนดชดของ value สำหรบแตละ row อยภายในวงเลบและคนดวย comma เชน INSERT INTO tab1 (col1,col2,col3) VALUES (“v11”,”v12”,”v13”), (“v21”,”v2”,”v23”), … เปนตน

• รปแบบทสองo SET col_name=expression | DEFAULT, … กำหนดขอมลใหแตละ

column เชน INSERT INTO tbl1 SET col1=v1, col2=v2, c3=v3 เปนตน

WEB PROGRAMMING Using PHP. and MySQL.

Page 14: p บทที่ 7 การใช้ฐานข้อมูล ... - MWITjeab/sheet40201/PHP_DB1.pdf1. รวมเอาข อม ลท ส มพ นธ ก นไว ในฐานข

270

• รปแบบทสาม เปนการเลอกขอมลหรอประมวลผลขอมลจาก table หนงนำมาเพมลงในอก table หนง ซงจะตองม column name และ data type ทสอดคลองกนหรออาจใช alias name เพอเปลยนชอใหตรงกน และอาจใชฟงกชนแปลงชนดขอมลของ MySQL ชวย ตวอยางเชน

INSERT INTO tbl1 (col1,col2,col3) SELECT c1 AS col1, c2 AS col2, c3 AS col3 FROM tbl2 WHERE status=”new”;

คำสง UPDATE

คอคำสงสำหรบเปลยนคาขอมลในตารางขอมล มรปแบบคำสงดงนUPDATE [LOW_PRIORITY] [IGNORE] tbl_name SET col_name1=expr1 [, col_name2=expr2, ...] [WHERE where_definition] [LIMIT #]

สวนประกอบทสำคญในคำสงมความหมายดงน• tbl_name กำหนดชอ table ทตองการเปลยนคาขอมล• SET col_name1=expr1 [, col_name2=expr2, ...] กำหนดวาจะทำการเปลยนคา

column ใด (col_name) ใหมคาเปนคาใด (expr) ทงนสามารถจะเปลยนคาไดหลาย column จากคำสงเดยว โดยคนดวย comma

• WHERE กำหนดเงอนไขในการเลอกใหเกดการเปลยนคาขอมลในเฉพาะบาง row เทานน ทงนถาไมม WHERE เกดการเปลยนขอมลในทก row

• LOW PRIORITY กำหนดใหการเปลยนคาขอมลกระทำเมอไมมผใชอนใดทำการอานขอมลจาก table นนแลว

• IGNORE ถาระบไว จะทำใหไมสนสดการ update ขอมลแมวาการ update นน จะทำใหเกดการซำซอนของ key ทงนจะไมทำ update ทจะทำใหเกดการผดพลาด

• LIMIT# ระบจำนวน row ทตองการเปลยนคาขอมลตวอยางการใชคำสง UPDATE

UPDATE employeeSET salary = salary * 1.2, bonus = 50000WHERE perform > 85;

เปนการเปลยนคา column salary และ bonus ในตารางขอมล employee เฉพาะ row ทมคา ใน column perform มากกวา 85 โดยเปลยนคา salary ใหมคาเพมขน 20% และ bonus มคาเปน 50000

คำสง DELETE

คอคำสงสำหรบลบแถวขอมล มรปแบบคำสง 3 รปแบบดงนDELETE [LOW_PRIORITY] [QUICK] FROM table_name [WHERE where_definition] [ORDER BY ...] [LIMIT rows]

DELETE [LOW_PRIORITY] [QUICK] table_name[.*] [,table_name[.*] ...] FROM table-references [WHERE where_definition]

or

DELETE [LOW_PRIORITY] [QUICK] FROM table_name[.*], [table_name[.*] ...] USING table-references [WHERE where_definition]

สวนประกอบทสำคญในคำสงมความหมายดงน• tbl_name กำหนดชอ table ทตองการลบแถวขอมล

บทท 7การใชฐานขอมลเบองตน

Page 15: p บทที่ 7 การใช้ฐานข้อมูล ... - MWITjeab/sheet40201/PHP_DB1.pdf1. รวมเอาข อม ลท ส มพ นธ ก นไว ในฐานข

271

• WHERE กำหนดเงอนไขในการเลอกขอมลเฉพาะบาง row เทานน ทงนถาไมม WHERE จะลบขอมลทก row

• LOW PRIORITY กำหนดใหการลบแถวขอมลกระทำเมอไมมผใชอนใดทำการอานขอมลจาก table นนแลว

• QUICK จะทำใหการลบทำไดเรวขน เนองจากจะไมไปจดการกบ index ในระหวางการลบขอมล

• ORDER BY ระบลำดบแถวในการลบขอมล• LIMIT ระบจำนวน row ทตองการลบ

• รปแบบทสอง และทสาม ใชสำหรบลบขอมลออกจากหลาย table โดยจะลบเฉพาะ row ทสอดคลองกนตามเงอนไขทระบ

ตวอยางการใชคำสง DELETE

DELETE FROM movieWHERE local = ‘Korean’ORDER BY pusblish;LIMIT 1;

เปนการลบขอมลหนงทเกาทสดทมาจากประเทศเกาหลออกจากตาราง movie

คำสง SELECT

เปนคำสงสำหรบการดงขอมลจากฐานขอมลโดยเลอกขอมลตามเงอนไข เพอนำมาใชแสดงหรอประมวลผลตอใน web program มรปแบบคำสงทวไปดงนSELECT [STRAIGHT_JOIN] [SQL_SMALL_RESULT] [SQL_BIG_RESULT] [SQL_BUFFER_RESULT] [SQL_CACHE | SQL_NO_CACHE] [SQL_CALC_FOUND_ROWS] [HIGH_PRIORITY] [DISTINCT | DISTINCTROW | ALL] select_expression,... [INTO {OUTFILE | DUMPFILE} 'file_name' export_options] [FROM table_references [WHERE where_definition] [GROUP BY {unsigned_integer | col_name | formula} [ASC | DESC], ... [HAVING where_definition] [ORDER BY {unsigned_integer | col_name | formula} [ASC | DESC] ,...] [LIMIT [offset,] rows] [PROCEDURE procedure_name] [FOR UPDATE | LOCK IN SHARE MODE]]

หากจะคดเฉพาะ parameter ทใชบอยจะมรปแบบดงนSELECT [DISTINCT | DISTINCTROW | ALL] select_expression,... [FROM table_references [WHERE where_definition] [GROUP BY {unsigned_integer | col_name | formula} [ASC | DESC], ... [HAVING where_definition] [ORDER BY {unsigned_integer | col_name | formula} [ASC | DESC] ,...] [LIMIT [offset,] rows]

โดย parameter ตางๆ มความหมายดงน• DISTINCT ใชเพอกำหนดวาถามรายการขอมลซำกนจะแสดงผลลพธเพยง 1 รายการ • Select_expression คอการเลอก column ทตองการใหเปนผลลพธ สามารถ

กำหนดเปน expression ไดในรปแบบตางๆดงตวอยางตอไปนo SELECT * เลอกหมดทก column ใน table

o SELECT col1, col2, col3 เลอกเฉพาะ column ทกำหนดจาก table

WEB PROGRAMMING Using PHP. and MySQL.

Page 16: p บทที่ 7 การใช้ฐานข้อมูล ... - MWITjeab/sheet40201/PHP_DB1.pdf1. รวมเอาข อม ลท ส มพ นธ ก นไว ในฐานข

272

o SELECT t1.col1, t1.col2, t2.colA, t3.colB เลอก column จากหลาย table โดยกำหนดชอตารางไวหนาชอ column ในรปแบบtbl_name.col_name

o SELECT t1.col1 AS col_1, t1.col2 AS col_2 ใช AS เพอสรางผลลพธใหม column ตามชอใหมทกำหนด

o SELECT (t1.amnt * 0.07) AS VAT สราง manipulated column ทไดจากการประมวลผล

o SELECT COUNT(*) AS totalMember สราง column ทไดจาก aggregate function โดยสามารถใชรวมกบ GROUP BY เพอประมวลผลและใหผลเปน row ตามกลมทกำหนด

o SELECT CONCAT(str1,str2,...) AS totalMember สราง column ทไดจาก การตอ string

o Function ทสำคญทใช เกยวกบ string เชน

SUBSTRING(str,pos,len),

TRIM([[BOTH | LEADING | TRAILING] [remstr] FROM] str)

LOWER(str)

UPPER(str)

o Function ดานคณตศาสตร เชน ROUND(X,D), FLOOR, CEIL, TRUNCATE

o Date-time function เชน DATE_FORMAT(date,format)

DATE_ADD, DATE_SUB

CURDATE( ), NOW( )

o Function อนๆ

PASSWORD(str)

DES_ENCRYPT(string_to_encrypt [, (key_number | key_string) ] )

o Function สำหรบกลมขอมล (aggregate function)

COUNT(expr), COUNT(DISTINCT expr,[expr...])

AVG (expr) , MIN (expr) , MAX (expr) , SUM (expr)

o การใช function อนๆ ใน select expression ศกษารายละเอยดเพมเตมไดจาก MySQL manual หวขอ Functions for use in select and where clauses

• FROM กำหนดชอ table ทจะใช ถากำหนดหลาย table จะเปนการ join คอเชอมโยงขอมลระหวางหลายตารางขอมล และสามารถใช relational operator JOIN สามารถกำหนดไดหลายรปแบบดงน

o table_reference, table_reference

o table_reference [CROSS] JOIN table_reference

o table_reference INNER JOIN table_reference join_condition

o table_reference STRAIGHT_JOIN table_reference

o table_reference LEFT [OUTER] JOIN table_reference join_condition

o table_reference LEFT [OUTER] JOIN table_reference

o table_reference NATURAL [LEFT [OUTER]] JOIN table_reference

o table_reference LEFT OUTER JOIN table_reference ON conditional_expr }

บทท 7การใชฐานขอมลเบองตน

Page 17: p บทที่ 7 การใช้ฐานข้อมูล ... - MWITjeab/sheet40201/PHP_DB1.pdf1. รวมเอาข อม ลท ส มพ นธ ก นไว ในฐานข

273

o table_reference RIGHT [OUTER] JOIN table_reference join_condition

o table_reference RIGHT [OUTER] JOIN table_reference

o table_reference NATURAL [RIGHT [OUTER]] JOIN table_reference

ทงน table_reference คอการระบชอ table ในลกษณะ table_name [[AS] alias]

• WHERE กำหนดเงอนไขในการเลอกแสดงเฉพาะบาง row และเงอนไขสำหรบการ join table สามารถใช expression เชนเดยวกบ select expression รายละเอยดเกยวกบexpression กลาวถงใน 7.2.4

• GROUP BY กำหนดการจดกลมขอมลเพอใชกบ aggregate function ใน select expression

• HAVING กำหนดเงอนไขเพอเลอกเฉพาะกลมขอมลจากการทำ GROUP BY

• ORDER BY กำหนดการจดเรยงลำดบการแสดงผลลพธ • LIMIT offset [,row ] กำหนดใหนำจำนวนขอมลทตรงตามเงอนไข เรมตงแต row ท

offset เปนจำนวนเทากบ row มาแสดงผล ใชกบกรณการแบงการแสดงขอมลออกเปน page ตางๆ

ตวอยางการใชคำสง SELECT

SELECT CONCAT(depart.name,'(',graduated.dept,')') AS deptName, COUNT(*) AS honor1st FROM graduated,depart WHERE graduated.dept=depart.depID AND (graduated.gpa >= 3.50) GROUP BY graduated.dept ORDER BY deptName;

เปนคำสงนบจำนวนนกศกษาจากตารางนกศกษาทสำเรจการศกษาทมคะแนนผลการศกษาเฉลยสะสมตงแต 3.50 ขนไป แยกตามภาควชาตางๆ ใหเรยงตามชอภาควชา ตารางผลลพธทไดจะมจำนวน row เทากบจำนวนภาควชาทม นศ.ทตรงกบเงอนไข ประกอบดวย column deptName และ honor1st ซง deptName เปน column ทมาจาก depart.name ตามดวย department id จาก column graduated.dept แสดงในวงเลบ และ honor1st ไดจากการนบจำนวน นศ.ทตรงเงอนไขของแตละภาควชา

รายละเอยดเกยวกบ SELECT แสดงเพมเตมในบทท 8

2 5) Expression ทใชใน SELECT

ในภาษา SQL คำสง SELECT เปนคำสงทใชมากทสดสำหรบการนำขอมลออกมาใชแสดงหรอประมวลผล มรปแบบวธการคดเลอก โดยใช WHERE clause และการแสดง column ทสามารถสราง column จากการประมวลผลไดโดยใช select_expression ซงทง WHERE และ select_expression สามารถกำหนด expression ทประกอบดวย operator, operand และ function เชนเดยวกนกบภาษา programming ซงนบเปนสวนสำคญของการใชประโยชนจากฐานขอมลจงจะกลาวถงรายละเอยดดงน

เครองหมายในการดำเนนการประมวลผล แบงเปนกลมตางๆ ไดแก• Comparison operators เครองหมายเปรยบเทยบคา • Logical operators เครองหมายดำเนนการทางตรรก• Mathematic operators เครองหมายคำนวณทางคณตศาสตร• Bitwise operators เครองหมายดำเนนการแบบบต• Grouping การจดกลมการดำเนนการ

เครองหมายเปรยบเทยบคา (Comparison operators)

เครองหมายเปรยบเทยบคา เมอประมวลผลแลวใหผลเปนคา 1 (true) หรอคา 0 (false) หรอ NULL (ไมทราบคา) รายละเอยดการเปรยบเทยบคา แสดงในตารางท 7.2-1

ตารางท 7.2-1 Comparison operators

WEB PROGRAMMING Using PHP. and MySQL.

Page 18: p บทที่ 7 การใช้ฐานข้อมูล ... - MWITjeab/sheet40201/PHP_DB1.pdf1. รวมเอาข อม ลท ส มพ นธ ก นไว ในฐานข

274

เครองหมาย การเปรยบเทยบ อธบายa > b มากกวา เปรยบเทยบใหผลเปน 1 (true) หากขอมล operand a ม

คามากกวา operand ba < b นอยกวา เปรยบเทยบใหผลเปน 1 (true) หากขอมล operand a ม

คานอยกวา operand ba >= b มากกวาหรอเทากบ เปรยบเทยบใหผลเปน 1 (true) หากขอมล operand a ม

คามากกวาหรอเทากบ operand ba <= b นอยกวาหรอเทากบ เปรยบเทยบใหผลเปน 1 (true) หากขอมล operand a ม

คานอยกวาหรอเทากบ operand ba != b หรอ a <> b

ไมเทากบ เปรยบเทยบใหผลเปน 1 (true) หากขอมล operand a มคาไมเทากนกบ operand b (หมายเหต คา null เทยบเทากบ false หรอ 0 )

a = b เทากบ เปรยบเทยบใหผลเปน 1 (true) หากขอมล operand a มคาเทากนกบ operand b (หมายเหต คา null เทยบเทากบ false หรอ 0 )

a <=> b เทากบ โดยตรวจสอบคา null

เปรยบเทยบใหผลเปน 1 (true) หากขอมล operand a มคาเทากนกบ operand b โดยคา null ตางกบ false หรอ 0

a IS NULL หรอ ISNULL(a)

เปน null ตรวจสอบวา ถา operand a เปน null จะใหผลเปน true หรอ 1

a IS NOT NULL

ไมเปน null ตรวจสอบวา ถา operand a เปน null จะใหผลเปน false หรอ 0

a BETWEEN min AND max

ขอมลอยระหวางชวง ตรวจสอบวาคาขอมลของ operand a มคาอยระหวาง operand min และ max หรอไม หากอยในชวงดงกลาวจะใหผลเปน true หรอ 1

a NOT BETWEEN min AND max

ไมอยระหวางชวง ตรวจสอบวาคาขอมลของ operand a มคาอยระหวาง operand min และ max หรอไม หากอยในชวงดงกลาวจะใหผลเปน false หรอ 0

a IN (value,...) เปนคาใดคาหนงใน list ตรวจสอบคาของ operand a หากตรงกบคาใดคาหนงใน list จะใหผลเปน true หรอ 1

a NOT IN (value,...)

ไมเปนคาใดคาหนงใน list

ตรวจสอบคาของ operand a หากตรงกบคาใดคาหนงใน list จะใหผลเปน false หรอ 0

หมายเหต ใน MySQL แทนคา Boolean ดวยตวเลข โดย true แทนดวยเลข 1 สวน false แทนดวย 0เครองหมายดำเนนการทางตรรก (Logical operators)

เครองหมายดำเนนการทางตรรกไดแก NOT (!) OR (||) AND (&&) และ XOR เมอประมวลผลแลวใหผลเปนคา 1 (true) หรอคา 0 (false) หรอ NULL (ไมทราบคา) ซงโดยสวนมากแลวคา NULL เทยบเทากบ false หรอ 0 รายละเอยดการ แสดงในตารางท 7.2-4

ตารางท 7.2-4 Logical operatorsเครองหมาย การประมวลผล

NOT a หรอ ! a

ใหผลเปน 1 (true) หากขอมล operand a เปน 0 มฉะนนจะใหคา เปน 0 (false) ยกเวนของ กรณของ NOT NULL จะใหคาเปน NULL

a OR b หรอ a || b

ใหผลเปน 1 (true) หากขอมล operand a หรอ b อยางนอย 1 ตวไมเปน 0 และไมเปน NULL

a AND b หรอ a && b

กรณท operand ไมเปน NULL จะใหผลเปน 1 (true) หากขอมล operand ทง a และ b ไมเปน 0 มฉะนนจะใหคา เปน 0 (false) แตถาขอมล operand a หรอ b อยางนอย 1 ตวเปน NULL จะใหผลเปน NULL

a XOR b กรณท operand ไมเปน NULL จะใหผลเปน 1 (true) หากขอมลเพยงหนงใน operand a หรอ b ไมเปน 0 แตถาขอมล operand a หรอ b อยางนอย 1 ตวเปน NULL จะใหผลเปน NULL

เครองหมายดำเนนการแบบบต (Bitwise operators)

เครองหมายดำเนนการแบบบต Bitwise operators ไดแก OR ( | ) AND( & ) XOR ( ^ ) shift left ( << ) shift right ( >>) และ Invert (~) รายละเอยดสามารถศกษาไดจาก MySQL Manual

บทท 7การใชฐานขอมลเบองตน

Page 19: p บทที่ 7 การใช้ฐานข้อมูล ... - MWITjeab/sheet40201/PHP_DB1.pdf1. รวมเอาข อม ลท ส มพ นธ ก นไว ในฐานข

275

ฟงกชนการจดกลมการดำเนนการ Grouping

ฟงกชนทสำคญสำหรบกลมขอมล ไดแก COUNT(expr), AVG(expr), MIN(expr), MAX(expr) , และ SUM(expr) รายละเอยดการเปรยบเทยบคา แสดงในตารางท 7.2 -5

ตารางท 7.2-5 ฟงกชนการจดกลมการดำเนนการ Grouping

ฟงกชน การประมวลผลCOUNT(expr), COUNT(DISTINCT expr,[expr...])

นบจำนวนขอมลทไมใช NULL ของ expression ทระบไวเปน argument โดยถาระบคำวา DISTINCT จะนบเพมเฉพาะขอมลทแตกตางกนถาขอมลซำจะไมนบเพม แตถา COUNT(*) จะนบรวมขอมลทเปน NULL ดวย

AVG(expr) คำนวณคาเฉลยของ expression ทระบไวเปน argument

MIN(expr) ใหคาตำสดของ expression ทระบไวเปน argument โดยท argument สามารถเปน string ได

MAX(expr) ใหคาสงสดของ expression ทระบไวเปน argument โดยท argument สามารถเปน string ได

SUM(expr) คำนวณคาผลรวมของ expression ทระบไวเปน argument

STD(expr) , STDDEV(expr)

คำนวณคา standard deviation ของ expression ทระบไวเปน argument

WEB PROGRAMMING Using PHP. and MySQL.

Page 20: p บทที่ 7 การใช้ฐานข้อมูล ... - MWITjeab/sheet40201/PHP_DB1.pdf1. รวมเอาข อม ลท ส มพ นธ ก นไว ในฐานข

276

3 การใชโปรแกรม PHP ตดตอกบฐานขอมล MySQLการทำงานของเวบโปรแกรมทเกยวของกบการใชฐานขอมล จะทำงานในลกษณะ 3-tiers

architecture คอจะมการทำงานของโปรแกรมรวมกนระหวางโปรแกรมตางๆ 3 สวนทเปนอสระจากกนไดแก

1. Presentation Tier

2. Web Tier/Business Logic

3. Data Storage Tier

ในสวนแรก presentation คอการแสดงผล จะใชโปรแกรมแสดงผลกคอ Web browser ทำงานบนเครองคอมพวเตอรของผใช สวนทสอง Web tier คอสวนของ web server เปนท web program (server side) ทำงานอยบน server และ สวนท 3 Data storage tier คอสวนของการจดการกบขอมลไดแก database management system หรอ database engine หรออาจเรยก database server สวนประกอบทง 3 สวนนทำงานแยกกนอยางอสระ เมอรวมกนทำงานทำให web application ทำงานไดอยางสมบรณ สามารถทำงานอยบนเครองคอมพวเตอรเดยวกน หรออยบนคอมพวเตอรแยกจากกน (ตอเชอมกนอยบนเครอขาย LAN หรอ internet) กได

การท web program ทตดตอกบฐานขอมลจะทำงานได ใน script engine จะตองมสวนโปรแกรมทตดตอระบบฐานขอมลแตละตวได เชน หากจะตดตอกบระบบฐานขอมล Oracle ใน script engine ตองมสวนโปรแกรมทตดตอ Oracle DBMS. สำหรบภาษา PHP การตดตอฐานขอมลแตละระบบจะมชดคำสงเฉพาะของระบบนนๆ แยกกนตางหาก ซงคำสงตดตอฐานขอมลของ php มชดคำสงทรองรบระบบฐานขอมลระบบตางๆ มากมาย เชน Orcle, MySQL, DB2, Microsoft SQL Server, ODBC., mSQL ฯลฯ เปนตน ผศกษาสามารถหารายชอและรายละเอยดของระบบฐานขอมลท php สนบสนนไดจาก php manual ภายใตหวขอ What can PHP do?

ในหวขอนจะกลาวถงหลกการของการเขยนโปรแกรมเพอตดตอขอมลและคำสงตดตอระบบฐานขอมล MySQL

3 1) ลำดบการใชคำสงเกยวกบฐานขอมลลำดบขนของการใชขอมลจากระบบฐานขอมลประกอบดวยขนตอนดงนกรณของการนำขอมลออกมาใช 1 - สรางการเชอมตอจาก php engine ไปยง database engine บน DBMS server2 - เลอกฐานขอมลจาก server3 - สงคำสง query (SQL) เพอดงขอมลไปยง DBMS. รบผลลพธเขามาใน ตวแปร result set

(ขอมลทไดรบอาจประกอบดวยหลาย row/records)4 - ตรวจสอบวามขอมลตามเงอนไขทตองการใน result set หรอไมและใชคำสง loop ดง

ขอมลทละ 1 row ออกจาก result set เขามาในตวแปรทเปน array หรอ object5 - ในแตละรอบของ loop นำขอมลใน row ทไดมาใชประโยชนแสดงผลหรอประมวลผล6 - เมอออกจาก loop แลวหากตองการสง query อนสามารถสงคำสง query ใหมและดำเนน

การเชนเดยวกบขนตอนท 3 ถง 57 – หากตองการเปลยนไปเลอก database อนทอยบน database engine เดยวกน สามารถ

เรมใหมจากขนตอนท 2 เปนตนไปได โดยไมตองสรางการเชอมตอใหม แตหากตองการตดตอ database engine หรอ DBMS อนทอยบน server เดมหรอตองการตดตอกบ DBMS บน server อนๆ ใหทำการปดการเชอมตอ (close connection) แลวจง connect DBMS อนในขนตอนท 1 ใหม

8 – เมอทำงานกบฐานขอมลจบแลวใชคำสงยกเลกการใชตวแปร result set ปดการเชอมตอ (เมอ script ทำงานจบการเชอมตอกจะถกปดโดยอตโนมต)

จากขนตอนทกลาวขางตน สามารถยกตวอยางการตดตอระบบฐานขอมล MySQL ไดดง Listing 7.3-1

Listing 7.3 -1ตวอยางการตดตอระบบฐานขอมล MySQL<?php$hostname = "localhost";// DBMS Host name$dbuser = "int492"; // DBMS user name$dbpassword = "s1234"; // DBMS user’s password$dbname = "myphp"; // Database name

/* Connecting, selecting database */$link = @mysql_connect($hostname, $dbuser, $dbpassword)

บทท 7การใชฐานขอมลเบองตน

Page 21: p บทที่ 7 การใช้ฐานข้อมูล ... - MWITjeab/sheet40201/PHP_DB1.pdf1. รวมเอาข อม ลท ส มพ นธ ก นไว ในฐานข

277

or die("Could not connect : " . mysql_error());echo "Connected successfully";@mysql_select_db($dbname) or die("Could not select database");

/* Performing SQL query */$query = "SELECT * FROM user";$result = @mysql_query($query) or die("Query failed : " . mysql_error());

/* Printing results in HTML */echo "<table>\n";$first = true;while ($line = @mysql_fetch_array($result, MYSQL_ASSOC)) { if ($first) { echo "\t<tr>\n"; foreach ($line as $key => $col_value) { echo "\t\t<th>$key</th>\n"; } echo "\t</tr>\n"; $first = false; } echo "\t<tr>\n"; foreach ($line as $col_value) { echo "\t\t<td>$col_value</td>\n"; } echo "\t</tr>\n";}echo "</table>\n";

/* Free resultset */mysql_free_result($result);

/* Closing connection */mysql_close($link);?>

หมายเหต การตรวจสอบเมอเกดขอผดพลาดแลวใหทำฟงกชน die( ) ของฟงกชนเกยวกบ database ตางๆ ใหเชอมดวย operator OR ไมสามารถใช || ไดเนองจากจะทำใหผลลพธถกแปลงเปนชนด boolean แมวาจะสามารถทำฟงกชนสำเรจกตาม และใหนำหนาฟงกชน database ตางๆ ดวย @ เพอไมใหแสดงผลความผดพลาดหรอขอความเตอนจาก php engine

3 2) ฟงกชนตางๆ ทเกยวของกบ MySQL

ฟงกชนทเกยวกบ MySQL ของภาษา PHP. มประมาณ 50 ฟงกชน (รายละเอยดศกษาไดจาก php manual โดยใชหวขอคนหา MySQL ) มฟงกชนทใชงานสวนใหญทวไปดงตอไปน

การเชอมตอไปยง MySQL DBMS server

mysql_connect ( ) รปแบบคำสงresource [@]mysql_connect ( [string server [, string username [, string password [, bool new_link [, int client_flags]]]]])

โดยท• server คอชอของ server กำหนดเปน localhost หากอยใน server เดยวกบ web

server หรอกำหนดเปน host id. ทเปนหมายเลข IP. เชน 202.44.8.100 หรอเปนชอ host เชน petchkhla.myweb.com (host ชอ petchkhla ทอยใน domain myweb.com) อาจกำหนดหมายเลข port ในรป hostname:port เชน 'localhost:3306'

• username คอชอบญชผใชของระบบ database ทถกกำหนดใน MySQL (อาจกำหนดโดยการเพมชอผใชใน table user ของ MySQL database หรอใชคำสง grant ในภาษา SQL. จะตองเปน user ทถกกำหนดใหมสทธใน database หรอ table ทจะใชงานดวย

WEB PROGRAMMING Using PHP. and MySQL.

Page 22: p บทที่ 7 การใช้ฐานข้อมูล ... - MWITjeab/sheet40201/PHP_DB1.pdf1. รวมเอาข อม ลท ส มพ นธ ก นไว ในฐานข

278

• password คอรหสผานของบญชผใช หากไมมการกำหนดรหสผานกไมตองกำหนด parameter น

• new_link คอกำหนดใหสราง resource identifier ใหม โดยปกตหากใชคำสงนกบ database engine ทได connect ใน page นไวแลวจะคนเปนคา resource identifier เดมทไดเปดไวแลว แตหากตองการใหเปด database ใน DBMS เดยวกนเปนคนละ resource กนจะตองกำหนด parameter new_link เปน true

ผลลพธทไดจะเปน resource identifier ทจะนำไปใชในคำสงอนๆ แตหากไมสามารถ connect กบ DBMS ไดจะคนคา false เชนหากไมม database server นนอยไมมชอผใชหรอ password ไมถกตอง

ตวอยางการใช mysql_connect

$dbConnect = mysql_connect (‘server’,’user’,’password’ );

หรอ$dbCon = @mysql_connect(‘server’,’user’,’passwd’) or die(‘message’);

คำสงสำหรบการปดหรอยกเลกการเชอมตอกบ DBMS

คำสง mysql_close ($dbConnect) รปแบบทวไปbool mysql_close ( [resource link_identifier])

โดยท link_identifier คอตวแปร resource ทไดจากการเปดการเชอมตอ (DBMS. connection) เปน option คอไมกำหนด parameter นกได หากไมกำหนด parameter น จะทำการปดการเชอมตอทไดเปดไวลาสด

การเลอกใช database

การเลอกใช database อาจจะทำการเลอก current database ไวกอน หรออาจจะกำหนด database name ในฟงกชนทจะทำการ query กได คำสงสำหรบการเลอก current database ไดแก

mysql_select_db รปแบบทวไปดงนbool mysql_select_db ( string database_name [, resource link_identifier])

โดย database_name คอชอ database ทตองการ สวน link_identifier คอ resource ทไดจากการเปดการเชอมตอดวยคำสง mysql_connect ( ) หากไมกำหนด link_identifier จะใช resource ทเปดลาสด

การสงคำสง Query เขาไปให DBMS ทำงานมคำสงทใชสง SQL command ไปยง MySQL DBMS. 2 แบบไดแก การ query โดยใช

current database และการ query โดยกำหนด database name

mysql_query ( ) สำหรบการใช current databasemysql_db_query ( ) สำหรบการกำหนด database name ในการ query

รปแบบทวไปของคำสงทงสองไดแกresource mysql_query ( string query [, resource link_identifier])resource mysql_db_query ( string database, string query [, resource link_identifier])

โดย database คอการกำหนดชอ database, query คอคำสง SQL ทสงไปใหแก DBMS. สวน link_identifier คอ resource ทไดจากการเปดการเชอมตอดวยคำสง mysql_connect ( ) หากไมกำหนด link_identifier จะใช resource ทเปดลาสด (โดยปกตจะไมกำหนด parameter นแตจะใชเมอเปดหลาย connection )

ผลจากการ query จะได resource ทเรยกวา result set คอได set ของขอมล row ตางๆ ทไดจากการ query ทจะนำออกมาใชตอไป

คำสงดำเนนการกบ Database

มคำสงพเศษ 2 คำสงทดำเนนการกบ database โดยเฉพาะ ไดแก• mysql_create_db ( ) สราง database ใหม• mysql_drop_db ( ) ลบ database ออก

บทท 7การใชฐานขอมลเบองตน

Page 23: p บทที่ 7 การใช้ฐานข้อมูล ... - MWITjeab/sheet40201/PHP_DB1.pdf1. รวมเอาข อม ลท ส มพ นธ ก นไว ในฐานข

279

คำสงทงสองมรปแบบดงนbool mysql_create_db ( string database_name [, resource link_identifier])bool mysql_drop_db ( string database_name [, resource link_identifier])

จะใหผลเปน Boolean เพอแสดงวาสามารถกระทำคำสงสำเรจหรอไมการนำผลจาก query ออกมาใชผลจากคำสง query ทไดรบเปน result set สามารถนำขอมลออกมาใชประโยชนได โดย

ฟงกชนทเกยวกบการดงขอมลจากแตละ row หรอฟงกชนทใหคาจำนวน row ของผลลพธ และยงมฟงกชนของการเลอนตวชตำแหนง row ใน result set ดวย คำสงตางๆ มดงน

กลมคำสงนำ row ตอไปออกมาจาก result set

• mysql_fetch_array ( ) อานขอมล 1 row ใสลงในตวแปร array ทระบชนด index ไดวาจะเปน enumerate index หรอ associate index ขอมลแตละ column จะอยในแตละ element ของ array

• mysql_fetch_assoc ( ) อานขอมล 1 row ใสลงในตวแปร associate array ทมชอ column เปน key ของ array เชน หากผลของ query ม column จำนวน 3 column ไดแก memberAcct, fullname, passwd และใชคำสง $row = mysql_fetch_assoc ($resultset);ในตวแปร $row จะม element ตางๆ คอ $row[‘memberAcct’], $row[‘fullname’] และ $row[‘passwd’] เปนตน

• mysql_fetch_row ( ) อานขอมล 1 row ใสลงในตวแปร array ทใชหมายเลข index โดยเรยงลำดบตาม column ทปรากฏในคำสง SQL เชน หากผลของ query ม column จำนวน 3 column ไดแก memberAcct, fullname, passwd และใชคำสง $row = mysql_fetch_row ($resultset);ในตวแปร $row จะม element ตางๆ คอ $row[0] เกบขอมลจาก column memberAcct , $row[1] เกบขอมลจาก fullname และ $row[2] เกบขอมลจาก column passwd เปนตน

• mysql_fetch_object ( ) อานขอมล 1 row ใสลงใน Object โดยจะไดชอ column เปน object member สามารถอางถง field หรอ column ตางๆ โดยใช $var->col_name เชน $row->memberAcct, $row->fullname, $row->passwd เปนตน

กลมฟงกชนใหจำนวน row ทไดรบจากการ query

• mysql_affected_rows ใหคาจำนวน row ทกระทบหรอเปนผลลพธจาก operation ลาสด โดยคำสง SQL : INSERT, UPDATE หรอ DELETE

• mysql_num_rows ใหคาจำนวน row ใน result set ซงไดจากคำสง SQL : SELECT

ฟงกชนเลอนตวชตำแหนง row ใน result set

• mysql_data_seek ( )

รปแบบทวไปของคำสงตางๆ มดงนarray mysql_fetch_array ( resource result [, int result_type])array mysql_fetch_assoc ( resource result)array mysql_fetch_row ( resource result)object mysql_fetch_object ( resource result)

int mysql_affected_rows ( [resource link_identifier])int mysql_num_rows ( resource result)

bool mysql_data_seek ( resource result_identifier, int row_number)

WEB PROGRAMMING Using PHP. and MySQL.

Page 24: p บทที่ 7 การใช้ฐานข้อมูล ... - MWITjeab/sheet40201/PHP_DB1.pdf1. รวมเอาข อม ลท ส มพ นธ ก นไว ในฐานข

280

ฟงกชนแสดงขอผดพลาดผลจากการ query หรอใชฟงกชนตางๆ เกยวกบ MySQL หากดำเนนการไมสำเรจนอกจากจะ

ไดรบผลเปน false แลวยงมการแจงขอผดพลาดจาก DBMS ในรปของ Error number หรอ Error message โดยสามารถเรยกใชฟงกชนเพอดงหมายเลขหรอขอความแสดง error ออกมาได โดยม 2 ฟงกชนไดแก

• mysql_errno -ใหหมายเลข error message ทเกดจาก operation ลาสด• mysql_error -ใหขอความ error message ทเกดจาก operation ลาสด

รปแบบของคำสงไดแกint mysql_errno ( [resource link_identifier])string mysql_error ( [resource link_identifier])

หากไมมการเกด error ผลลพธจะไดหมายเลข 0 หรอขอความ empty string “”

ฟงกชนยกเลกตวแปร result set

เมอจบการดำเนนการเกยวกบการใชฐานขอมลแลว นอกจากจะปดการตดตอกบ Database server แลวยงควรยกเลกตวแปรทเกบผลลพธจากการ query คอ result set ดวย เนองจากเปนตวแปร resource ทใชเนอทในการเกบผลลพธขอมลทกๆ row ทไดจากการ query ฟงกชนสำหรบการยกเลกตวแปร result set ไดแก

mysql_free_result ( ) มรปแบบทวไปคอbool mysql_free_result ( resource result)

ผลลพธเปน Boolean แสดงวาสามารถยกเลก result set ไดสำเรจหรอไม การยกเลก result set ไมสำเรจ อาจเนองมาจาก expression หรอตวแปรทสงไปเปน parameter นนไมไดเปน result set หรอ operation ทใหผลลพธ result set กอนหนานนทำงานไมสำเรจ ฯลฯ เปนตน

บทท 7การใชฐานขอมลเบองตน

Page 25: p บทที่ 7 การใช้ฐานข้อมูล ... - MWITjeab/sheet40201/PHP_DB1.pdf1. รวมเอาข อม ลท ส มพ นธ ก นไว ในฐานข

281

4 การกำหนดบญชผใชในระบบฐานขอมลในการใช web program ตดตอกบฐานขอมลจะตองมการกำหนดชอบญชผใชฐานขอมล

พรอมกบรหสผาน โดยกำหนดดวยคำสง SQL หรอใช utility ของโปรแกรมระบบฐานขอมล ซงการกำหนดชอผใชสำหรบใชกบ web program มกจะเปนชอผใชเดยวใชกบทก Application และใชกบผใชทกคนผาน web program หรอในบาง application ทมลกษณะเปน intranet อาจจะกำหนดชอผใชงานโปรแกรม web application เปนชอเดยวกบ database account กไดโดยผดแลระบบฐานขอมล DBA ทำหนาทจดการเกยวกบขอมลของผใช

การแสดงตน Authentication ในระบบสารสนเทศถอเปนกลไกทสำคญในดานความมนคง-ความปลอดภยของระบบสารสนเทศ ดงนนการกำหนดชอบญชในระบบฐานขอมลเพอใชกบ web application จงตองมการกำหนดอยางเหมาะสม และควรกำหนดบญชแยกกนระหวางแตละ Application ทใชมมมองในฐานขอมลทตางกน เพอใหสามารถกำหนดสทธในการใชขอมลทจำกดอยางเหมะสมกบงานนนๆ เชน ระบบ Application ดานดแล stock หรอการจดสง อาจจะกำหนดชอบญชหนง ในขณะท Application สำหรบฝายสมาชกหรอฝายขายอาจกำหนดชอบญชอกชอหนง เปนตน

คำสงทเกยวของกบการกำหนดชอบญชและสทธการใชฐานขอมลในภาษา SQL มคำสงทสำคญ 2 คำสง ไดแก

• คำสงสำหรบสรางชอบญชผใชใหม กำหนดสทธการใชฐานขอมลและเพมสทธการใชฐานขอมล ไดแกคำสง GRANT

• คำสงสำหรบถอนหรอยกเลกสทธการใชฐานขอมลในแตละประเภทของบญชผใช ไดแกคำสง REVOKE

รปแบบทวไปของคำสง GRANT คอGRANT priv_type [(column_list)] [, priv_type [(column_list)] ...] ON {tbl_name | * | *.* | db_name.*} TO user_name [IDENTIFIED BY [PASSWORD] 'password'] [, user_name [IDENTIFIED BY 'password'] ...]

โดยท• priv_type คอสทธทจะกำหนดใหแกชอบญชน มรายการทสามารถกำหนดไดแสดง

ในตารางท 7.4-1 column_list คอ รายชอคอลมน

• ON tbl_name, db_name กำหนดชอตาราง หรอชอ database ทตองการกำหนดสทธ

o *.* ใชเพอกำหนดสทธทง database server ทกๆ database (global privilege)

o db_name.* กำหนดสทธในระดบ database (database privilege)

o db_name.tbl_name กำหนดสทธเฉพาะตารางทระบ (table privilege) โดยสามารถใช wildcard % หรอ _ ในการกำหนดชอ table ได (% หมายถง อกขระใดๆ 1 หรอหลายๆ ตว สวน _ หมายถงอกขระใดๆ 1 อกขระ)

o หากตองการกำหนดสทธในระดบ column (column privilege) ใหกำหนดใน column_list หลง priv_type

• TO username IDENTIFIED BY password กำหนดชอผใชและรหสผาน หากเปนผใชเดมไมจำเปนตองกำหนด password ขอความ password ทกำหนดดวยคำสง GRANT นจะถกเขารหสแบบทางเดยว (one way encryption) คอไมสามารถถอดรหสกลบมาเปนขอความเดม ใหโดยอตโนมต

หมายเหต คำสง GRANT ยงมการกำหนด parameter อนๆ ทเปน option อก ซงสามารถศกษาเพมเตมไดจาก MySQL manual

ตารางท 7.4-1 ตารางกำหนด priv_type

priv_type ความหมายALL [PRIVILEGES] กำหนดใหมสทธทกอยางยกเวน WITH GRANT OPTION

ALTER อนญาตใหใชคำสง ALTER TABLE

CREATE อนญาตใหใชคำสง CREATE TABLE

WEB PROGRAMMING Using PHP. and MySQL.

Page 26: p บทที่ 7 การใช้ฐานข้อมูล ... - MWITjeab/sheet40201/PHP_DB1.pdf1. รวมเอาข อม ลท ส มพ นธ ก นไว ในฐานข

282

priv_type ความหมายCREATE TEMPORARY TABLES

อนญาตใหใชคำสง CREATE TEMPORARY TABLE

DELETE อนญาตใหใชคำสง DELETE

DROP อนญาตใหใชคำสง DROP TABLE.

EXECUTE อนญาตใหใช stored procedures (สำหรบ MySQL 5.0)

FILE อนญาตใหใชคำสง SELECT ... INTO OUTFILE และ LOAD DATA INFILE.

INDEX อนญาตใหใชคำสง CREATE INDEX and DROP INDEX

INSERT อนญาตใหใชคำสง INSERT

LOCK TABLES อนญาตใหใชคำสง LOCK TABLES กบ tables ทมสทธ SELECT

PROCESS อนญาตใหใชคำสง SHOW FULL PROCESSLIST

RELOAD อนญาตใหใชคำสง FLUSH

SELECT อนญาตใหใชคำสง SELECT

SHOW DATABASES

แสดงฐานขอมลทงหมดได

SHUTDOWN อนญาตใหใชคำสง mysqladmin shutdown

SUPER

อนญาตใหสามารถ connect เขามาไดเพมแมวาจำนวน connection จะเกน max_connections ทกำหนดไวแลวกตามและอนญาตใหใชคำสงเกยวกบ superuser ไดแก CHANGE MASTER, KILL thread, mysqladmin debug, PURGE MASTER LOGS และ SET GLOBAL

UPDATE อนญาตใหใชคำสง UPDATE

รปแบบทวไปของคำสง REVOKE เปนดงนREVOKE priv_type [(column_list)] [, priv_type [(column_list)] ...] ON {tbl_name | * | *.* | db_name.*} FROM user_name [, user_name ...]

คา parameter ทกำหนดการถอนหรอยกเลกสทธ ใชกำหนดเชนเดยวกบคำสง GRANT

ตวอยางของการใชคำสง GRANT

GRANT ALL ON ‘myphp.*’ TO ‘int492’ IDENTIFIED BY ‘s1234’

เปนการสรางบญชผใชชอ int492 โดยมรหสผาน s1234 ใหมสทธในการใชงาน database ชอ myphp (ทกๆ table ) โดยกำหนดใหมสทธทกอยางคอสามารถทำไดทกคำสงกบทก table ใน database น

ตวอยางคำสง revoke

REVOKE ALL ON ‘myphp.*’ FROM ‘int492’

ถอนการใหสทธทกอยางสำหรบ database myphp จากบญชผใช int492

บทท 7การใชฐานขอมลเบองตน

Page 27: p บทที่ 7 การใช้ฐานข้อมูล ... - MWITjeab/sheet40201/PHP_DB1.pdf1. รวมเอาข อม ลท ส มพ นธ ก นไว ในฐานข

283

5 สรปทายบทบทท 7 นไดกลาวถงระบบฐานขอมลและการนำมาใชรวมกบ web program เพอสรางเวบทม

เนอหาเปลยนแปลงได มการประมวลผลเกยวกบขอมลการเลอกรายการการคนหา ฯลฯ โดยไดกลาวถง 3 เรองหลกในบทนไดแก ความรเบองตนเกยวกบฐานขอมล การใชคำสง SQL และการเขยน web program เพอใชงานฐานขอมล กอนทจะนำระบบฐานขอมลไปแสดงการประยกตใชในบทท 8 และในบทท 9 ตอเนองอก 2 บท

ในสวนของความรเกยวกบระบบฐานขอมลเบองตน ไดกลาวถงประโยชนของการนำระบบฐานขอมลมาใชกบงานเวบ คณสมบตทเปนหลกสำคญของระบบฐานขอมล ไดแก การรวมขอมลของงานทสมพนธกนไว (integrate) การใชขอมลรวม (sharable) ทำใหขอมลทมความสอดคลองสมพนธกน (consistence) โดยมระบบความมนคงปลอดภยขอมล (security) ทเชอถอได และมขอมลใหใชไดตลอดเวลา (availability)

ไดกลาวถงสวนประกอบของระบบฐานขอมลไดแก ฐานขอมล ระบบบรหารฐานขอมล โปรแกรมอำนวยความสะดวก สวนตดตอโปรแกรมประยกต โปรแกรมประยกตทใชฐานขอมล ระบบคอมพวเตอรและเครอขาย ผบรหารฐานขอมล ผพฒนาโปรแกรมประยกตและผใชโปรแกรมประยกต

ชนดของฐานขอมลทแบงออกเปน hierarchical, network, relational และ object-oriented ซงชนดทนยมใชในปจจบนคอ relational หรอระบบฐานขอมลสมพนธ และ object-oriented หรอฐานขอมลเชงวตถ ซงระบบฐานขอมลทจะยกตวอยางในตำราเลมนคอระบบฐานขอมลสมพนธ

ระบบฐานขอมลสมพนธในปจจบนมการกำหนดรปแบบของภาษากลางทใชสำหรบการเขาถงขอมล ถกกำหนดโดยหนวยงานมาตรฐาน Opern Software Foundation หรอ OSF. ไดแกภาษา SQL. หรอชอเตม Structure Query Language ทสามารถใชสงคำสงจากโปรแกรมภาษาตางๆ ไปยงแมขายฐานขอมลรวมทงการใชกบ web program ซงคำสงทใชม 2 ประเภทใหญไดแก คำสงสำหรบกำหนดโครงสรางขอมล (Data Definition Language-DDL. ) และคำสงทดำเนนการกบขอมล (Data Manipulation Language-DML.)

คำสง DDL. ในภาษา SQL. ไดแก CREATE DATABASE, DROP DATABASE, CREATE TABLE, DROP TABLE, ALTER TABLE, RENAME TABLE, CREATE INDEX และ DROP INDEX สวนคำสงในกลม DML. ไดแก USE, INSERT INTO, UPDATE, DELETE และ SELECT ซงในเนอหาไดกลาวถงรายละเอยดรปแบบคำสงตางๆ ขางตน พรอมทงตวอยางการใชคำสง

นอกจากคำสงตางๆ แลวยงไดกลาวถงชนดของขอมลทสามารถนำมากำหนดชนดของ column ใน table ตางๆ ซงไดแก ขอมลตวเลข (Numeric) ไดแกขอมลชนด NUMERIC, DECIMAL, INTEGER, SMALLINT, FLOAT, REAL, และ DOUBLE ขอมลวนเวลา (Date and Time) ไดแกขอมลชนด DATETIME, DATE, TIMESTAMP, TIME, และ YEAR ขอมลขอความ (String, characters) ไดแกขอมลชนด CHAR, VARCHAR, TEXT, ENUM, และ SET สำหรบขอมลทใชเกบขอมลใดๆ ทมขนาดใหญ ไดแก ขอมลชนด BLOB, TINYBLOB, MEDIUMBLOB และ LONGBLOB โดยไดแสดงรายละเอยด ชวงคาขอมลทเกบไดของแตละชนด

การใชคำสง SQL มการกำหนด expression เชนเดยวกบภาษาโปรแกรมโดยทวไป คอจะประกอบดวย operator, operand, function ซงในสวน operand ไดกลาวถง operand กลมตางๆ ไดแก comparison, logical, mathematic, bitwise และ grouping

ในสวนของการเขยน web program ไดกลาวถงลำดบการใชคำสงเพอตดตอใชงานระบบฐานขอมลเพอนำขอมลออกมาใช โดยมลำดบไดแก การเชอมตอระหวาง web server ไปยง database server การเลอกใชฐานขอมลใน database server การสงคำสง query การตรวจสอบผลลพธ การวนรอบดงผลลพธทละ row และนำขอมลทไดจาก row นนมาดำเนนการ การยกเลกตวแปรทเกบผลลพธ และการปดการเชอมตอกบระบบฐานขอมล โดยไดยกตวอยางโปรแกรมแบบงายทนำขอมลจากฐานขอมลออกมาแสดงผล

ในภาษา PHP. มฟงกชนทเกยวของกบการใชระบบฐานขอมลโดยไดแยกฟงกชนออกตามระบบฐานขอมลทใช เชน MySQL., Oracle, SQL Server, ฯลฯ เปนตน ซงตำรานไดกลาวถงเฉพาะฟงกชนทเกยวกบระบบฐานขอมล MySQL เทานน ซงแบงกลมของฟงกชนออกเปน กลมการเชอมตอกบ Database server และการเลอกฐานขอมล กลมดำเนนการกบฐานขอมล กลมการสงคำสง query ไปยง DBMS. กลมการนำขอมลจากการ query ออกมาใช และการชตำแหนง row ของผลลพธ การแสดงขอผดพลาด

หวขอสดทายไดกลาวถงการกำหนดผใชระบบฐานขอมลและสทธของผใชฐานขอมล ความสำคญในการกำหนดชอผใชเพอนำไปใชใน web program สำหรบกำหนดวธการเขาถงขอมลในระบบฐานขอมลของ web program โดยมคำสงทเกยวของไดแก GRANT เปนคำสงกำหนดผใช กำหนด

WEB PROGRAMMING Using PHP. and MySQL.

Page 28: p บทที่ 7 การใช้ฐานข้อมูล ... - MWITjeab/sheet40201/PHP_DB1.pdf1. รวมเอาข อม ลท ส มพ นธ ก นไว ในฐานข

284

สทธใหแกผใช เพมสทธในการใช และคำสง REVOKE เปนคำสงถอดถอนสทธการใชจากสทธทไดกำหนดให

เนอหาโดยรวมในบทนไดกลาวถงพนฐานของฐานขอมลและการใชประโยชนจากระบบฐานขอมลใน web program ซงในบทตอไปคอบทท 8 จะไดยกตวอยางการดงขอมลจากฐานขอมลออกมาแสดงในรปแบบตางๆ และในบทท 9 จะไดกลาวถงการเพม เปลยนแปลง และลบขอมลจากฐานขอมล โดยใช web program ตอไป

บทท 7การใชฐานขอมลเบองตน

Page 29: p บทที่ 7 การใช้ฐานข้อมูล ... - MWITjeab/sheet40201/PHP_DB1.pdf1. รวมเอาข อม ลท ส มพ นธ ก นไว ในฐานข

285

6 แบบฝกหดทายบท1. ในการเพมขอมล row ใหมในตารางขอมล จะตองใชคำสง MySQL คำสงใด

2. ในการแกไขเปลยนแปลงโครงสรางตารางขอมลในฐานขอมล จะตองใชคำสง MySQL คำสงใด

3. ในการเปลยนคาขอมลตารางขอมลในฐานขอมล จะตองใชคำสง MySQL คำสงใด

4. ในการกำหนดเงอนไขเพอเลอกใหแสดงผลเฉพาะบางแถวขอมลของการ Query จะตองใชประโยคใด

5. การเปลยนชอตารางขอมลในฐานขอมลสามารถทำไดโดยคำสง MySQL คำสงใด

6. KEYWORD / PARAMETER ตอไปนมความหมายอยางไร และใชในประโยคคำสงใดa. DEFAULT

b. DISTINCT

c. GROUP BY

d. *

e. DESC

f. JOIN

7. ขอใดบางไมจดเปน aggregate function

a. COUNT

b. UPPER

c. TRUNCATE

d. AVG

e. NOW

8. Aggregate Function สงผลอยางไรตอคา NULL

9. จงระบชนดของขอมล ทใชใน MySQL สำหรบขอมลตอไปนa. ขอมลขอความ ซงใชพนทจดเกบตามจำนวนอกขระจรง มความยาวไดถง 255

อกขระb. ขอมลวนทc. ขอมลเลขจำนวนเตม มคาในชวง 0-255

d. ขอมลขนาดใหญ เชนรปภาพ หรอ ไฟลเอกสาร มขนาดสงสดไดถง 64KB - 1

e. ขอมลเลขทศนยม10. จงระบชนดของขอมล และอธบายความหมาย ของขอมลซงแสดงผลเปน 2005-10-12

11:55:30

11. จงเขยนคำสง MySQL เพอใชสรางตารางขอมล เพอเกบขอมลเกยวกบการใหสมาชกเชาหนงสอ ประกอบดวย 6 column สำหรบขอมลรหสสมาชก รหสหนงสอ วนทเชา ระยะเวลาทใหเชา วนทคน คาเชา โดยกำหนดให ใช รหสสมาชก รหสหนงสอ และ วนทเชา เปนคยหลก รายละเอยดของ column ตางๆ แสดงไดดงน

รายละเอยดของ column ตางๆ ของตาราง “การใหสมาชกเชาหนงสอ” คำอธบาย column ชนดขอมล ความยาว คณสมบตอนๆรหสสมาชก เลขจำนวนเตม 5 หลก มเฉพาะคาบวก ตองมคาไมเปน NULL มคาเรมตน

เปน '0'รหสหนงสอ เลขจำนวนเตม 6 หลก มเฉพาะคาบวก ตองมคาไมเปน NULL มคาเรมตน

เปน '0'วนทเชา วนท ตองมคาไมเปน NULL มคาเรมตนเปน

‘0000-00-00’ระยะเวลาทใหเชา เลขจำนวนเตม 2 หลก มเฉพาะคาบวก ตองมคาไมเปน NULL มคาเรมตน

เปน '7'

WEB PROGRAMMING Using PHP. and MySQL.

Page 30: p บทที่ 7 การใช้ฐานข้อมูล ... - MWITjeab/sheet40201/PHP_DB1.pdf1. รวมเอาข อม ลท ส มพ นธ ก นไว ในฐานข

286

คำอธบาย column ชนดขอมล ความยาว คณสมบตอนๆวนทคน วนท มคาเรมตน เปน NULL

คาเชา เลขจำนวนเตม 3 หลก มเฉพาะคาบวก

12. จงเขยนคำสง MySQLเพอเพมขอมล การเชาหนงสอรายการใหม 1 รายการ ลงในตารางทสรางในขอท 11 ดงน

รหสสมาชก รหสหนงสอ วนทเชา ระยะเวลาท

ใหเชา วนทคน คาเชา

50958 790605 12 October 2005 5 วน 17 October 2005 150

13. จงเขยนคำสง MySQL เพอลบขอมลการเชาหนงสอ โดยลบเฉพาะรายการเชาทใหเชาในชวงป ค.ศ. 2002

14. จงระบถงรปแบบ และยกตวอยางการใชงาน MySQL Function ทใชในการa. เชอมตอไปยง MySQL DBMS Server

b. สง SQL command ไปยง MySQL DBMS โดยระบชอ Database

15. จงอธบายการทำงาน สวนของ code ตอไปน

$link = @mysql_connect($hostname, $dbuser, $dbpassword) or die("Could not connect : " . mysql_error());echo "Connected successfully";@mysql_select_db($dbname) or die("Could not select database");

$query = "SELECT * FROM BookRental";$result = @mysql_query($query) or die("Query failed : " . mysql_error());

…mysql_free_result($result);mysql_close($link);

บทท 7การใชฐานขอมลเบองตน