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 ชื่อเจาของ และ จํานวนสัตวเลี้ยงที่แตละคนมีอยู: