Mysql

  • May 2020
  • PDF

This document was uploaded by user and they confirmed that they have the permission to share it. If you are author or own the copyright of this book, please report to us by using this DMCA report form. Report DMCA


Overview

Download & View Mysql as PDF for free.

More details

  • Words: 4,837
  • Pages: 67
MySQL MySQL เปน SQL ( Structured Queries Language ) database server ซึ่ง SQL เปน database language ที่นยิ มมากภาษาหนึ่ง เปน database server ขนาดเล็ก ซึ่งเหมาะกับ applications ที่มีขนาดเล็ก และ ปานกลาง อีกทั้งยังสนับสนุน standard SQL (ANSI) MySQL ถูกเขียนขึ้นมาใชไดในหลาย platform ของ คอมพิวเตอร ทั้ง Unix และ Windows ในโลก MySQL เปนการสราง client/server ที่ประกอบดวย server daemon ‘mysqld’ และ client programs/libraries ที่แตกตางกัน ความสามารถที่สําคัญของ MySQL คือ ความเร็ว และ ความทนทาน (robustness ) MySQL ถูกสรางเปนกลุมของ routine ที่ใชสําหรับตอบสนองการ ใชงาน ซึ่งในปจจุบัน MySQL ยังคงทําการพัฒนาอยูอยางตอเนื่อง คุณสามารถดูรายละเอียดเพิ่มเติมของ MySQL ไดจาก web site หลักของ MySQL http://www.mysql.com การติดตั้ง MySQL ในปจจุบันนัน้ ทําไดงายมาก โดยเฉพาะหากคุณใช Mandrake 7 เมื่อคุณ install mandrake 7 MySQL จะถูกติดตั้งมาให เรียบรอยแลว หากตองการติดตั้ง MySQL binary version ใหพิมพคําสั่ง ดังนี้ shell> gunzip < mysql-VERSION-OS.tar.gz | tar xvf shell> ln -s mysql-VERSION-OS mysql shell> cd mysql shell> scripts/mysql_install_db shell> bin/safe_mysqld & หากตองการติดตั้ง MySQL แบบ RPM ตองใช file ดังนี้ • MySQL-VERSION.i386.rpm สําหรับโปรแกรม MySQL server. • MySQL-client-VERSION.i386.rpm สําหรับโปรแกรม MySQL client วิธีการติดตั้งโปรแกรม ใหพมิ พดังนี้ shell> rpm -i MySQL-VERSION.i386.rpm MySQL-client-VERSION.i386.rpm หากตองการติดตั้งเพียงแคโปรแกรม client ใหพิมพ shell> rpm -i MySQL-client-VERSION.i386.rpm

2 1. ระบบการจัดการกับสิทธิการเขาถึงขอมูล ความรูพื้นฐานเกี่ยวกับ user-name และ รหัสผาน ใน MySQL • User-name ใน MySQL ไมใช user-name ที่ใชในระบบ UNIX แตโดยปกติเมื่อมีการ connect ไปยัง MySQL server แลว user-name บน UNIX จะถูกใชเปนคา user-name เริ่มตน โดยผูใชสามารถระบุ user-name ของ MySQL โดยใช option –u username ได User-name ใน MySQL มีความยาวได สูงสุด 16 ตัวอักษร • รหัสผานของ user ใน MySQL ไมใชรหัสผานของ user ที่ใชในระบบ UNIX ความรูพื้นฐานเกี่ยวกับการ connect MySQL server MySQL client สามารถ connect ไปยัง MySQL server โดยใชคําสั่งดังนี้ Shell> mysql [-h hostname] [-u username] [-pyourpassword] Shell> mysql [--host=hostname] [--user=username] [--password=yourpassword] โดยคามาตรฐานสําหรับ client มีดังนี้ หากไมมีการระบุ option –h hostname มาตรฐานจะเปน localhost หากไมมีการระบุ option –u username มาตรฐานจะเปน UNIX user-name การใช option –p โดยไมระบุ password MySQL client จะใหผูใชปอน password ดังนี้ Shell> mysql –u username –p Enter password: ********* ในระบบ UNIX ผูใชสามารถระบุคาเริ่มตนในการ connect MySQL server ไดโดยระบุภายในไฟล .my.cnf ใน home directory เชน [client] host=hostname user=username password=yourpassword เมื่อมีการระบุ password ในไฟลดังกลาว ควรกําหนดสิทธิในการเขาถึงไฟลใหเปน 400 หรือ 600

3 ความรูพื้นฐานเกี่ยวกับ Privileges system หนาที่หลักของ privileges system คือการตรวจสอบสิทธิของ user ในการ connect MySQL server, การใช query พื้นฐานเชน select, insert, update และ delete นอกจากนั้น privileges system ยังใชในการ จัดการสิทธิของ anonymous user, การเพิ่มสิทธิในการใช function พิเศษ เชน LOAD DATA INFILE และ การบริหารระบบ MySQL ความรูพื้นฐานเกี่ยวกับ Privileges table Privileges table ประกอบไปดวย 3 table หลักๆ คือ (1) host table ใชในการกําหนดสิทธิวา host ใดมีสิทธิทํ าอะไรกับ databaseใดบาง โดยมี field ดังนี้ • Host – สามารถ connect จาก client ใดไดบาง • Db – database ใดที่สามารถใชงานได • Select_priv – สามารถใช query SELECT ไดหรือไม (Y/N) • Insert_priv – สามารถใช query INSERT ไดหรือไม (Y/N) • Update_priv – สามารถใช query UPDATE ไดหรือไม (Y/N) • Delete_priv – สามารถใช query DELETE ไดหรือไม (Y/N) • Create_priv – สามารถใช query CREATE ไดหรือไม (Y/N) • Drop_priv – สามารถใช query DROP ไดหรือไม (Y/N) เชน client host ชื่อ cpe, database ที่ตองการใชงานชื่อ student จะใชคําสั่งดังนี้เพื่อให client จากcpe สามารถใชงาน student ได

โดยรูปแบบ field host ที่ใชไดคือ localhost, hostname, เลข IP, ตัวอักษรที่ใช wildcard เชน cp% หมายถึงชื่อ host ที่ขึ้นตนดวย cp เปนตน

4 (2) user table ใชในการกําหนดสิทธิวา user ใด สามารถใชงาน client ไดจาก host ใด และสามารถ จะทําอะไรไดบาง โดยมี field ดังนี้ Host – สามารถ connect จาก client ใดไดบาง User – username ใดสามารถ connect ได Select_priv – สามารถใช query SELECT ไดหรือไม (Y/N) Insert_priv – สามารถใช query INSERT ไดหรือไม (Y/N) Update_priv – สามารถใช query UPDATE ไดหรือไม (Y/N) Delete_priv – สามารถใช query DELETE ไดหรือไม (Y/N) Create_priv – สามารถใช query CREATE ไดหรือไม (Y/N) Drop_priv – สามารถใช query DROP ไดหรือไม (Y/N) Reload_priv – สามารถใช query RELOAD ไดหรือไม (Y/N) Shutdown_priv – สามารถสั่ง shutdown MySQL server ไดหรือไม (Y/N) Process_priv – สามารถสั่ง list คําสั่งที่กําลังประมวลผลบน server ไดหรือไม (Y/N) File_priv – user สามารถเขียนไฟลลงบน server ไดหรือไม (Y/N) (3) db table ใชในการกําหนดสิทธิวา database ใด สามารถใชงานโดย user ใด จาก client ใด และ สามารถจะทําอะไรไดบาง โดยมี field ดังนี้ • Host – สามารถ connect จาก client ใดไดบาง • Db – database ใดที่สามารถใชงานได • User – username ใดสามารถ connect ได • Select_priv – สามารถใช query SELECT ไดหรือไม (Y/N) • Insert_priv – สามารถใช query INSERT ไดหรือไม (Y/N) • Update_priv – สามารถใช query UPDATE ไดหรือไม (Y/N) • Delete_priv – สามารถใช query DELETE ไดหรือไม (Y/N) • Create_priv – สามารถใช query CREATE ไดหรือไม (Y/N) • Drop_priv – สามารถใช query DROP ไดหรือไม (Y/N) ระบบรักษาความปลอดภัยทัว่ ไป ระบบรักษาความปลอดภัยใน MySQL จะสามารถกําหนด หรือปรับเปลี่ยน ไดจาก Access Control Lists (ACL-s), SSL แตสิ่งที่สําคัญที่สุดก็คือการใชงาน MySQL อยางปลอดภัย

5 หลักการการใชงาน MySQL ใหปลอดภัย (1) ทําความเขาใจกับ ACL-s การ GRANT หรือ REVOKE ควรทําโดยระมัดระวัง ไมควร GRANT สิทธิใด ๆ ใหแกผูใชโดยไมจําเปน ควรตั้งรหัสผานสําหรับการเขาสูระบบโดย account root เสมอ การตรวจสอบสิทธิตาง ๆ ของผูใชสามารถทําไดโดยใชคําสั่ง SHOW GRANTS (2) การเก็บรหัสผานควรมีการเขารหัสเสมอ ทําไดโดยใช MD5( ) หรือ hashing function (3) รหัสผานไมควรมีคําศัพทที่มีอยูในพจนานุกรมภาษาอังกฤษ เชน xfish98 (4) MySQL server ควรทํางานอยูหลังระบบ firewall โดยปองกัน port 3306 ของ MySQL ใหมี การเขาถึงจาก client เทาที่จําเปน (5) การพัฒนาโปรแกรมประยุกตซึ่งติดตอกับ MySQL ควรมีการตรวจสอบความถูกตองเสมอ การตรวจสอบที่จําเปนสํ าหรับแตละประเภทของโปรแกรมประยุกตมีดังนี้ (5.1) โปรแกรมประยุกตซึ่งทํางานผาน www - ทดสอบการปอนคา %22 (“), %27(‘) - ทดสอบการปอนคาที่เปนตัวอักษร, space, สัญลักษณตาง ๆ ลงใน field ที่เปนตัวเลข - ทดสอบขนาดของ data กอนสงไปประมวลผลยัง MySQL server (5.2) โปรแกรมประยุกตซึ่งมีการใชงาน PHP3 - ตรวจสอบการใช function addslashes() (5.3) โปรแกรมประยุกตซึ่งมีการใชงาน MySQL C API - ตรวจสอบการเรียกใช API mysql_escape() (5.4) โปรแกรมประยุกตซึ่งมีการใชงาน MySQL++ - ตรวจสอบการใช escape และ quote ในการ query (6) การสงขอมูลผานระบบเน็ตเวิรกควรมีการเขารหัสโดยใช SSL การปองกัน MySQL ใหปลอดภัยจาก crackers (1) ตั้งรหัสผานสําหรับผูใชทุกคนเสมอ โดยการตั้งหรือเปลี่ยนรหัสผานสามารถทําไดดังนี้

(2) ไมควรสั่งให MySQL deamon ทํางาน โดยเปน process ของ root (3) กําหนดสิทธิ Script ไฟล mysql.server ใหสามารถอานไดเฉพาะ root เทานั้น เมื่อมีการ กําหนดรหัสผานของ UNIX root ใน script ดังกลาว

6 (4) กําหนดสิทธิในการอาน/เขียน directory ที่ใชเก็บ database ใหแก UNIX user ที่เปนเจาของ process MySQL deamon เทานั้น (5) ไมควรกําหนดสิทธิ process ใหแก user ทุกคน (6) ไมควรกําหนดสิทธิ file ใหแก user ทุกคน เมื่อสิทธิของผูใชถูกเปลี่ยนแปลง จะมีผลตอผูใชเมื่อใด ? เมื่อ mysqld start , ขอมูลใน grant table จะถูกอานเก็บไวในหนวยความจํา เพื่อนําไปใชงาน การแกไขขอมูลใน grant tables โดยใชคําสั่ง GRANT, REVOKE หรือ SET PASSWORD จะทําใหสิทธิที่ ถูกแกไขมีผลใชไดทันที ถาคุณแกไข grant tables โดยการใชคําสั่ง INSERT หรือ UPDATE คุณจําเปน ตองใชคําสั่ง FLUSH PRIVILEGES หรือ run mysqladmin flush-privileges เพื่อบอกให server reload grant tables ไมเชนนั้นสิทธิตางๆ ที่คุณแกไขจะไมมีผลใดๆ จนกวาคุณจะ restart server เมื่อ server รับรูวา grant tables ถูกเปลี่ยนแปลง, client ที่ติดตออยูกับ server ในขณะนัน้ ๆ จะไดรับผลกระทบดังนี้ • สิทธิการใชงาน Table และ column จะมีผลตอ client เมื่อ client request ครั้งตอไป • สิทธิการใชงาน Database จะมีผลตอ client เมื่อ client เรียกใชคําสั่ง USE db_name ในครั้งตอไป สวนการเปลี่ยนแปลงสิทธิอื่นๆ นอกเหนือจากนี้จะมีผลตอ client เมื่อ client connect มายัง server ครั้งตอไป การ set up สิทธิการใช MySQL เริ่มตน หลังจากติดตัง้ MySQL, คุณสามารถ set up access privileges เริ่มตนของ MySQL ไดโดยการ run script/mysql_install_db ซึ่ง script/mysql_install_db จะทําการ start up mysqld server จากนัน้ ก็จะกําหนด คาเริ่มตนของ grant table ดังนี้ : • The MySQL root user จะเปน superuser ซึ่งสามารถทําทุกอยางได และการติดตอกับ server จะตองทําจาก localhost เทานั้น Note: password เริ่มตนของ root จะถูกกําหนดเปน empty นั้นคือ ทุกๆ คน สามารถ connect มายัง server โดยใช user root แบบไมตองใช password ได • An anonymous user ถูกสรางใหสามารถทําอะไรก็ไดกับ databases ที่ชื่อ ‘test’ หรือ ขึ้นตนดวย ‘test_’ การติดตอกับ server ตองทําจาก local host เทานั้น • สิทธิ อื่น เชน user ธรรมดาไมสามารถ ใช mysqladmin shutdown หรือ mysqladmin processlist ได เมื่อคุณ install MySQL เสร็จ สิ่งแรกที่คุณควรทําคือการกําหนด password สําหรับ root user โดย ใชวิธีการดังนี้

7 ใน MySQL 3.22 , คุณสามารถใชคําสั่ง SET PASSWORD ไดดังนี้ shell> mysql -u root mysql mysql> SET PASSWORD FOR root=PASSWORD('new_password'); อีกวิธีในการ set password ของ root คือ shell> mysqladmin -u root password new_password การเพิ่มผูใช และ การจัดการกับสิทธิของผูใช คุณสามารถเพิ่ม user ไดโดยใช 2 วิธี คือ (1) ใช GRANT statement (2) เปลี่ยนแปลง MySQL grant tables โดยตรง ซึ่งวิธีที่สมควรใชมากกวา คือ วิธีที่ (1) เพราะเปนวิธีที่รัดกุม และ เกิดขอผิดพลาดไดนอยกวา ตัวอยาง การ add new user โดยใชวิธีที่ (1) ซึ่งผูที่สามารถ add new user ได จะตอง connect เปน root กอน, root user จะตอง insert สิทธิ สําหรับ mysql database และ reload administrative privilege คุณสามารถเพิ่มผูใชไดโดยการใชคําสั่ง GRANT ดังนี้ :

คําสั่ง GRANT เหลานี้เปนการสราง new users ขึ้นมาใหม 3 users

8 คุณสามารถ add ขอมูลของ user เหลานี้ไดโดยตรง โดยใช INSERT statements และ บอกให server reload grant tables

ตัวอยางตอไปนี้ เปนการเพิ่ม user ชื่อ “custom” ซึ่งสามารถ connect เขา server จาก host localhost, server.domain และ cpe.cmu. user นี้ ตองการเขาถึง (access) เพียง database stuinfo จาก localhost, database lecturerinfo จาก cpe.cmu และ database transcript จากทั้ง 3 host โดยใช password ‘manager’ การ setup สิทธิตางๆ ของ user โดยการใช GRANT statements , ทําไดดังนี้ :

หรือจะ set up สิทธิของ user จากการแกไขที่ grant table โดยตรงก็ได ดังนี้ :

9 คําสั่ง INSERT 3 คําสั่งแรก เปนการ add ขอมูลลงใน user table เพื่ออนุญาติให user custom สามารถ connect มายัง server โดยมาจาก host ที่แตกตางกันได ดวย password ‘stupid’ แตยังไมใหสิทธิตางๆ แก custom คํ าสั่ง INSERT อีก 2 คํ าสั่งตอมา เปนการ add ขอมูลลงใน db table เพื่อใหสิทธิตางๆ แก custom สําหรับ database ชื่อ bankaccount, expenses and customer โดยการ access เขามาใช database กระทําไดจาก host ที่ เจาะจงไวเทานั้น ซึ่งวิธีนี้จะตองทําการ reload grant table ใหกับ server ใหม โดยการใชคําสั่ง FLUSH PRIVILEGES ในบรรทัดสุดทาย เพื่อใหสิทธิตางๆ สามารถใชไดเลย ถาคุณตองการเจาะจง user ในการ access จากเครื่องใดๆ ก็ไดใน domain เดียวกัน คุณสามารถใชคําสั่ง GRANT ดังนี้ :

วิธีการกําหนด passwords จากตัวอยางในหัวขอที่ผานมาจะเห็นไดวาเมื่อคุณ INSERT หรือ UPDATE password คุณตองใช function PASSWORD() เพือ่ เขารหัส password เนื่องจากการกระทํ าเชนนี้ ทํ าให password ถูกเก็บลง table ในแบบที่ถูกเขารหัส เพื่อความปลอดภัยของขอมูล หากคุณลืมใช function PASSWORD() , password ก็จะถูกเก็บในรูปแบบของตัวหนังสือ (plaintext)

จากคําสั่งนี้ ผลลัพธที่ไดคือ คําวา ‘biscuit’ จะถูกเก็บเปน password ใน user table เมื่อ user Jeffrey พยายาม connect มายัง server โดยใช password นี,้ mysql client จะ encrypt password ที่สงเขามาโดยใช function PASSWORD() และสงผลลัพธกลับไปให server และ server ก็จะทําการเปรียบเทียบคาใน user table ซึ่งเปนคา ‘biscuit’ กับ password ที่ถูกสงมาแบบเขารหัสซึ่งไมใชคา ‘biscuit’ ผลลัพธของการ เปรียบเทียบก็ผิด ดังนั้น server จึงไมยอมให user login เขามาได

10 วิธีการใช INSERT statement ที่ถูกตอง ควรเขียนดังนี้ :

หรือคุณจะใช PASSWORD() สํ าหรับ SET PASSWORD statements ก็ได ดังนี้ :

ถาคุณ set password โดยใช GRANT ... IDENTIFIED BY statement หรือ ใชคําสั่ง mysqladmin password ก็ไมจําเปนตองใช function PASSWORD() เนือ่ งจากมันจะทํ าการเขารหัสใหโดยอัตโนมัติ ดังนี้ :

หรือ ใช mysqladmin

11 2. Language Reference 2.1 วิธีการเขียนสตริง และ ตัวเลข 1. สตริง สตริง คือ ตัวอักขระที่นํามาเขียนเรียงกัน ซึ่งจะถูกลอมดวยเครื่องหมาย single quote (‘’) หรือ double quote (“”) ก็ได เชน

สําหรับสัญลักษณพิเศษบางอยางที่ใชใน string ที่เรียกวา escape character นั้น ตองใชเครื่องหมาย backslash (‘\’) ซึ่ง escape character ใน MySQL นั้น มีดังตอไปนี้

วิธีการที่จะเขียน string ที่มี quotes รวมอยูดวย มีหลายวิธี ดังนี้ • เครื่องหมาย ‘ ใน string ที่อยูในเครื่องหมาย ‘’ สามารถเขียนดวย ’’ • เครื่องหมาย “ ใน string ที่อยูในเครื่องหมาย “” สามารถเขียนดวย "". • คุณสามารถใชเครื่องหมาย ‘\’ อยูขางหนา quote character ก็ได • เครื่องหมาย ‘ ใน string ที่อยูในเครื่องหมาย !" สามารถเขียนไดเลย • เครื่องหมาย “ ใน string ที่อยูในเครื่องหมาย ‘’ ก็สามารถเขียนไดเลย

12

2. ตัวเลข interger number คือ กลุมของตัวเลขที่เรียงตอกัน สวน float number นัน้ จะมีการใชเครื่องหมาย . เพื่อทํ าการแยกสวนทศนิยมออก โดยทั้ง interger และ float numbers นั้นสามารถมีคาเปนลบได กําหนดโดย ใชเครื่องหมาย – นําหนา ดังตัวอยางตอไปนี้

จะเห็นไดวาเลขจํานวนเต็มนัน้ สามารถอางอยูในรูปของ float number ไดเชนกัน 3. เลขฐานสิบหก MySQL นั้นสามารถอางถึงตัวเลขฐานสิบหกได เมื่อ MySQL ทําการประมวลผลแลวจะสามารถ แปลงเลขฐานสิบหกเปนเลขฐานสิบ หรือแปลงเปนอักขระก็ได โดยเลขฐานสิบหกสองตัวติดกันจะถูกแปลง เปนอักขระหนึ่งตัว ดังตัวอยางตอไปนี้

4. NULL value NULL values หมายถึง ไมมีคา ซึ่งแตกตางจากคาศูนยในระบบตัวเลข หรือ empty string ใน ขอมูลประเภท string โดย NULL สามารถอางไดโดยใสเครื่องหมาย backslash นําหนา ดังนี้ \N

13 5. Database, table, index, column, alias names ในการตั้งชื่อ database, table, index, column และ alias นัน้ มีกฎในการตั้งชื่อ ดังตารางตอไปนี้

หมายเหตุ หากวาชื่อของ database หรือ table หรือ column หรือ alias นั้นไปตรงกับชื่อคําสั่งเฉพาะของ MySQL แลว จะสามารถอางถึงไดโดยตองใสเครื่องหมาย ' ' ครอบชื่อนั้นๆไวเสมอ ดังตัวอยางตอไปนี้

สําหรับการอางถึง columns นั้นสามารถทําไดตามกฎเกณฑดังในตารางตอไปนี้

เราไมจําเปนที่จะตองอางถึง tbl_name หรือ db_name.tbl_name นอกเสียจากวาเกิดกรณีที่ทําใหเกิด ความสับสนขึ้นมาได ยกตัวอยางเชน table t1 และ t2 นั้นมี column ชื่อ c เหมือนกัน ดังนั้นในการอางถึงใน การทํา query นั้นเราทําการเลือกใชทั้งสอง table แลวจะทําใหเกิดความสับสน หากทําการอางถึง column c เนื่องจากไมไดมี column c เพียงอันเดียว ดังนั้นเวลาอางถึง column c นัน้ จําเปนตองอางวาเปน t1.c หรือ t2.c ในทํานองเดียวกัน ถาหากมี table t ใน database db1 และ db2 เราตองทําการอางถึง columns ในทั้งสอง table นั้นก็จําเปนตองทําการอางชื่อ database ดวย ดังเชน db1.t.col_name หรือ db2.t.col_name 6. Case sensitivity in names ใน MySQL นั้น databases และ tables จะมีลักษณะเชนเดียวกับ directory และ file ใน directory นั้น ดังนั้นในการตั้งชื่อ databases และ tables นั้น สํ าหรับระบบปฏิบัติการ unix นั้น อักขระตัวพิมพใหญ และตัวพิมพเล็กจะมีความแตกตางกัน ถือเปนคนละตัวกัน แตในระบบปฏิบัติการ Win32 นั้นอักขระตัวพิมพ ใหญหรือเล็กนั้นเหมือนกัน หมายเหตุ ถึงแมวาชื่อของ database และ table นั้นจะไมเกิดปญหาในการอางชื่อดวยตัวพิมพเล็ก หรือตัวพิมพใหญก็ตาม เราไมควรที่จะอางถึง database และ table โดยใชทั้งตัวพิมพเล็กและตัวพิมพใหญ

14 พรอมๆกันในการทํา query ครั้งหนึ่งๆ จากตัวอยางตอไปนี้เราไมสามารถอางถึง table ดวยชื่อ my_table และ MY_TABLE ในการทํ า query อันเดียวกันได

สวน Column names นั้นจะสามารถอางถึงไดโดยตองระบุถึงชื่อของ column ใหถูกตอง โดย อักขระตัวพิมพเล็กและตัวพิมพใหญนั้นมีความแตกตางกัน ไมวาจะเปนระบบ unix หรือ Win32 การทํา alias บน table ก็ตองอางถึงดวยตัวพิมพเล็กหรือตัวพิมพใหญอยางใดอยางหนึ่งเทานั้นใน การทํา query ครั้งหนึ่ง ดังตัวอยางตอไปนี้ จะเห็นไดวาไมสามารถอางถึง table เดียวกัน ดวยชื่อ A และ a ได

แตการทํา alias บน column นั้นจะไมเกิดปญหาถึงแมวาเราจะอางดวยทั้งตัวพิมพเล็กหรือตัวพิมพ ใหญ 2.2. ชนิดของขอมูลคอลัมน Column ที่สามารถมีไดใน MySQL แตละชนิดตองการเนื้อที่ในการเก็บขอมูลตางกัน ดังนี้ 1. ขอมูลชนิดตัวเลข

15 2. ขอมูลชนิดวันที่ และ เวลา

หากไมมีขอมูลใน column ชนิด date และ time (Zero value) คาที่เก็บลงใน column แสดงดัง ตารางตอไปนี้

3. ขอมูลชนิดสตริง

16 2.3. Functions for use in SELECT and WHERE clauses select_expression หรือ where_definition ในประโยค SQL สามารถจะใสนิพจนใดที่ใชฟงกชัน ดังที่จะอธิบายตอไปได นิพจนที่มี NULL จะไดคาที่เปน NULL เสมอ เวนแตวาในนิพจนนั้นจะมีฟงกชัน และตัวกระทําตัวอื่นอยูในนัน้ (หมายเหตุ หามมีชองวางหรือวงเล็บในชื่อฟงกชัน) ตัวอยาง

1. ฟงกชันการรวมกลุม ( ... ) วงเล็บ ใชในการจัดลําดับของการประมวลผลในนิพจน ตัวอยางเชน

2. ตัวกระทําทางคณิตศาสตรทั่วไป ประกอบดวยตัวกระทําทางคณิตศาสตรที่ใชกันบอยๆ เชน +, -, * , / ตัวอยาง + : การบวก

- : การลบ

* : การคูณ

17 ผลลัพธของนิพจนสุดทายไมถูกตองเพราะวาผลลัพธของการคูณเลขจํานวนเต็มเกินคาในชวงการ คํานวณของ BIGINT 64 บิท / : การหาร

การหารดวยคาศูนย ผลลัพธจะไดเปนคา NULL

3. Bit functions MySQL ใช BIGINT 64 บิทในการกระทํ าแบบบิทดังนั้นตัวกระทํ าจึงมีขนาดใหญสุดได 64 บิท ตัวกระทําทางบิท ไดแก |###$##Bitwise OR

& : Bitwise AND

<< : การเลื่อนตัวเลขจํานวนเต็มไปทางซาย

>> : การเลื่อนตัวเลขจํานวนเต็มไปทางซาย

18 ~ : เปลี่ยนคาบิททั้งหมดใหเปนคาตรงกันขาม

BIT_COUNT(N) สงกลับจํานวนบิทที่ใชในการนับเลขจํ านวน N

4. Logical operations ฟงกชันตรรกทั้งหมดจะสงคากลับเปน 1 (จริง) หรือ 0 (เท็จ) เทานั้น ฟงกชันทางตรรก ไดแก NOT : ! NOT จะสงคา 1 กลับถาอารกิวเมนตเปน 0 และสง 0 กลับถาอารกิวเมนตเปนหนึ่ง ถาเปน NOT NULL จะสงกลับคา NULL เชน

OR : || OR จะสงคา 0 ถามีอารกิวเมนตที่เปน 1 หรือ NULL มิฉะนั้นจะสงคา 1 ตัวอยางเชน

19 AND : && AND จะสงคา 0 ถามีอารกิวเมนตที่เปน 0 หรือ NULL มิฉะนั้นจะสงคา 1 ตัวอยางเชน mysql> select 1 && NULL; -> 0 mysql> select 1 && 0; -> 0 5. Comparison operators ผลการเปรียบเทียบไดคาเปน 1 หรือ 0 หรือ NULL เทานั้น ฟงกชันเหลานี้ใชไดกับตัวเลขและ ตัวอักษร ถาเปนตัวอักษรมันจะถูกแปลงใหเปนตัวเลขและจากตัวเลขเปนตัวอักษรถาจําเปน MySQL จะทําการเปรียบเทียบโดยอาศัยกฎตอไปนี้ • ถามีอารกิวเมนตหนึ่งตัวหรือมากกวาเปน NULL ผลลัพธจะออกมาเปน NULL ยกเวนตัวกระทํา <=> • ถาอารกิวเมนตทั้งสองตัวในการเปรียบเทียบเปนตัวอักษร มันก็จะถูกเปรียบเทียบเปนตัวอักษร • ถาอารกิวเมนตทั้งสองตัวเปนตัวเลข ก็จะเปรียบเทียบเปนตัวเลข • คาเลขฐานสิบหกจะถูกทําเปนเลขฐานสองของตัวอักษรในกรณีที่ไมไดทํ าการเปรียบเทียบกับ ตัวเลข • ถาอารกิวเมนตตัวหนึ่งเปนคอลัมน TIMESTAMP หรือ DATETIME และอารกิวเมนตตัวอื่น เปนคาคงที่ คาคงที่จะถูกแปลงเปน timestamp กอนที่จะทําการเปรียบเทียบ ตัวอยาง

20 ตัวกระทําเปรียบเทียบ ไดแก = : Equal

<> : != : Not equal

<= : Less than or equal

< : Less than

>= : Greater than or equal

21 > : Greater than

<=> : Null safe equal

IS NULL และ IS NOT NULL ใชตรวจสอบวาคาเปน NULL หรือ NOT NULL

expr BETWEEN min AND max ถา expr มีคามากกวาหรือเทากับคา min และ expr มีคานอยกวาหรือเทากับคา max BETWEEN จะ สงคา 1 มิฉะนั้นเปน 0 การเปรียบเทียบแบบนี้มีคาเทากับนิพจน (min <= expr AND expr <= max)

expr IN (value,...) การเปรียบเทียบนี้จะสงคา 1 ถา expr คือคาใดๆ ในรายการที่อยูขางหลังคําวา IN มิฉะนั้นก็จะสงคา 0 ตัวอยาง

22

expr NOT IN (value,...) มีคาเทากับ NOT (expr IN (value,...)). ISNULL(expr) ถา expr เปน NULL, ISNULL() จะสงคา 1, มิฉะนั้นจะสงคา 0

COALESCE(list) สงคาของตัวแรกในวงเล็บทีไ่ มใช NULL ตัวอยาง

INTERVAL(N,N1,N2,N3,...) สงกลับคา 0 ถา N < N1, และ 1 ถา N < N2 อารกิวเมนตทุกตัวจะถูกมองเปนตัวเลขจํานวนเต็ม และ มีขอกําหนดวา N1 < N2 < N3 < ... < Nn เพื่อใหฟงกชันนี้ทํ างานไดอยางถูกตอง ตัวอยาง

23 6. การเปรียบเทียบสตริง โดยทั่วไปแลว การเปรียบเทียบสตริงจะแบงแยกตัวใหญตัวเล็ก การเปรียบเทียบสตริงจะไดคา 0(เท็จ) หรือ 1 (จริง) โดยการใช LIKE ในการเปรียบเทียบ คุณสามารถใชอักขระตอไปนี้ในรูปแบบการ เปรียบเทียบได

ตัวอยาง

ถาตองการเปรียบเทียบอักขระตัวเดียวดวยการระบุอักขระ ใหใช “\” นําหนาอักขระที่ตองการจะ เปรียบเทียบในรูปแบบ

ตัวอยาง

ในการกําหนดอักขระ ESCAPE ตัวอื่น ใหใชประโยค ESCAPE ในการกํ าหนด เชน

expr NOT LIKE pat [ESCAPE 'escape-char'] มีความหมายเชนเดียวกับประโยค NOT (expr LIKE pat [ESCAPE 'escape-char']). expr REGEXP pat expr RLIKE pat

24 ทั้งสี่ประโยคขางตนนี้ ใชในการเปรียบเทียบนิพจนสตริง expr กับรูปแบบ pat RLIKE เปนคําเหมือน ของ REGEXP ใชไดกับ mSQL ตัวอยาง

expr NOT REGEXP pat expr NOT RLIKE pat มีความหมายเหมือนกับประโยค NOT (expr REGEXP pat). STRCMP(expr1,expr2) STRCMP() จะใหคา 0 ถาสตริงเหมือนกัน ใหคา -1 ถาอารกิวเมนตตวั แรกมีคานอยกวาตัวที่สอง มิฉะนั้นไดคา 1 ตัวอยาง

7. Cast operators BINARY ตัวกระทํา BINARY ใชในการกําหนดสตริงที่ตอทายใหเปนเลขฐานสองของสตริง วิธีชวยใหการ เปรียบเทียบคอลัมนเปนแบบ case sensitive

25 ตัวอยาง

8. ฟงกชันควบคุมทิศทางการทํางาน IFNULL(expr1,expr2) ถา expr1 ไมใช NULL, IFNULL() จะใหคา expr1, มิฉะนั้นจะใหคา expr2. IFNULL() จะใหคา ตัวเลขหรือสตริง ขึ้นอยูกับวาใชแบบไหน ตัวอยาง

IF(expr1,expr2,expr3) ถา expr1 เปนจริง (TRUE) โดยที่ (expr1 <> 0 and expr1 <> NULL) แลว IF() จะใหคา expr2, มิฉะนั้นจะใหคา expr3. IF() จะใหคาตัวเลขหรือสตริงขึ้นอยูกับวาคาไหนถูกใช ตัวอยาง

expr1 ถูกคํานวนโดยใชเปนเลขจํ านวนเต็ม ซึ่งหมายความวาถาคุณใชเปน floating-point หรือ สตริง คุณก็สามารถใชฟงกชันนี้ดวยการเปรียบเทียบได ตัวอยาง

26

9. ฟงกชันทางคณิตศาสตร ฟงกชันทางคณิตศาสตรทั้งหมดจะใหคาเปน NULL หากเกิดขอผิดพลาดขึ้น - : เครื่องหมายลบ เปลี่ยนคาเลขลบใหเปนบวก และเปลี่ยนคาบวกใหเปนลบ ตัวอยาง

ABS(X) ใหคาสัมบูรณของ X ตัวอยางเชน

SIGN(X) ใหคาบวกหรือลบของอารกวิ เมนต ขึ้นอยูกับวาคานั้นเปนลบหรือบวก ตัวอยาง

MOD(N,M) : % ใหคาเศษจากการหาร N ดวย M ตัวอยางเชน

27 FLOOR(X) ใหคาเลขจํานวนเต็มทีใ่ หญที่สุดที่ไมมากเกิน X ตัวอยางเชน

CEILING(X) ใหคาเลขจํานวนเต็มทีเ่ ล็กทีส่ ุดที่ไมนอยกวา X ตัวอยางเชน

ROUND(X) ใหคาเลขจํานวนเต็มทีเ่ อา X มาปดเศษแแลว ตัวอยางเชน

ROUND(X,D) ใหคาเลข X ที่มีจํานวนทศนิยมเทากับ D ตําแหนง ตัวอยางเชน

EXP(X) ใหคาเอกซโพเนนเชียลของ X เชน

28

LOG(X) ใหคาลอการิทึมของ X ตัวอยางเชน

LOG10(X) ใหคาลอการิทึมฐาน 10 ของ X ตัวอยางเชน

POW(X,Y) POWER(X,Y) ใหคาของ X ยกกําลัง Y ตัวอยางเชน

SQRT(X) ใหคาสแควรูทของ X ตัวอยางเชน

29

PI() ใหคาของ PI ตัวอยางเชน

COS(X) ใหคาโคซายของ X, เมื่อ X มีหนวยเปนเรเดียน ตัวอยาง

SIN(X) ใหคาซายของ X, เมื่อ X มีหนวยเปนเรเดียน ตัวอยาง

TAN(X) ใหคาแทนของ X, เมื่อ X มีหนวยเปนเรเดียน ตัวอยาง

ACOS(X) ใหคาอารคโคซายอง X ตัวอยาง

30 ASIN(X) ใหคาอารคซายของ X ตัวอยางเชน

ATAN(X) ใหคาอารคแทนเจนทของ X ตัวอยาง

ATAN2(X,Y) ใหคาอารคแทนเจนทของตัวแปร X และ Y ตัวอยางเชน

COT(X) ใหคาโคแทนเจนทของ X ตัวอยางเชน

RAND() RAND(N) ใหคาเลข floating-point สุมในชวงของ 0 ถึง 1.0 คา N ถาใสจะเปน seed value ตัวอยางเชน

31

10. ฟงกชันเกี่ยวกับสตริง ASCII(str) Return รหัส ASCII ของตัวอักษรที่อยูซายสุดของ string str Return NULL ถา str เปน empty string

BIN(N) Return คา Binary ของ N ซึ่ง N สามารถมีคาไดเทากับ BIGINT Returns NULL ถา N เปน NULL

OCT(N) Return คา Octal ของ N ซึ่ง N สามารถมีคาไดเทากับ BIGINT Return NULL ถา N เปน NULL

32 HEX(N) Return คา Hexadecimal ของ N ซึ่ง N สามารถมีคาไดเทากับ BIGINT Return NULL ถา N เปน NULL

CHAR(N,...) Return string ของรหัส ASCII N

LENGTH(str) Return ความยาวของ string str

LOCATE(substr,str) POSITION(substr IN str) Return ตํ าแหนงของ ตัวอักษรตัวแรกของ substring substr ใน string str Return 0 ถา substr ไมอยูใน str

LOCATE(substr,str,pos) Return ตําแหนงของ ตัวอักษรตัวแรกของ substring substr ใน string str โดยเริ่มคนหาตั้งแตตําแหนง pos Return 0 ถา substr ไมอยูใน str

33

INSTR(str,substr) เหมือนกับ LOCATE เพียงแตสลับที่ argument Return ตํ าแหนงของ ตัวอักษรตัวแรกของ substring substr ใน string str Return 0 ถา substr ไมอยูใน str

LPAD(str,len,padstr) Return string str ซึ่งจะเติมตัวอักษรทางซายของ str ดวยเครื่องหมาย padstr จน string มีความยาว เทากับ len ตัวอักษร

RPAD(str,len,padstr) Return string str ซึ่งจะเติมตัวอักษรทางขวาของ str ดวยเครื่องหมาย padstr จน string มีความยาว เทากับ len ตัวอักษร

LEFT(str,len) Return ตัวอักษรที่อยูดานซายสุดของ string str จํานวน len ตัวอักษร

RIGHT(str,len) Return ตัวอักษรที่อยูดานขวาสุดของ string str จํานวน len ตัวอักษร

34

SUBSTRING(str,pos,len) SUBSTRING(str FROM pos FOR len) MID(str,pos,len) Return string ที่มีความยาวเทากับ len ตัวอักษร จาก str เริ่มจากตํ าแหนง pos

SUBSTRING(str,pos) SUBSTRING(str FROM pos) Returns substring จาก str โดยเริ่มตั้งแตตําแหนงที่ pos

LTRIM(str) Returns str ที่ไมมีชองวางอยูดานหนา str

RTRIM(str) Returns str ที่ไมมีชองวางอยูดานหลัง str

TRIM([[BOTH | LEADING | TRAILING] [remstr] FROM] str) Return str ที่ถูกตัดตัวอักษร remstr ที่อยูดานหนา(LEADIN) หรือ ดานหลัง (TRAILING) หรือทั้ง 2 ดานของ str ออกไปแลว

35

LCASE(str) LOWER(str) Return str ที่เปนตัวอักษรพิมพเล็กทั้งหมด

UCASE(str) UPPER(str) Return str ที่เปนตัวอักษรพิมพเล็กทั้งหมด

11. ฟงกชั่นเกี่ยวกับวันที่ และ เวลา DAYOFMONTH(date) Return วันที่ใน 1 เดือน (1 ถึง 31)

DAYOFYEAR(date) Return วันที่ ใน 1 ป (1 ถึง 366)

36 MONTH(date) Return เดือนทีใ่ น 1 ป (1 ถึง 12)

DAYNAME(date) Return ชื่อวัน ใน 1 อาทิตย

MONTHNAME(date) Return ชื่อเดือน

YEAR(date) Return ปสําหรับวันที่ ซึ่งอยูในชวง 1000-9999

HOUR(time) Return ชั่วโมง จาก 0 ถึง 23

MINUTE(time) Return นาที จาก 0 ถึง 59

SECOND(time) Return วินาที จาก 0 ถึง 59

37

DATE_FORMAT(date,format) รูปแบบของวันที่ที่ MySQL สามารถแสดงได ซึ่งใช string ในตารางขางลางเปนตัวกําหนดรูปแบบ

38 ตัวอยาง

TIME_FORMAT(time,format) ใชเหมือนกับ DATE_FORMAT แตใชบอกเวลา CURDATE() CURRENT_DATE Return วันที่ปจจุบัน

CURTIME() CURRENT_TIME Return เวลาปจจุบัน

NOW() SYSDATE() CURRENT_TIMESTAMP Return ทั้งวันที่ และ เวลา ในรูปแบบ 'YYYY-MM-DD HH:MM:SS' หรือ YYYMMDDHHMMSS

39

2.4. CREATE DATABASE syntax รูปแบบของคําสั่ง CREATE DATABASE มีดังนี้ CREATE DATABASE db_name สําหรับ MySQL , database จะถูกสรางเปน directory อยูภายใต data directory ของ MySQL ซึ่ง file ใน directory ก็คือ table ใน database นั่นเอง 2.5. DROP DATABASE syntax รูปแบบคําสั่ง DROP DATABASE มีดังนี้ DROP DATABASE [IF EXISTS] db_name Drop database เปนการลบทุกๆ ตารางใน database และ ลบ database ดวยคาที่สงกลับมาจากคําสั่ง drop database คือ จํานวน file ที่ถูกลบจาก database directory ซึ่งโดยปกติแลว จํานวน file ที่ถูกลบจะ เทากับ 3 เทาของจํานวนตาราง นั่นคือ 1 ตาราง จะประกอบดวย file นามสกุล .MYD , .MYI และ .frm 2.6. CREATE TABLE syntax รูปแบบคําสั่งของการสรางตารางดวยคําสั่ง CREATE TABLE มีดังนี้

รูปแบบของ create_definition ไดแก

40 รูปแบบของ Type ไดแก

รูปแบบของ index_col_name:

รูปแบบของ reference_definition:

41 รูปแบบ reference_option:

รูปแบบของ table_options:

รูปแบบของ select_statement:

CREATE TABLE ใชในการสรางตารางตามชื่อที่กําหนดไวในฐานขอมูลที่กําลังเปดอยู กฏการตั้ง ชื่อตาราง อนุญาติใหตั้งชื่อที่มีความยาวไดไมเกิน 64 ตัวอักษร และหามใชอักขระ “/” หรือ “.” ในชื่อตาราง อาจเกิดขอความแสดงขอผิดพลาดได ถาตารางอางถึงไมไดอยูในฐานขอมูลปจจุบัน ใน MySQL 3.22 หรือหลังจากนั้น ชื่อตารางสามารถถูกกําหนดเปน db_name.tbl.name วิธีนี้ใชไดทั้ง ฐานขอมูลที่เปดอยูและที่ยังไมไดเปด ใน MySQL 3.23 คุณสามารถใช Keyword ชั่วคราวตอนสรางตารางได ตารางชั่วครางจะถูกลบโดยอัตโนมัติ ถาการเชื่อมตอมีปญหาและในการเชื่อมตอแตละครั้งชื่อถูกใชเฉพาะ ในการเชื่อมตอครั้งนั้น ๆ หมายความวาการเชื่อมตอสองครั้งที่ตางกันจะสามารถใชชื่อตารางชั่วคราวที่ เหมือนกันไดโดยไมเกิดการซํ้าซอน คือตารางที่มีอยูจะถูกซอนไวจนกวาตารางชั่วคราวจะถูกลบ ดังนั้น ตารางชั่วคราวจึงสามารถมีชื่อซํ้ากับตารางที่มีอยูแลวได ใน MySQL 3.23 หรือหลังจากนั้น คุณสามารถใช keyword IF NOT EXISTS ในการกําจัด ขอผิดพลาด ถาหากวามีตารางนั้นอยู สังเกตวาไมมีการตรวจสอบวาโครงสรางตารางเหมือนกันหรือไม แตละตาราง tbl_name ถูกแทนดวยบางไฟลในไดเรกทอรีฐานขอมูล ตัวอยาง ตารางชนิด MyISAM จะมี

42

สําหรับขอมูลเพิ่มเติมในเรื่องคุณสมบัติของคอลัมนชนิดตางๆ กัน อานไดในหัวขอ Column types 2.7. ALTER TABLE syntax รูปแบบคําสั่งของ ALTER TABLE เปนดังนี้

รูปแบบของ alter_specification:

ALTER TABLE ใชในการเปลี่ยนแปลงโครงสรางของตารางที่มีอยู ตัวอยางเชน คุณสามารถจะเพิ่ม หรือลบคอลัมน สรางหรือทําลายดรรชนี เปลี่ยนชนิดของคอลัมนที่มีอยูแลว หรือเปลี่ยนชื่อคอลัมนหรือแม แตชื่อตารางเอง คุณสามารถเปลี่ยนคอมเมนตของตารางและชนิดของตารางไดดวย ถาคุณใช ALTER TABLE ในการเปลี่ยนขอกํ าหนดของคอลัมนแต DESCRIBE tbl_name กําหนด ไววาคอลัมนของคุณตองไมถูกเปลี่ยนแปลงใดๆ ก็เปนไปไดที่ MySQL จะไมเปลี่ยนแปลงคอลัมนใหตาม คําสั่งของคุณ ยกตัวอยาง ถาคุณพยายามจะเปลี่ยนตัวแปรแบบ VARCHAR ไปเปน CHAR MySQL จะ ยังคงใช VARCHAR ถาตารางมีคอลัมนที่ความยาวสามารถแปรผันได ALTER TABLE ทํางานโดยการสรางชุดจําลองชั่วคราวของตารางตนแบบ การเปลี่ยนแปลงจะถูก ทําบนชุดจําลองนี้ จากนัน้ ตารางตนแบบจะถูกลบและเปลี่ยนชื่อตารางใหมใหเหมือนอันเกา ดังนั้นการ

43 ปรับปรุงใดๆ จะถูกประยุกตโดยตรงกับตารางใหมนี้โดยไรขอผิดพลาดใดๆ ทั้งสิ้น ขณะที่ ALTER TABLE กําลังทํางาน ตารางตนแบบจะถูกอานโดยไคลเอนทอื่นๆ การปรับปรุงและการเขียนลงตารางจะถูกหยุดไว จนกวาตารางใหมจะพรอมใช • ในการใช ALTER TABLE คุณจําเปนใช select, insert, delete, update, create และ drop กับ ตาราง • IGNORE เปนสวนขยายของ MySQL บน ANSI SQL92 ถูกใชในการควบคุมวา ALTER TABLE จะทํางานไดอยางไร ถามีการซํ้าซอนของคียหลักในตารางใหม ถาไมมีการระบุ IGNORE ตารางจําลองจะถูกยกเลิกและการเปลี่ยนแปลงใดก็จะสูญหาย แตถามีการระบุ IGNORE แถวที่มีการซํ้าซอนบนคียหลักจะถูกเลือกเฉพาะแถวแรก สวนแถวอื่นถูกลบ • คุณสามารถใชประโยค ADD, ALTER, DROP และ CHANGE ไดหลายประโยคในประโยค ALTER TABLE ประโยคเดียว • MODIFY เปนสวนขยายของ ORACKE ที่ใชกับ ALTER TABLE • คุณสามารถเปลี่ยนชื่อคอลัมนโดยใชประโยค CHANGE old_col_name create_definition ใน การทําเชนนี้ตองกํ าหนดชื่อคอลัมนเกาและใหมและชนิดของคอลัมนปจจุบันไวดวย ตัวอยาง เมื่อตองการเปลี่ยนชื่อคอลัมนจาก a เปน b mysql> ALTER TABLE t1 CHANGE a b INTEGER; เมื่อตองการเปลี่ยนชนิดคอลัมนแตคงชื่อเดิม mysql> ALTER TABLE t1 CHANGE a b INTEGER; ใน MySQL 3.22.16a คุณสามารถใช MODIFY ในการเปลี่ยนชนิดคอลัมนโดยไมตองเปลี่ยนชื่อ mysql> ALTER TABLE t1 MODIFY b BIGINT NOT NULL; • ใน MySQL 3.22 หรือหลังจากนั้น คุณสามารถใช FIRST หรือ ADD … AFTER col_name ใน การเพิ่มคอลัมน ณ ตําแหนงที่ตองการภายในตาราง 2.8. DROP TABLE syntax รูปแบบของคําสั่ง DROP TABLE เปนดังนี้

44 DROP TABLE ใชในการลบตารางไดมากกวาหนึ่ง ขอมูลทั้งหมดในตารางและขอกําหนดตางๆใน ตารางจะถูกลบ ดังนั้นจึงควรระวังเมื่อใชคําสั่งนี้ ใน MySQL 3.22 หรือหลังจากนั้น คุณสามารถใช keyword IF EXISTS เพื่อเปนการปองกันขอ ผิดพลาดอันจะเกิดจากกรณีที่ไมมีตารางนัน้ อยูจริง 2.9. DELETE syntax รูปแบบคําสั่ง DELETE มีดังนี้

DELETE จะทําการลบแถวจาก tbl_name ที่กําหนดไวในเงื่อนไขใน where_condition และสงกลับ จํานวนเรคคอรดที่ถูกลบ ถาคุณใชคําสั่ง DELETE โดยไมมีประโยค WHERE แถวทั้งหมดจะถูกลบ DELETE deletes rows from tbl_name that satisfy the condition given by where_definition, and returns the number of records deleted 2.10. SELECT syntax รูปแบบของคําสั่ง SELECT มีดังนี้

SELECT ใชในการคนหาแถวขอมูลจากตารางที่ตองการ select_expression ใชในการกําหนด คอลัมนที่ตองการจะคนหา SELECT อาจจะใชในการคนหาแถวโดยไมตองอางถึงตารางใดเลยก็ได ตัวอยาง

45 keyword ทั้งหมดที่ใชตองเรียงตามลําดับตามรูปแบบทีใ่ หดานบน ตัวอยางเชน ประโยค HAVING ตองตามหลังประโยค GROUP BY และตองมากอนประโยค ORDER BY • นิพจน SELECT สามารถใชคํายอ AS ได โดยใชกับชือ่ คอลัมนและใชกับประโยค ORDER BY หรือ HAVING ได ตัวอยางเชน

• ประโยค FROM table_reference ใชกําหนดวาตองการใชตารางใดในการคนขอมูล ถาเรียกมาก กวาหนึ่งตาราง เรียกวาเปนการทํา Join รายละเอียดดูวิธีการใช Join • การเลือกคอลัมนที่ตองการใหแสดงออกมาอาจทําไดโดยการใชประโยค ORDER BY โดยใชชื่อ คอลัมน ชื่อยอของคอลัมนหรือตําแหนงคอลัมน ตําแหนงคอลัมนเริ่มจาก 1 ตัวอยางเชน

ในการเรียงลําดับในทางตรงขาม ใหเพิ่ม keyword DESC (descending) ขางหลังชื่อคอลัมนใน ประโยค ORDER BY ถาไมกําหนดการเรียงจะเปนแบบ ASC (ascending) คือเรียงจากนอยไปมาก • ประโยค HAVING สามารถในการอางถึงคอลัมนหรือชื่อยอใน select_expression ตัวอยางเชน

46

• ประโยค SEKECT INTO OUTFILE ‘file_name’ เปนการเลือกแถวขอมูลเพื่อเก็บลงไฟล ไฟล นี้จะถูกสรางที่เครื่องเซิรฟเวอร และตองเปนไฟลที่ไมเคยมีมากอน 2.11 JOIN syntax รูปแบบของ Join ที่ใชในประโยค SELECT มีดังนี้

รูปแบบของ LEFT OUTER JOIN ดังแสดงขางตนเปนแบบที่ใชกับ ODBC ไดเทานั้น • ตารางที่อางถึงอาจจะเปนชื่อยอ โดยใช tbl_name AS alias_name หรือ tbl_name alias_name. ก็ ได ตัวอยางเชน

• INNER JOIN และ , (จุลภาค) มีความหมายเดียวกัน คือ เปนการทํา JOIN แบบเต็มระหวางตาราง ที่ใช ปกติแลว จะตองกําหนดวาตารางจะถูกเชื่อมอยางไร เงื่อนไขในประโยค WHERE • ถาไมมีตารางตามที่ระบุใน LEFT JOIN แถวขอมูลที่คอลัมนทั้งหมดเปน NULL จะถูกใชเปน ตารางที่ตองการ ซึ่งคุณสามารถใชในการหาเรคคอรดในตารางที่ไมมีอยูในตารางอืน่ ได

47 ตัวอยางเชน

ตัวอยางนี้ คนหาแถวขอมูลทั้งหมดในตาราง table1 ที่มีคา id ไมมีในตาราง table2 โดย สมมติฐานที่วา table2 ไมมีขอมูล id ที่เปน NULL • ประโยค USING (column-list) ใชในการใหชื่อคอลัมนที่ตองมีอยูในทั้งสองตาราง เชน

ประโยคขางตนมีความหมายเดียวกับประโยคขางลางนี้

• NATURAL LEFT JOIN เปนการ join สองตารางเหมือนกับ LEFT JOIN ที่ใช USING • STRAIGHT_JOIN เหมือนกับการใช JOIN ยกเวนแตวา ตารางทางดานซายจะถูกอานกอนเสมอ ตัวอยาง

2.12. INSERT syntax รูปแบบการใชคําสั่ง INSERT มีดังนี้

48 INSERT ใชในการเพิ่มแถวขอมูลลงไปในตารางที่มีอยูแลว รูปแบบ INSERT… VALUES ใชใน การเพิ่มแถวขอมูลโดยการอิงกับคาที่ระบุในประโยค สวนรูปแบบ INSERT … SELECT ใชในการเพิ่ม แถวขอมูลดวยขอมูลที่มาจากตารางอื่น (เลือกไดมากกวาหนึ่ง) ในนิพจนอาจจะอางถึงคอลัมนใดๆที่ถูกกําหนดไวแลวในเรคคอรดขอมูล ตัวอยางเชน

ถาคุณกําหนด keyword LOW_PRIORITY การทําตามคําสั่ง INSERT จะถูกทําภายหลังจนกวาจะ ไมมีลูกขายใดกําลังอานขอมูลจากตาราง ในกรณีนี้ลูกขายจะตองรอจนกวาประโยค INSERT จะถูกทําจน เสร็จ ซึ่งอาจจะใชเวลานานถาหากตารางกําลังถูกใชงานอยางหนัก ซึ่งจะตรงขามกับประโยค INSERT DELAYED ที่ยอมใหลูกขายทํางานตอจนกระทั่งเสร็จ ถา keyword IGNORE ถูกกําหนดใหประโยค INSERT พรอมกับแถวขอมูลหลายแถว แถวที่คา ซํ้ากับคียหลักจะถูกเพิกเฉยและไมถูกเพิ่มเขาไปในตาราง แตถาไมกําหนด keyword IGNORE การ INSERT จะถูกยกเลิกทันทีที่พบวามีคาซํ้ากันของคียหลัก 2.13. REPLACE syntax รูปแบบการใช REPLACE มีดังนี้

REPLACE ใชเหมือนกับ INSERT ตางกันเพียงแคถาทีเรคคอรดใดในตารางมีคาคียหลัก เหมือนกับเรคคอรดใหมที่ตองการจะเพิ่ม เรคคอรดเกาจะถูกลบทิ้งกอนที่จะใสเรคคอรดใหมเขาไป 2.14. LOAD DATA INFILE syntax รูปแบบการใช LOAD DATA INFILE มีดังนี้

49

LOCAL หมายถึง file ที่ถูกอานถูกเก็บไวที่ client ซึ่งจะทําใหเครื่องทํางานชาลง เนื่องจาก server จะตองไปอาน file จากเครื่อง client ถาไมมีคําวา LOCAL , file จะตองถูกเก็บไวที่ server และ การอาน text files ที่อยูบน server file จะตองอยูใน database directory หรือเปน file ที่ user ทุกคนสามารถเปดอานได นั่นคือถาคุณตองการอาน file จาก server คุณจะตองกําหนด file privilege บน server host. ถา LOW_PRIORITY ถูกกําหนด หมายถึงการทําคําสั่ง LOAD DATA จะถูกเลื่อนออกไป จนกระทั่งไมมี clients เครื่องใดอานขอมูลจากตาราง การหาตําแหนงของ file บน server นั้น server จะตอง ทราบ pathname ของ file เพื่อหาตํ าแหนงของ file โดยใชกฎดังนี้ : • ถา pathname เปนแบบ absolute path, server จะใช pathname ในการคนหา file • ถา pathname เปนแบบ relative pathname, server จะคนหา file นั้นโดยอางอิง จาก directory ของ data ใน server • ถา file name ไมไดกํ าหนด path มาดวย, server จะคนหา file จาก database directory ของ database ที่ใชปจจุบัน IGNORE number LINES ใชสําหรับทําให MySQL ไมสนใจขอมูล number บรรทัดของสวนหัวขอ file เชน ขอมูลบรรทัดที่เปนชื่อของ column เปนตน

2.15. UPDATE syntax รูปแบบการใช UPDATE มีดังนี้

50 UPDATE ใชในการปรับปรุงคอลัมนในตารางที่มีอยูดวยคาใหม ประโยค SETใชกําหนดวาคอลัมน ใดจะถูกเปลี่ยนแปลงและคาใดที่จะถูกใช ประโยค WHERE ใชกําหนดวาแถวใดที่จะถูกปรับปรุง ถาไม กําหนดแลว ทุกๆ แถวจะถูกปรับปรุงหมด ถา LOW_PRIORITY ถูกกําหนด การทํางานตามคําสั่ง UPDATE จะถูกเลื่อนออกไปจนกระทัง่ ไม มีลูกขายใดกําลังอานขอมูลจากตาราง ตัวอยาง คอลัมน age ในตาราง persondata ถูกเพิ่มคาขึ้นหนึ่ง จากคาเดิมของมัน 2.16. USE syntax รูปแบบการใช USE มีดังนี้

ประโยค USE db_name ใชในการบอก MySQL วาใหใชฐานขอมูลชื่อ db_name เปนฐานขอมูล หลักในการทําแบบสอบถามฐานขอมูลที่กาํ หนดนี้จะถูกใชไปจนกระทั่งสิ้นสุดการทํางาน หรือจนกวาคําสั่ง USE จะถูกเรียกใชอีกครั้ง ตัวอยาง

ในการทําใหฐานขอมูลหนึ่งเปนฐานขอมูลหลักในความหมายของคําสั่ง USE ไมไดหมายความวา คุณไมสามารถใชฐานขอมูลอื่นได เพียงแตเปนการกําหนดฐานขอมูลหลักในการทํางานเทานั้น ตัวอยาง ขางลางจะแสดงใหเห็นวาสามารถเขาถึงตารางจากฐานขอมูลคนละตัวได

51 5.17. SHOW syntax รูปแบบการใช SHOW มีดังนี้

wild หมายถึง wildcard characters คือ ‘%’ และ ‘_’ SHOW ใชดูขอมูลเกี่ยวกับ database, table, columns และ server สํ าหรับการอางอิงชื่อตารางนั้น คุณสามารถอางอิงโดยใช db_name.tbl_name แทน tbl_name FROM db_name syntax. ดังตัวอยาง 2 บรรทัดนี้ ที่มีความหมายเหมือนกัน

• SHOW DATABASES แสดงรายชื่อของ database ทั้งหมดที่มีใน MySQL server host • SHOW TABLES แสดงรายชื่อของ table ทั้งหมดที่มีใน database ที่กําหนด โดยคุณสามารถใช คําสั่ง mysqlshow db_name เพื่อแสดงรายชือ่ ของ table ทั้งหมดใน db_name นั้นๆ ไดเชนกัน • SHOW COLUMNS แสดงรายชื่อของ column ทั้งหมดใน table ที่กําหนด • SHOW TABLE STATUS แสดงขอมูลของแตละ table ซึ่งคุณสามารถใชคําสั่ง mysqlshow – status db_name ไดเชนกัน • SHOW STATUS แสดงขอมูลเกี่ยวกับสถานะการทํางานของ server 2.18. DESCRIBE syntax รูปแบบการใช DESCRIBE มีดังนี้

DESCRIBE ใชแสดงขอมูลเกี่ยวกับ columns ของ table tbl_name โดยที่ col_name อาจเปนตัว อักษร หรือ ‘%’ และ ‘_’ (wildcard character)

52 2.19. GRANT และ REVOKE syntax

คําสั่ง GRANT and REVOKE อนุญาติให admin ใหสิทธิ และ เพิกถอนสิทธิใหกับ MySQL users ซึ่งระดับของสิทธิในการใชงาน MySQL มีทั้งหมด 4 ระดับ ดังนี้ : (1) Global level เปนสิทธิที่ใชกับทุก database บน server ซึ่งขอมูลเกี่ยวกับสิทธิระดับทัว่ ไปเก็บ ไวใน mysql.user table (2) Database level เปนสิทธิเกี่ยวกับทุกตารางใน database ที่กําหนดให , ขอมูลเกี่ยวกับสิทธิ ระดับ database จะถูกเก็บไวใน mysql.db และ mysql.host table (3) Table level เปนสิทธิเกี่ยวกับทุกๆ column ใน table ที่กําหนดให ขอมูลเกี่ยวกับสิทธิระดับ table จะถูกเก็บไวใน mysql.tables_priv table (4) Column level เปนสิทธิเกี่ยวกับ column แตละ column ใน table ที่กําหนดให ซึ่งจะถูกเก็บไว ใน mysql.columns table ชนิดของสิทธิที่สามารถใชไดในคําสั่ง GRANT และ REVOKE คือ :

ALL : มีสิทธิครบทั้งหมด USAGE : ไมมีสิทธิใดๆ เลย

53 ชนิดของสิทธิที่ใชสําหรับ table คือ SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, GRANT, INDEX and ALTER. ชนิดของสิทธิที่ใชสํ าหรับ column คือ SELECT, INSERT and UPDATE. คุณสามารถกําหนด global privileges โดยใช ON *.* syntax และ สามารถกําหนด database privileges โดยใช ON db_name.* syntax. เพื่อใหการกําหนดสิทธิของ user สะดวกขึน้ , MySQL สนับสนุนการกําหนดคาของ user_name ใน รูปแบบของ user@host ซึ่งถาคุณตองการระบุ user string ที่มีตัวอักษรพิเศษเชน ‘-‘ หรือ host string ที่มี ตัวอักษรพิเศษ หรือ wildcard character(เชน ‘%’) คุณสามารถใชเครื่องหมาย quote ที่ชื่อ user และ host ได เชน ‘test-user’@’test-hostname’ เปนตน คุณสามารถใชเครื่องหมาย wildcards ใน host name ได เชน user@”%.cmu.ac.th” หมายถึงผูใชชื่อ user สําหรับทุกๆ host ใน cmu.ac.th domain และ user@”203.146.57.%” หมายถึงผูใชชื่อ user สําหรับทุก host ใน class C subnet 144.155.166 2.20. ! CREATE INDEX syntax รูปแบบการใชคําสั่ง CREATE INDEX มีดงั นี้

คําสั่งนี้นิยมใชรวมกับคําสั่ง ALTER TABLE ซึ่งโดยทั่วไปแลว คุณสามารถสราง index ใหกับ ตารางขอมูลไดในตอนแรกที่ตารางถูกสราง โดยการใชคําสั่ง CREATE TABLE. คําสั่ง CREATE INDEX อนุญาติใหคุณเพิ่ม index ใหกับตาราง สําหรับ column ที่มีชนิดขอมูลเปน CHAR และ VARCHAR , เราสามารถสราง index ใหกับขอมูล ทั้ง 2 ชนิดโดยใชเพียงสวนหนึ่งของ columns ได เชน หากตองการใหสราง index โดยใชตัวอักษร 10 ตัว แรกของ column ชื่อ name ใหใชคําสั่งดังนี้ : mysql> CREATE INDEX part_of_name ON customer (name(10));

54 2.21. DROP INDEX syntax รูปแบบการใชคําสั่ง DROP INDEX มีดังนี้

คําสั่งนี้ใชรวมกับ ALTER TABLE เพื่อลบ index ออกจาก column ที่ตองการ 5.22. ! COMMENT syntax MySQL อนุญาติใชสัญลักษณ # หรือ – เพื่อใชเริ่มตนเขียน comment จนถึงสิ้นสุดบรรทัด /* ใชเริ่มตนเขียน comment จนถึงสิ้นสุดที่สัญลักษณ */ เชน :

2.23. MySQL reserved words MySQL มีคําที่สงวนไว ซึ่งคุณไมสามารถนําคําเหลานีไ้ ปตั้งเปนชื่อตารางหรือ column ได ซึ่งคํา ดังกลาว ไดแก คําที่เปนชนิดของของมูลใน MySQL , คําที่เปนชื่อ function ที่มีใหใชใน MySQL (เชน TIMESTAMP,GROUP) เปนตน คุณสามารถใชชื่อ function ตั้งชื่อตารางหรือ column ไดเหมือนกัน แตเวลา เรียกใช function นั้นๆ ตองไมใหมีชองวางระหวางชื่อ function กับ เครื่องหมายวงเล็บเปดเด็ดขาด คําตางๆ ในตารางดานลาง เปนคําที่สงวนสําหรับ MySQL ซึ่งสวนใหญก็ไมสามารถใชตั้งชื่อ ตาราง หรือ column ไดตามมาตรฐานของ ANSI SQL92 ดวยเชนกัน

55

56

สัญลักษณจากตารางดานบนบางตัวไมสามารถใชตั้งเปนชื่อตารางหรือคอลัมนได ตามมาตรฐาน ของ SQL แตสําหรับ MySQL สามารถใชได สัญลักษณเหลานั้นไดแก • ACTION • BIT • DATE • ENUM • NO • TEXT • TIME • TIMESTAMP

57 3. MyODBC 3.1 การ install MyODBC บน Windows (1) unzip file myodbc-2_50_22-win95.zip (2) double click ที่ file setup.exe เพื่อ install program

(3) เมื่อ setup เสร็จแลว คุณจะเห็นหนาตาง Data Sources ดังรูปที่ (2) ใหเลือก sample-MySQL แลวกดปุม Setup เพื่อ setup Myodbc

(4) คุณจะเห็นหนาตางสําหรับ Default configuration ของ MyODBC ดังรูปที่ (3) ใหใสรายละเอียด ของ MySQL server ดังนี้ • Windows DSN name : ใหใสชื่อของ ODBC ที่คุณสรางขึ้น • MySQL host (name or IP): ใสชื่อเครื่อง หรือ IP ของเครื่องที่เปน MySQL server • MySQL database name: ใสชื่อ database ที่ตองการติดตอดวย • User: ใสชื่อ user เพื่อ login MySQL server • Password: ใสรหัสผาน

58 • Port: port ที่ตองการติดตอดวย ไมจําเปนตองใส (default = 3306) (5) กดปุม OK จากนั้นจะเห็น Data Sources Windows อีกครั้ง ใหกดปุม close

3.2 การสราง DSN ของ ODBC ไดหลาย DSN เพื่อใชใน application ตางกัน • เปด Control Panel • Double click ที่ไอคอน ODBC Data Sources 32 bits • Click ที่ tab User DSN • Click ที่ปุม Add • เลือก MySQL ในหนาจอ Create New Data Source จากนั้น click ปุม finish • คุณจะเห็นหนาตาง TCX MySQL Driver default configuration ดังรูปที่ (3) ซึ่งคุณสามารถ config • คาตางๆ ได

59 3.3 การใช Microsoft Access เชื่อมตอกับ MySQL วิธีการเชื่อมโยงขอมูลกันระหวาง Access กับ MySQL จะใช ODBC เปนตัวเชื่อม ซึ่งแบงไดเปน 2 กรณี คือ 1. การ Link table คุณสามารถดึงขอมูลจาก MySQL มาดูใน access ได ขอมูลที่อยูใน MySQL จะแสดงใหคุณดูใน รูปแบบของขอมูลใน Access ดวยวิธีการดังนี้ (1) สราง DSN ที่สํ าหรับ database ของ MySQL ที่คุณตองการติดตอดวย (2) ใช Microsoft office เปด database ที่ตองการจะ link table มาจาก MySQL (3) click ที่ file -> get external data -> Link Table… (4) เลือก File of type เปน ODBC database (5) เลือก tab Machine Data Source (6) คุณจะเห็น ODBC ที่มีใหเลือก ดังรูปที่ (4) ใหเลือก DSN ที่คุณตองการ (7) เลือก table ที่ตองการ Link เขามาใน Access

2. import/ export table การ import/export นี้ เปรียบเสมือนการคัดลอกขอมูลระหวาง Microsoft Access กับ MySQL ซึ่ง วิธีการเรียกใช ODBC ก็เหมือนกับวิธีการ Link table • Import -> เปนการดึงขอมูลจาก MySQL มาเก็บไวใน Microsoft Access • Export -> เปนการสงขอมูลจาก Microsoft Access ไปเก็บไวใน MySQL

60 4. วิธีใชงาน MySQL เบื้องตน 4.1 การ connect และ disconnect MySQL server การ connect ไปยัง server จะตองใช MySQL user name และ password ถา server run อยูบนเครื่อง อื่นคนตองบอก host name ของเครื่อง server ดวย เครื่องหมาย ******** จะปรากฏแทนที่ password ของคุณ เมื่อคุณปอน password หากคุณสามารถ login เขามาได คุณจะเห็น mysql> prompt ซึ่ง หมายถึง MySQL พรอมที่จะรับคําสั่งจากคุณ

หลังจากคุณสามารถ connect ไปยัง MySQL server ไดแลว คุณสามารถ disconnect ไดโดยพิมพคําวา quit หรือกดปุม Control-D

4.2 การพิมพคํ าสั่งเพื่อดึงขอมูลจาก database (Entering Queries) ในขั้นตน ใหพิมพคําสั่งเพื่อถาม version ของ MySQL server และ วันที่ปจจุบันของเครื่อง ตามตัว อยางขางลางแลวกดปุม Enter

• • • •

การ query ขอมูลขางตนแสดงใหเห็นวิธีการพิมพคําสั่งใหกับ MySQL ดังนี้ : ทุกๆ คําสั่งที่ประกอบดวย SQL statement จะตองปดทายดวยเครื่องหมาย semicolon (;) เมื่อคุณพิมพคําสั่งแลวกด Enter, MySQL จะสงคําสั่งไปยัง server เพื่อประมวลผล และจากนัน้ ก็แสดงผลลัพธกลับมาใหที่หนาจอ พรอมทั้งแสดง mysql> อีกครั้งเพื่อรอรับคําสั่งครั้งใหม mysql แสงผลลัพธของการ query ในรูปแบบของตาราง แถวแรกของตารางคือชื่อของ column หรือ expression ที่คุณปอนเขาไป สวนแถวถัดไปจะเปนผลลัพธที่ไดจากการ query mysql จะแสดงจํานวนแถว (records) ที่ไดจากการ query และ ใชเวลาในการ query นานเทาใด ซึ่งจะทําใหเราทราบถึงประสิทธิภาพของ server ไดอยางคราวๆ

61 Keywords ที่ใชอาจพิมพโดยใชตัวเล็กหรือตัวใหญก็ได เชน :

คุณสามารถใช mysql ในการคํานวณก็ได เชน :

คําสั่งที่ปอนเขาไปใน mysql> prompt ไมจําเปนตองอยูบรรทัดเดียวกันทั้งหมด เนื่องจาก mysql จะ พิจารณาวาทุกคําสั่งตองสิ้นสุดดวยเครื่องหมาย semicolon(;) เชน

จากตัวอยางขางตน จะเห็นวา prompt ของ mysql เปลี่ยนจาก mysql> เปน -> เมื่อคุณกดปุม enter โดยที่ยังไมใสเครื่องหมาย semicolon หากคุณตองการยกเลิกคําสั่งที่คุณพิมพไปแลว คุณสามารถยกเลิกได โดยการพิมพ \c

เมื่อคุณยกเลิกคําสั่งแลว prompt -> ก็จะกลับมาเปน mysql> เพื่อรอรับคําสั่งใหมตอไป

62 4.3 ตัวอยางของการ query 1. การสรางตาราง ใหทดลองสรางตารางชื่อ shop เพื่อเก็บราคาของหนังสือ สําหรับแตละตัวแทนจําหนาย

2. การสราง และ ใชงาน database (1) การสราง database ถา administrator สราง database ใหคุณในตอนที่ set up permission, คุณสามารถใชมันไดเลย หากยังคุณตองสราง database ขึ้นมาเอง ดังนี้: สําหรับการใชงานบน Linux, ชื่อของ database เปนแบบ case sensitive นั้นคือ database student ไมเหมือนกับ Student และ ไมเหมือนกับ STUDENT ซึ่งการตั้งชื่อ table ก็ใชกฎเดียวกันดวย การสราง database จะสรางขึ้นมาในครั้งแรกเพียงครั้งเดียวเทานั้น แตการใชงานแตคุณตองเลือก database กอนที่จะใชงานทุกครั้ง (2) การใชงาน database อีกวิธีคือ ระบุ database ที่ตองการใชงาน ตอน login ใช MySQL Server เลย

63 4.4 การ Load ขอมูลจากไฟล ลงไปใน ตาราง สมมติวาเราสราง database ชื่อ petshop และสราง table ชื่อ pet โดยใช syntax ดังนี้

หลังจากมี database และ สราง table ไดแลว เราจํ าเปนตองเรียนคํ าสั่ง LOAD DATA และ INSERT เพื่อนํ าขอมูลเขาไปเก็บใน table สมมติวาคุณสราง table pet โดยมีรายละเอียดของตารางและขอมูล ดังนี้

ถาคุณมีแต table วางๆ วิธีการงายๆ ที่จะ load ขอมูลเขา table คือ การสราง text file ซึ่งประกอบดวย แถวสําหรับสัตวแตละชนิด จากนั้นทํ าการ load ขอมูลใน file เขาไปไวใน table เชน สราง file ชื่อ pet.txt ที่ มี 1 record ตอ 1 บรรทัด ซึ่งคาแตละคาแยกจากการดวยเครื่องหมาย tab เรียงตามลํ าดับใน create table statement สํ าหรับ column ใดๆ ที่ไมมีขอมูลอยู ใหใสเครื่องหมาย \N เชน

การ load text file ชื่อ pet.txt ไปเก็บใน pet table ใชคําสั่ง

ถาคุณตองการเพิ่ม record เขาไปดวยการ INSERT ใหใชคําสั่ง โดยที่คาที่จะ insert เขาไป จะตองเรียงตาม column เหมือนกัน CREATE TABLE statement คาใดไม มี ใหใช NULL เติมแทน

64 4.5 การดึงขอมูลออกมาจากตาราง คําสั่ง SELECT ถูกใชในการดึงขอมูลออกมาจากตาราง รูปแบบทั่วไปของคําสั่ง select เขียนไดดังนี้

1. เลือกขอมูลทั้งตาราง วิธีการ select ขอมูลทั้งหมดมาจากตาราง

2. เลือกขอมูลเฉพาะบางแถว (บาง records) มีการใสเงื่อนไขลงไปใน WHERE clause เชน เลือกขอมูลของสัตวเลี้ยงที่ชื่อ “Bowser” เทานั้น

65 เลือกขอมูลของสัตวเลี้ยงที่เกิดหลังจากป 1999

คุณสามารถใสเงื่อนไขหลายๆ เงื่อนไขรวมกันได โดยใชคําเชื่อมเชน AND , OR

3. เลือกขอมูลเฉพาะบางคอลัมน คุณสามารถเลือกขอมูลออกมาเฉพาะ columns ได โดยการระบุชื่อ columns ใน SELECT statement

66 ตองการหาชื่อเจาของสัตวเลี้ยง

ตองการหาชื่อเจาของสัตวเลี้ยงโดยไมตองการใชแสดงชื่อซํ้ ากันใน record ใหใชคํ าสั่ง DISTINCT:

4.6 การใช Pattern matching SQL pattern matching ใช ‘_’ แทนที่ตวั อักษรใดๆ 1 ตัว และ `%' แทนที่ตวั อักษรใดๆ กี่ตัวก็ได สําหรับ MySQL, SQL patterns เปนการ match แบบ case insensitive เมื่อคุณใช SQL patterns ใหใช คําวา LIKE หรือ NOT LIKE ในการเปรียบเทียบ ตัวอยางเชน หาชื่อที่ขึ้นตนดวย ‘b’ :

67 หาชื่อที่ลงทายดวย ‘fy’ :

หาชื่อที่มี ‘w’ อยูตําแหนงใดก็ได ในชื่อ :

หาชื่อที่ประกอบดวยตัวอักษรอะไรก็ได จํานวน 5 ตัวอักษร ใหใชสัญลักษณ ‘_’ :

4.7 การนับจํ านวนแถวของของขอมูลที่ถูก select ใช function COUNT() ในการนับจํ านวนแถวที่ query ได โดยใชรวมกับ SELECT statement:

ถาตองการ query ชื่อเจาของ และ จํานวนสัตวเลี้ยงที่แตละคนมีอยู:

Related Documents

Mysql
November 2019 51
Mysql
November 2019 43
Mysql
June 2020 24
Mysql
October 2019 45
Mysql
June 2020 25
Mysql
May 2020 25