mysql thai

72
Introduction to… MySQL Database Server ภาควิชาวิศวกรรมคอมพิวเตอร คณะวิศวกรรมศาสตร มหาวิทยาลัยเชียงใหม

Upload: totiz

Post on 14-Nov-2014

895 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: Mysql Thai

Introduction to…

MySQLDatabase Server

ภาควชาวศวกรรมคอมพวเตอร คณะวศวกรรมศาสตรมหาวทยาลยเชยงใหม

Page 2: Mysql Thai

1.! บทท 1 Database Management System

1.1.!ความหมายของระบบฐานขอมลระบบฐานขอมลคอ โครงสรางสารสนเทศ (Information) ทประกอบดวยขอมลตางๆ เชน ขอมลของ

ลกคาของบรษท ขอมลรายการสนคา เปนตน ซงขอมลเหลานสามารถรวมเปนหวขอทสมพนธกนได ระบบฐานขอมลไดสรางวธการส าหรบการรวบรวมรายการ ขอมลทเกยวของกบงานนนๆเขาดวยกน สรางวธส าหรบการเกบและบ ารงรกษาขอมลเหลานน

ระบบฐานขอมลประกอบดวยสวนประกอบ 2 สวนคอ1.ระบบจดการฐานขอมล (Database Management System (DBMS)) เปนโปรแกรมทใชเพอจด

ระเบยบและบ ารงรกษารายการของขอมลเหลาน2.แอปพลเคชนฐานขอมล (Database Application) เปนโปรแกรมทชวยใหเราด และแกไขขอมลท

ถกเกบอยใน DBMSโดยปกตทง DBMS และ Database Application จะท างานอยบนเครองเดยวกน สวนมากทงสอง

สวนจะถกรวมอยภายในโปรแกรมเดยวกน แตขณะนความสนใจสวนมากไดมงไปทเทคโนโลยในการปฎวตDBMS คอเทคโนโลย Client/Server นนเอง

1.2.!ขอดในการใชโปรแกรมระบบจดการฐานขอมล(1)! ลดความซ าซอนของฐานขอมล(2)! ลดความผดพลาดของขอมล ในกรณทเรามการจดเกบขอมลไวหลายๆแหง การเปลยนแปลงแกไขขอมลจะเกดปญหาวาขอมลไมเหมอนกน ท าใหการท างานผดพลาดและเกดความเสยหายได ซงระบบฐานขอมลสามารถลดปญหาเหลานไดอยางด

(3)! สามารถใชขอมลรวมกนได ท าใหประหยดคาใชจายและลดความผดพลาด(4)! ควบคมความเปนมาตรฐานของขอมลได การจดเกบขอมลทมศนยกลางทเดยวท าใหสามารถควบคมรปแบบของขอมลได ท าใหขอมลเปนอนหนงอนเดยวกน งายตอการดแลรกษา

(5)! ความปลอดภยในการเกบรกษาขอมล เนองจากการเกบขอมลไวทศนยกลางขอมลทเดยวจงท าใหสามารถควบคมและจดสรรระดบของผใชทเขามาขอใชขอมลได เชนการก าหนดรหสผานใหการเขามาใชขอมล แบงระดบความปลอดภยของผเขามาใชขอมล

(6)!สามารถควบคมความถกตองของขอมลไดโดยงาย

1.3.!Relational Databaseเปน DBMS ประเภทหนงทนยมใชในปจจบน ในระบบ RDM ขอมลจะถกจดระเบยบเปนเซตในทาง

คณตศาสตรในโครงสรางของตาราง ฟลดขอมลแตละตวจะเปนคอลมนในตาราง และแตละเรคอรดจะกลายเปนแถวในตาราง

Relation Database มขอดทส าคญคอ ความยดหยนทสมบรณในการกลาวถงความสมพนธระหวางรายการขอมลทแตกตางกน การตดสนใจหลกๆของผออกแบบฐานขอมลคอการก าหนดตาราง RelationDatabase ถอวาเปนฐานขอมลแบบทน าไปสการพฒนาระบบ Client/Server ซงจะกลาวถงในหวขอตอไป

Page 3: Mysql Thai

2.! บทท 2 ระบบฐานขอมลแบบ Client/Serverระบบ Client/Server นเปนการแยกการท างานของ Font-end กบ Back-end ออกจากกนโดยผใช

สามารถทจะท าการท างานกบฐานขอมลไดโดยไมจ าเปนตองท างานอยทเครองทท าหนาทเกบฐานขอมลอยนนเราจะเรยกวา Back-end ในการน าเสนอระบบนอยางไรนนขนกบ Platform ท Font-end กบ Back-endท างานอย และระดบการจดการทถกแบงออกเปน 2 สวน

รปท 2.1 แสดงโครงสรางของระบบ Client/Server Database

2.1.!ขอด ของระบบฐานขอมลแบบ Client/Server(1)! การแบงแยกการจดการระหวางระบบของ Client และ Database Server ออกจากกนโดยการจดการฐานขอมลจะถกท าทสวนของ Back-end สวน DBMS จะถกจดการอยท Server ท าใหสามารถท าการขยายการใชงานของเครองคอมพวเตอรทมขนาดเลกหรอชาเกนกวาทจะสามารถท าการ Run DBMS ทซบซอนบนเครองนน

(2)! ชวยลดโหลด(Load)ใหกบระบบ Nerwork ทเชอมตอไดดวยแทนทจะตองท าการสงขอมลทงหมดไปและกลบผานทางสายแลน(LAN) ไปยงเครองทท าการตดตอเขามาท าใหการจราจรบนสายสงลดนอยลงเหลอเพยงแคการสง Query มาจาก Client มายงตวทเปนฐานขอมล เพอท างานอยางใดอยางหนง เมอ Server ไดรบ Query ทสงมากจะท าการค านวณและสงผลลพธกลบไปยง Client เพยงเทานน

"#$#%#&'!(')*')

+,-'.$

+,-'.$

+,-'.$

Page 4: Mysql Thai

(3)! การท างานของโปรแกรมไมขนกบเครองทท างาน ผใชจะไมถกจ ากดบนเครองระบบใดระบบหนงเทานน สามารถน าเอาโปรแกรมไปท างานบนเครองคอมพวเตอรเครองไหนกไดและสามารถท างานไดกบระบบปฎบตการไดหลายตวไมวาจะเปน MS-Windows,IBMOS/2,MS/PC-Dos เปนตนนอกจากน Client และ Server กไมจ าเปนตองใชฐานขอมลเดยวกน

(4)! การรกษาความถกตองของขอมล ในปจจบนระบบ Database Server สวนมากท างานบนDBMS ทใชการจดการแบบ Relation DBMS เมอผใชตองการทจะท าการแกไขคาของขอมลจะตองท าการ Log In เขามาใชงานท Server กอนท าใหขอมลไมกระจดกระจาย และมความถกตองอยเสมอ

(5)!การปกปองขอมล ทเครองทท าหนาทในการเกบขอมล (Server) บางครงอาจมการเขารหสทเกบไฟลโดยขอมลถกเขารหสเพอปองกนการดจากภายนอก DBMS ได

2.2.!ขอเสยของระบบ Client/Server(1)! การเพมคาใชจายในการจดการและเตรยมบคลากรทจะท าหนาทบ ารงรกษา Database Serverเมอจ านวนผใชมมากขนหรอเมอฐานขอมลมขนาดใหญมากขน นอกจากนการฝกฝนผควบคมระบบยงเปนคาใชจายทเพมขนในตอนเรมตนดวย เนองจากคนทเขามาท างานอาจจะไมคนเคยกบระบบทท าอย

(2)! การเพมคาใชจายทางดาน Hardware กจะเพมขน

Page 5: Mysql Thai

3.! บทท 3 เกยวกบ MySQLMySQL เปน 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’ และ clientprograms/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 mysqlshell> cd mysqlshell> scripts/mysql_install_dbshell> 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

Page 6: Mysql Thai

4.! บทท 4 ระบบการจดการกบสทธการเขาถงขอมล

4.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

4.2!ความรพนฐานเกยวกบการ connect MySQL serverMySQL 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 –pEnter password: *********

ในระบบ UNIX ผใชสามารถระบคาเรมตนในการ connect MySQL server ไดโดยระบภายในไฟล .my.cnf ในhome directory เชน

[client]host=hostnameuser=usernamepassword=yourpassword

เมอมการระบ password ในไฟลดงกลาว ควรก าหนดสทธในการเขาถงไฟลใหเปน 400 หรอ 600

4.3!ความรพนฐานเกยวกบ Privileges systemหนาทหลกของ privileges system คอการตรวจสอบสทธของ user ในการ connect MySQL

server,การใช query พนฐานเชน select, insert, update และ delete นอกจากนน privileges systemยงใชในการจดการสทธของ anonymous user, การเพมสทธในการใช function พเศษ เชน LOAD DATAINFILE และการบรหารระบบ MySQL

Page 7: Mysql Thai

4.4!ความรพนฐานเกยวกบ Privileges tablePrivileges 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 ได

mysql> insert into -> host(host,db,Select_priv,Insert_priv,Update_priv, -> Delete_priv,Create_priv,Drop_priv) -> values('localhost','student','Y', 'Y', 'Y', 'Y', 'Y', 'Y');

mysql> insert into -> host(host,db,Select_priv,Insert_priv,Update_priv, -> Delete_priv,Create_priv,Drop_priv) values('cpe','student','Y', 'Y', 'Y', 'Y', 'Y', 'Y');

โดยรปแบบ field host ทใชไดคอ localhost, hostname, เลข IP, ตวอกษรทใช wildcard เชนcp% หมายถงชอ host ทขนตนดวย cp เปนตน(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)

Page 8: Mysql Thai

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)

4.5!ระบบรกษาความปลอดภยทวไประบบรกษาความปลอดภยใน MySQL จะสามารถก าหนด หรอปรบเปลยน ไดจาก Access Control

Lists (ACL-s), SSL แตสงทส าคญทสดกคอการใชงาน MySQL อยางปลอดภย เมอ MySQLหลกการการใชงาน 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++

Page 9: Mysql Thai

-! ตรวจสอบการใช escape และ quote ในการ query(6)! การสงขอมลผานระบบเนตเวรกควรมการเขารหสโดยใช SSL

4.6!การปองกน MySQL ใหปลอดภยจาก crackers(1)! ตงรหสผานส าหรบผใชทกคนเสมอ โดยการตงหรอเปลยนรหสผานสามารถท าไดดงนShell> mysql –u username mysqlMysql> UPDATE user SET Password=PASSWORD(‘new_password’) WHEREuser=’username’;Mysql> FLUSH PRIVILEGES;

(2)! ไมควรสงให MySQL deamon ท างาน โดยเปน process ของ root(3)! ก าหนดสทธ Script ไฟล mysql.server ใหสามารถอานไดเฉพาะ root เทานน เมอมการก าหนดรหสผานของ UNIX root ใน script ดงกลาว

(4)! ก าหนดสทธในการอาน/เขยน directory ทใชเกบ database ใหแก UNIX user ทเปนเจาของprocess MySQL deamon เทานน

(5)! ไมควรก าหนดสทธ process ใหแก user ทกคน(6)! ไมควรก าหนดสทธ file ใหแก user ทกคน

4.7!เมอสทธของผใชถกเปลยนแปลง จะมผลตอผใชเมอใด ?เมอ 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 ครงตอไป

Page 10: Mysql Thai

4.8!การ 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 โดยใชวธการดงน

shell> mysql -u root mysqlmysql> UPDATE user SET Password=PASSWORD('new_password') WHERE user='root';mysql> FLUSH PRIVILEGES;

ใน MySQL 3.22 , คณสามารถใชค าสง SET PASSWORD ไดดงนshell> mysql -u root mysqlmysql> SET PASSWORD FOR root=PASSWORD('new_password');

อกวธในการ set password ของ root คอshell> mysqladmin -u root password new_password

4.9!การเพมผใช และ การจดการกบสทธของผใชคณสามารถเพม 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 ดงน :shell> mysql --user=root mysqlmysql> GRANT ALL PRIVILEGES ON *.* TO ooh@localhost IDENTIFIED BY 'something' WITH GRANT OPTION;mysql> GRANT ALL PRIVILEGES ON *.* TO ooh@"%" IDENTIFIED BY 'something' WITH GRANT OPTION;mysql> GRANT RELOAD,PROCESS ON *.* TO admin@localhost;mysql> GRANT USAGE ON *.* TO dummy@localhost;

Page 11: Mysql Thai

ค าสง GRANT เหลานเปนการสราง new users ขนมาใหม 3 users

oohเปน full superuser ซงสามารถ connect มายง server จากทไหนกได แตตองใช password

‘something’ ในการตดตอกบ server

admin

เปน user ทสามารถ connect จาก local host โดยไมใช password และสามารถใชสทธในการreload และ process MySQL ได นนคอ admin สามารถ run ค าสง mysqladmin reload, mysqladminrefresh และ mysql flush-* ได แตไมสามารถใช Database ไหนได ซงมนสามารถถก grant ไดภายหลงโดยใช GRANT statement

dummy

user สามารถ connect โดยไมใช password แตตองจาก local host เทานน สทธทวไปถก set ใหเปน ‘N’

คณสามารถ add ขอมลของ user เหลานไดโดยตรง โดยใช INSERT statements และ บอกให server reloadgrant tablesshell> mysql --user=root mysqlmysql> INSERT INTO user VALUES('localhost','ooh',PASSWORD('something'), 'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y')mysql> INSERT INTO user VALUES('%','ooh',PASSWORD('something'), 'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y')mysql> INSERT INTO user SET Host='localhost',User='admin', Reload_priv='Y', Process_priv='Y';mysql> INSERT INTO user (Host,User,Password) VALUES('localhost','dummy','');mysql> FLUSH PRIVILEGES;

ตวอยางตอไปน เปนการเพม user ชอ “custom” ซงสามารถ connect เขา server จาก hostlocalhost, server.domain และ cpe.cmu. user น ตองการเขาถง (access) เพยง database stuinfo จากlocalhost, database lecturerinfo จาก cpe.cmu และ database transcript จากทง 3 host โดยใช password‘manager’การ setup สทธตางๆ ของ user โดยการใช GRANT statements , ท าไดดงน : shell> mysql --user=root mysqlmysql> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP ON stuinfo.* TO custom@localhost IDENTIFIED BY 'manager';mysql> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP ON lecturerinfo.* TO [email protected] IDENTIFIED BY 'manager';mysql> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP ON transcript.* TO custom@'%' IDENTIFIED BY 'manager';

Page 12: Mysql Thai

หรอจะ set up สทธของ user จากการแกไขท grant table โดยตรงกได ดงน :shell> mysql --user=root mysql

mysql> INSERT INTO user (Host,User,Password) VALUES('localhost','custom',PASSWORD('manager'));mysql> INSERT INTO user (Host,User,Password) VALUES('server.domain','custom',PASSWORD('manager'));mysql> INSERT INTO user (Host,User,Password) VALUES('cpe.cmu','custom',PASSWORD('manager'));mysql> INSERT INTO db (Host,Db,User,Select_priv,Insert_priv,Update_priv,Delete_priv, Create_priv,Drop_priv) VALUES ('localhost','stuinfo','custom','Y','Y','Y','Y','Y','Y');mysql> INSERT INTO db (Host,Db,User,Select_priv,Insert_priv,Update_priv,Delete_priv, Create_priv,Drop_priv) VALUES ('whitehouse.gov','lecturerinfo','custom','Y','Y','Y','Y','Y','Y');mysql> INSERT INTO db (Host,Db,User,Select_priv,Insert_priv,Update_priv,Delete_priv, Create_priv,Drop_priv) VALUES('%','transcript','custom','Y','Y','Y','Y','Y','Y');mysql> FLUSH PRIVILEGES;

ค าสง 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 ดงน :mysql> GRANT ... ON *.* TO myusername@"%.mydomainname.com" IDENTIFIED BY 'mypassword';���� �� �������� ���� g rant tables ������ ��� ��� :mysql> INSERT INTO user VALUES ('%.mydomainname.com', 'myusername', PASSWORD('mypassword'),...);mysql> FLUSH PRIVILEGES;

4.10! วธการก าหนด passwordsจากตวอยางในหวขอทผานมาจะเหนไดวาเมอคณ INSERT หรอ UPDATE password คณตองใช

function PASSWORD() เพอเขารหส password เนองจากการกระท าเชนน ท าให password ถกเกบลงtable ในแบบทถกเขารหส เพอความปลอดภยของขอมล

หากคณลมใช function PASSWORD() , password กจะถกเกบในรปแบบของตวหนงสอ(plaintext)

Page 13: Mysql Thai

shell> mysql -u root mysqlmysql> INSERT INTO user (Host,User,Password) VALUES('%','jeffrey','biscuit');mysql> FLUSH PRIVILEGES;

จากค าสงน ผลลพธทไดคอ ค าวา ‘biscuit’ จะถกเกบเปน password ใน user table เมอ user jeffreyพยายาม connect มายง server โดยใช password น, mysql client จะ encrypt password ทสงเขามาโดยใชfunction PASSWORD() และสงผลลพธกลบไปให server และ server กจะท าการเปรยบเทยบคาใน usertable ซงเปนคา ‘biscuit’ กบ password ทถกสงมาแบบเขารหสซงไมใชคา ‘biscuit’ ผลลพธของการเปรยบเทยบกผด ดงนน server จงไมยอมให user login เขามาได

shell> mysql -u jeffrey -pbiscuit testAccess denied

วธการใช INSERT statement ทถกตอง ควรเขยนดงน :mysql> INSERT INTO user (Host,User,Password) VALUES('%','jeffrey',PASSWORD('biscuit'));

หรอคณจะใช PASSWORD() ส าหรบ SET PASSWORD statements กได ดงน :mysql> SET PASSWORD FOR jeffrey@"%" = PASSWORD('biscuit');

ถาคณ set password โดยใช GRANT ... IDENTIFIED BY statement หรอ ใช ค าสง mysqladminpassword กไมจ าเปนตองใช function PASSWORD() เนองจากมนจะท าการเขารหสใหโดยอตโนมต ดงน :mysql> GRANT USAGE ON *.* TO jeffrey@"%" IDENTIFIED BY 'biscuit';

หรอ ใช mysqladminshell> mysqladmin -u jeffrey password biscuit

Page 14: Mysql Thai

5.! บทท 5 Language Reference

5.1.!วธการเขยนสตรง และ ตวเลข

5.1.1.! สตรงสตรง คอ ตวอกขระทน ามาเขยนเรยงกน ซงจะถกลอมดวยเครองหมาย single quote (‘’)

หรอ double quote (“”) กได เชน'a string'"another string"

ส าหรบสญลกษณพเศษบางอยางทใชใน string ทเรยกวา escape character นน ตองใชเครองหมาย backslash (‘\’) ซง escape character ใน MySQL นน มดงตอไปน

Escape character Meaning\0 NULL character\n newline character\t Tab character\r Carriage return character\b Backspace character\’ Single quote character\” Double quote character\\ Backslash character\% Wildcard character\_ Wildcard character

วธการทจะเขยน string ทม quotes รวมอยดวย มหลายวธ ดงน• ! เครองหมาย ‘ ใน string ทอยในเครองหมาย ‘’ สามารถเขยนดวย ’’• ! เครองหมาย “ ใน string ทอยในเครองหมาย “” สามารถเขยนดวย "".• ! คณสามารถใชเครองหมาย ‘\’ อยขางหนา quote character กได• ! เครองหมาย ‘ ใน string ทอยในเครองหมาย !" สามารถเขยนไดเลย• ! เครองหมาย “ ใน string ทอยในเครองหมาย ‘’ กสามารถเขยนไดเลย

Page 15: Mysql Thai

mysql> SELECT 'hello', '"hello"', '""hello""', 'hel''lo', '\'hello';+-------+---------+-----------+--------+--------+| hello | "hello" | ""hello"" | hel'lo | 'hello |+-------+---------+-----------+--------+--------+

mysql> SELECT "hello", "'hello'", "''hello''", "hel""lo", "\"hello";+-------+---------+-----------+--------+--------+| hello | 'hello' | ''hello'' | hel"lo | "hello |+-------+---------+-----------+--------+--------+

mysql> SELECT "This\nIs\nFour\nlines";+--------------------+| ThisIsFourlines |+--------------------+

5.1.2.! ตวเลขinterger number คอ กลมของตวเลขทเรยงตอกน สวน float number นนจะมการใช

เครองหมาย . เพอท าการแยกสวนทศนยมออก โดยทง interger และ float numbers นนสามารถมคาเปนลบได ก าหนดโดยใชเครองหมาย – น าหนา ดงตวอยางตอไปน

12210-32294.42-32032.6809e+10148.00

จะเหนไดวาเลขจ านวนเตมนนสามารถอางอยในรปของ float number ไดเชนกน

5.1.3.! เลขฐานสบหกMySQL นนสามารถอางถงตวเลขฐานสบหกได เมอ MySQL ท าการประมวลผลแลวจะ

สามารถแปลงเลขฐานสบหกเปนเลขฐานสบ หรอแปลงเปนอกขระกได โดยเลขฐานสบหกสองตวตดกนจะถกแปลงเปนอกขระหนงตว ดงตวอยางตอไปนmysql> SELECT 0xa+0

-> 10mysql> select 0x5061756c;

-> Paul

5.1.4.! NULL valueNULL values หมายถง ไมมคา ซงแตกตางจากคาศนยในระบบตวเลข หรอ empty string

ในขอมลประเภท string โดย NULL สามารถอางไดโดยใสเครองหมาย backslash น าหนา ดงน \N

Page 16: Mysql Thai

5.1.5.! Database, table, index, column, alias namesในการตงชอ database, table, index, column และ alias นน มกฎในการตงชอ ดงตารางตอไปน

Identifier max length Allowed charactersDatabase 64 ใชอกขระใดกไดทอนญาตใหใชในการตง directory name ยกเวนเครองหมาย /

Table 64 ใชอกขระใดกไดทอนญาตใหใชในการตง file name ยกเวนเครองหมาย / หรอ .Column 64 ใชอกขระใดกไดAlias 255 ใชอกขระใดกได

หมายเหต หากวาชอของ database หรอ table หรอ column หรอ alias นนไปตรงกบชอค าสงเฉพาะของMySQL แลว จะสามารถอางถงไดโดยตองใสเครองหมาย ' ' ครอบชอนนๆไวเสมอ ดงตวอยางตอไปน

SELECT * from `select` where `select`.id > 100;

ส าหรบการอางถง columns นนสามารถท าไดตามกฎเกณฑดงในตารางตอไปน

Column reference Meaningcol_name เปนการอางถง Column col_name ใน table ทก าลงถกใชอยtbl_name.col_name อางถง Column col_name จาก table tbl_name ของ database ทก าลงเรยกใชอยdb_name.tbl_name.col_name

อางถง Column col_name จาก table tbl_name ของ database db_name. สามารถอางแบบนไดเฉพาะ MySQL 3.22 หรอรนทใหมกวา

`column_name` เปนการอางถง column ทมชอเหมอนกบค าสงเฉพาะของ MySQL

เราไมจ าเปนทจะตองอางถง 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

5.1.6.! Case sensitivity in namesใน MySQL นน databases และ tables จะมลกษณะเชนเดยวกบ directory และ file ใน

directory นน ดงนนในการตงชอ databases และ tables นน ส าหรบระบบปฏบตการ unix นนอกขระตวพมพใหญและตวพมพเลกจะมความแตกตางกน ถอเปนคนละตวกน แตในระบบปฏบตการ Win32 นนอกขระตวพมพใหญหรอเลกนนเหมอนกน

หมายเหต ถงแมวาชอของ database และ table นนจะไมเกดปญหาในการอางชอดวยตวพมพเลกหรอตวพมพใหญกตาม เราไมควรทจะอางถง database และ table โดยใชทงตวพมพเลกและตวพมพใหญพรอมๆกนในการท า query ครงหนงๆ จากตวอยางตอไปนเราไมสามารถอางถงtable ดวยชอ my_table และ MY_TABLE ในการท า query อนเดยวกนได

Page 17: Mysql Thai

mysql> SELECT * FROM my_table WHERE MY_TABLE.col=1;

สวน Column names นนจะสามารถอางถงไดโดยตองระบถงชอของ column ใหถกตองโดยอกขระตวพมพเลกและตวพมพใหญนนมความแตกตางกน ไมวาจะเปนระบบ unix หรอ Win32

การท า alias บน table กตองอางถงดวยตวพมพเลกหรอตวพมพใหญอยางใดอยางหนงเทานนในการท า query ครงหนง ดงตวอยางตอไปน จะเหนไดวาไมสามารถอางถง table เดยวกนดวยชอ A และ a ได

mysql> SELECT col_name FROM tbl_name AS a WHERE a.col_name = 1 OR A.col_name = 2;

แตการท า alias บน column นนจะไมเกดปญหาถงแมวาเราจะอางดวยทงตวพมพเลกหรอตวพมพใหญ

5.2.!ชนดของขอมลคอลมนColumn ทสามารถมไดใน MySQL แตละชนดตองการเนอทในการเกบขอมลตางกน ดงน

5.2.1.! ขอมลชนดตวเลขColumn type Storage requiredTINYINT 1 byteSMALLINT 2 bytesMEDIUMINT 3 bytesINT 4 bytesINTEGER 4 bytesBIGINT 8 bytesFLOAT(X) 4 if X <= 24 or 8 if 25 <= X <= 53FLOAT 4 bytesDOUBLE 8 bytesDOUBLE PRECISION 8 bytesREAL 8 bytesDECIMAL(M,D) M bytes (D+2, if M < D)NUMERIC(M,D) M bytes (D+2, if M < D)

Page 18: Mysql Thai

5.2.2.! ขอมลชนดวนท และ เวลาColumn type Storage requiredDATE 3 bytesDATETIME 8 bytesTIMESTAMP 4 bytesTIME 3 bytesYEAR 1 byte

หากไมมขอมลใน column ชนด date และ time (Zero value) คาทเกบลงใน column แสดงดงตารางตอไปนColumn type ``Zero'' valueDATETIME '0000-00-00 00:00:00'DATE '0000-00-00'TIMESTAMP 00000000000000 (length depends on display size)TIME '00:00:00'YEAR 0000

5.2.3.! ขอมลชนดสตรงColumn type Storage requiredCHAR(M) M bytes, 1 <= M <= 255VARCHAR(M) L+1 bytes, where L <= M and 1 <= M <= 255TINYBLOB, TINYTEXT L+1 bytes, where L < 2^8BLOB, TEXT L+2 bytes, where L < 2^16MEDIUMBLOB,MEDIUMTEXT L+3 bytes, where L < 2^24

LONGBLOB,LONGTEXT L+4 bytes, where L < 2^32

ENUM('value1','value2',...)

1 or 2 bytes, depending on the number of enumeration values (65535values maximum)

SET('value1','value2',...) 1, 2, 3, 4 or 8 bytes, depending on the number of set members (64members maximum)

Page 19: Mysql Thai

5.3.!Functions for use in SELECT and WHERE clausesselect_expression หรอ where_definition ในประโยค SQL สามารถจะใสนพจนใดทใชฟงกชนดง

ทจะอธบายตอไปได นพจนทม NULL จะไดคาทเปน NULL เสมอ เวนแตวาในนพจนนนจะมฟงกชนและตวกระท าตวอนอยในนน (หมายเหต หามมชองวางหรอวงเลบในชอฟงกชน)

ตวอยาง

mysql> select MOD(29,9); -> 2

5.3.1 ฟงกชนการรวมกลม

( ... ) วงเลบ ใชในการจดล าดบของการประมวลผลในนพจน ตวอยางเชน

mysql> select 1+2*3; -> 7mysql> select (1+2)*3; -> 9

5.3.2 ตวกระท าทางคณตศาสตรทวไปประกอบดวยตวกระท าทางคณตศาสตรทใชกนบอยๆ เชน +, -, * , /

ตวอยาง

+ : การบวก

mysql> select 3+5; -> 8

- : การลบ

mysql> select 3-5; -> -2

* : การคณ

mysql> select 3*5; -> 15mysql> select 18014398509481984*18014398509481984.0; -> 324518553658426726783156020576256.0mysql> select 18014398509481984*18014398509481984; -> 0

ผลลพธของนพจนสดทายไมถกตองเพราะวาผลลพธของการคณเลขจ านวนเตมเกนคาในชวงการค านวณของ BIGINT 64 บท

Page 20: Mysql Thai

/ : การหาร

mysql> select 3/5; -> 0.60

การหารดวยคาศนย ผลลพธจะไดเปนคา NULL

mysql> select 102/(1-1); -> NULL

5.3.3 Bit functions

MySQL ใช BIGINT 64 บทในการกระท าแบบบทดงนนตวกระท าจงมขนาดใหญสดได64 บท

ตวกระท าทางบท ไดแก

|###$##Bitwise OR

mysql> select 29 | 15; -> 31

& : Bitwise AND

mysql> select 29 & 15; -> 13

<< : การเลอนตวเลขจ านวนเตมไปทางซาย

mysql> select 1 << 2 -> 4

>> : การเลอนตวเลขจ านวนเตมไปทางซาย

mysql> select 4 >> 2 -> 1

~ : เปลยนคาบททงหมดใหเปนคาตรงกนขาม

mysql> select 5 & ~1 -> 4

Page 21: Mysql Thai

BIT_COUNT(N)

สงกลบจ านวนบททใชในการนบเลขจ านวน N

mysql> select BIT_COUNT(29); -> 4

5.3.4 Logical operations

ฟงกชนตรรกทงหมดจะสงคากลบเปน 1 (จรง) หรอ 0 (เทจ) เทานนฟงกชนทางตรรก ไดแก

NOT : !

NOT จะสงคา 1 กลบถาอารกวเมนตเปน 0 และสง 0 กลบถาอารกวเมนตเปนหนง ถาเปน NOTNULL จะสงกลบคา NULL เชน

mysql> select NOT 1; -> 0mysql> select NOT NULL; -> NULLmysql> select ! (1+1); -> 0mysql> select ! 1+1; -> 1

OR : ||

OR จะสงคา 0 ถามอารกวเมนตทเปน 1 หรอ NULL มฉะนนจะสงคา 1 ตวอยางเชน

mysql> select 1 || 0; -> 1mysql> select 0 || 0; -> 0mysql> select 1 || NULL; -> 1

AND : &&

AND จะสงคา 0 ถามอารกวเมนตทเปน 0 หรอ NULL มฉะนนจะสงคา 1 ตวอยางเชน

mysql> select 1 && NULL;

Page 22: Mysql Thai

-> 0mysql> select 1 && 0; -> 0

5.3.5 Comparison operators

ผลการเปรยบเทยบไดคาเปน 1 หรอ 0 หรอ NULL เทานน ฟงกชนเหลานใชไดกบตวเลขและตวอกษร ถาเปนตวอกษรมนจะถกแปลงใหเปนตวเลขและจากตวเลขเปนตวอกษรถาจ าเปน

MySQL จะท าการเปรยบเทยบโดยอาศยกฎตอไปน• ! ถามอารกวเมนตหนงตวหรอมากกวาเปน NULL ผลลพธจะออกมาเปน NULL ยกเวนตวกระท า <=>

• ! ถาอารกวเมนตทงสองตวในการเปรยบเทยบเปนตวอกษร มนกจะถกเปรยบเทยบเปนตวอกษร

• ! ถาอารกวเมนตทงสองตวเปนตวเลข กจะเปรยบเทยบเปนตวเลข• ! คาเลขฐานสบหกจะถกท าเปนเลขฐานสองของตวอกษรในกรณทไมไดท าการเปรยบเทยบกบตวเลข

• ! ถาอารกวเมนตตวหนงเปนคอลมน TIMESTAMP หรอ DATETIME และอารกวเมนตตวอนเปนคาคงท คาคงทจะถกแปลงเปน timestamp กอนทจะท าการเปรยบเทยบ

ตวอยาง

mysql> SELECT 1 > '6x'; -> 0mysql> SELECT 7 > '6x'; -> 1mysql> SELECT 0 > 'x6'; -> 0mysql> SELECT 0 = 'x6'; -> 1

ตวกระท าเปรยบเทยบ ไดแก

= : Equal

mysql> select 1 = 0; -> 0mysql> select '0' = 0; -> 1mysql> select '0.0' = 0;

Page 23: Mysql Thai

-> 1mysql> select '0.01' = 0; -> 0mysql> select '.01' = 0.01; -> 1

<> : != : Not equal

mysql> select '.01' <> '0.01'; -> 1mysql> select .01 <> '0.01'; -> 0mysql> select 'zapp' <> 'zappp'; -> 1

<= : Less than or equal

mysql> select 0.1 <= 2; -> 1

< : Less than

mysql> select 2 <= 2; -> 1

>= : Greater than or equal

mysql> select 2 >= 2; -> 1

> : Greater than

mysql> select 2 > 2; -> 0

<=> : Null safe equal

Page 24: Mysql Thai

mysql> select 1 <=> 1, NULL <=> NULL, 1 <=> NULL; -> 1 1 0

IS NULL และ IS NOT NULL

ใชตรวจสอบวาคาเปน NULL หรอ NOT NULL

mysql> select 1 IS NULL, 0 IS NULL, NULL IS NULL: -> 0 0 1mysql> select 1 IS NOT NULL, 0 IS NOT NULL, NULL IS NOT NULL; -> 1 1 0

expr BETWEEN min AND max

ถา expr มคามากกวาหรอเทากบคา min และ expr มคานอยกวาหรอเทากบคา maxBETWEEN จะสงคา 1 มฉะนนเปน 0

การเปรยบเทยบแบบนมคาเทากบนพจน (min <= expr AND expr <= max)

mysql> select 1 BETWEEN 2 AND 3; -> 0mysql> select 'b' BETWEEN 'a' AND 'c'; -> 1mysql> select 2 BETWEEN 2 AND '3'; -> 1mysql> select 2 BETWEEN 2 AND 'x-3'; -> 0

expr IN (value,...)

การเปรยบเทยบนจะสงคา 1 ถา expr คอคาใดๆ ในรายการทอยขางหลงค าวา IN มฉะนนกจะสงคา 0 ตวอยาง

mysql> select 2 IN (0,3,5,'wefwf'); -> 0mysql> select 'wefwf' IN (0,3,5,'wefwf'); -> 1

Page 25: Mysql Thai

expr NOT IN (value,...)

มคาเทากบ NOT (expr IN (value,...)).

ISNULL(expr)

ถา expr เปน NULL, ISNULL() จะสงคา 1, มฉะนนจะสงคา 0.

mysql> select ISNULL(1+1); -> 0mysql> select ISNULL(1/0); -> 1

COALESCE(list)

สงคาของตวแรกในวงเลบทไมใช NULL ตวอยาง

mysql> select COALESCE(NULL,1); -> 1mysql> select COALESCE(NULL,NULL,NULL); -> NULL

INTERVAL(N,N1,N2,N3,...)

สงกลบคา 0 ถา N < N1, และ 1 ถา N < N2 อารกวเมนตทกตวจะถกมองเปนตวเลขจ านวนเตม และมขอก าหนดวา N1 < N2 < N3 < ... < Nn เพอใหฟงกชนนท างานไดอยางถกตอง ตวอยาง

mysql> select INTERVAL(23, 1, 15, 17, 30, 44, 200); -> 3mysql> select INTERVAL(10, 1, 10, 100, 1000); -> 2mysql> select INTERVAL(22, 23, 30, 44, 200); -> 0

5.3.6 การเปรยบเทยบสตรง

โดยทวไปแลว การเปรยบเทยบสตรงจะแบงแยกตวใหญตวเลก

การเปรยบเทยบสตรงจะไดคา 0(เทจ) หรอ 1 (จรง) โดยการใช LIKE ในการเปรยบเทยบ คณสามารถใชอกขระ ตอไปนในรปแบบการเปรยบเทยบได

Page 26: Mysql Thai

% แทนตวอกขระตงแตศนยตวขนไป_ แทนอกขระตวเดยว

ตวอยางmysql> select 'David!' LIKE 'David_'; -> 1mysql> select 'David!' LIKE '%D%v%'; -> 1

ถาตองการเปรยบเทยบอกขระตวเดยวดวยการระบอกขระ ใหใช “\” น าหนาอกขระทตองการจะเปรยบเทยบในรปแบบ

\% แทนอกขระ % หนงตว\_ แทนอกขระ _ หนงตว

ตวอยางmysql> select 'David!' LIKE 'David\_'; -> 0mysql> select 'David_' LIKE 'David\_'; -> 1

ในการก าหนกอกขระ ESCAPE ตวอน ใหใชประโยค ESCAPE ในการก าหนด เชน

mysql> select 'David_' LIKE 'David|_' ESCAPE '|'; -> 1

expr NOT LIKE pat [ESCAPE 'escape-char'] มความหมายเชนเดยวกบประโยค

NOT (expr LIKE pat [ESCAPE 'escape-char']).

expr REGEXP pat

expr RLIKE pat

ทงสประโยคขางตนน ใชในการเปรยบเทยบนพจนสตรง expr กบรปแบบ pat RLIKE เปนค าเหมอนของ REGEXP ใชไดกบ mSQL ตวอยาง

mysql> select 'Monty!' REGEXP 'm%y%%'; -> 0mysql> select 'Monty!' REGEXP '.*';

Page 27: Mysql Thai

-> 1mysql> select 'new*\n*line' REGEXP 'new\\*.\\*line'; -> 1mysql> select "a" REGEXP "A", "a" REGEXP BINARY "A"; -> 1 0

expr NOT REGEXP pat

expr NOT RLIKE pat

มความหมายเหมอนกบประโยค NOT (expr REGEXP pat).

STRCMP(expr1,expr2)

STRCMP()

จะใหคา 0 ถาสตรงเหมอนกน ใหคา -1 ถาอารกวเมนตตวแรกมคานอยกวาตวทสอง มฉะนนไดคา 1 ตวอยาง

mysql> select STRCMP('text', 'text2'); -> -1mysql> select STRCMP('text2', 'text'); -> 1mysql> select STRCMP('text', 'text'); -> 0

5.3.7 Cast operators

BINARY

ตวกระท า BINARY ใชในการก าหนดสตรงทตอทายใหเปนเลขฐานสองของสตรง วธชวยใหการเปรยบเทยบคอลมนเปนแบบ case sensitive ตวอยาง

mysql> select "a" = "A"; -> 1mysql> select BINARY "a" = "A"; -> 0

Page 28: Mysql Thai

5.3.8 ฟงกชนควบคมทศทางการท างาน

IFNULL(expr1,expr2)

ถา expr1 ไมใช NULL, IFNULL() จะใหคา expr1, มฉะนนจะใหคา expr2. IFNULL() จะใหคา ตวเลขหรอสตรง ขนอยกบวาใชแบบไหน ตวอยาง

mysql> select IFNULL(1,0); -> 1mysql> select IFNULL(0,10); -> 0mysql> select IFNULL(1/0,10); -> 10mysql> select IFNULL(1/0,'yes'); -> 'yes'

IF(expr1,expr2,expr3)

ถา expr1 เปนจรง (TRUE) โดยท (expr1 <> 0 and expr1 <> NULL) แลว IF() จะใหคา expr2,มฉะนนจะใหคา expr3. IF() จะใหคาตวเลขหรอสตรงขนอยกบวาคาไหนถกใช ตวอยาง

mysql> select IF(1>2,2,3);

-> 3mysql> select IF(1<2,'yes','no'); -> 'yes'mysql> select IF(strcmp('test','test1'),'yes','no'); -> 'no'

expr1 ถกค านวนโดยใชเปนเลขจ านวนเตม ซงหมายความวาถาคณใชเปน floating-point หรอสตรงคณกสามารถใชฟงกชนนดวยการเปรยบเทยบได ตวอยาง

mysql> select IF(0.1,1,0); -> 0mysql> select IF(0.1<>0,1,0); -> 1

Page 29: Mysql Thai

5.3.9 ฟงกชนทางคณตศาสตร

ฟงกชนทางคณตศาสตรทงหมดจะใหคาเปน NULL หากเกดขอผดพลาดขน

- : เครองหมายลบ เปลยนคาเลขลบใหเปนบวก และเปลยนคาบวกใหเปนลบ ตวอยาง

mysql> select - 2; -> -2

ABS(X)

ใหคาสมบรณของ X ตวอยางเชน

mysql> select ABS(2); -> 2mysql> select ABS(-32); -> 32

SIGN(X)

ใหคาบวกหรอลบของอารกวเมนต ขนอยกบวาคานนเปนลบหรอบวก ตวอยาง

mysql> select SIGN(-32); -> -1mysql> select SIGN(0); -> 0mysql> select SIGN(234); -> 1

MOD(N,M) : %

ใหคาเศษจากการหาร N ดวย M ตวอยาง เชน

mysql> select MOD(234, 10); -> 4mysql> select 253 % 7; -> 1mysql> select MOD(29,9); -> 2

Page 30: Mysql Thai

FLOOR(X)

ใหคาเลขจ านวนเตมทใหญทสดทไมมากเกน X ตวอยางเชน

mysql> select FLOOR(1.23); -> 1mysql> select FLOOR(-1.23); -> -2

CEILING(X)

ใหคาเลขจ านวนเตมทเลกทสดทไมนอยกวา X ตวอยางเชน

mysql> select CEILING(1.23); -> 2mysql> select CEILING(-1.23); -> -1

ROUND(X)

ใหคาเลขจ านวนเตมทเอา X มาปดเศษแแลว ตวอยางเชน

mysql> select ROUND(-1.23); -> -1mysql> select ROUND(-1.58); -> -2mysql> select ROUND(1.58); -> 2

ROUND(X,D)

ใหคาเลข X ทมจ านวนทศนยมเทากบ D ต าแหนง ตวอยางเชน

mysql> select ROUND(1.298, 1); -> 1.3mysql> select ROUND(1.298, 0); -> 1

Page 31: Mysql Thai

EXP(X)

ใหคาเอกซโพเนนเชยลของ X เชน

mysql> select EXP(2); -> 7.389056mysql> select EXP(-2); -> 0.135335

LOG(X)

ใหคาลอการทมของ X ตวอยางเชน

mysql> select LOG(2); -> 0.693147mysql> select LOG(-2); -> NULL

LOG10(X)

ใหคาลอการทมฐาน 10 ของ X ตวอยางเชน

mysql> select LOG10(2); -> 0.301030mysql> select LOG10(100); -> 2.000000mysql> select LOG10(-100); -> NULL

POW(X,Y)

POWER(X,Y)

ใหคาของ X ยกก าลง Y ตวอยางเชน

mysql> select POW(2,2); -> 4.000000mysql> select POW(2,-2); -> 0.250000

Page 32: Mysql Thai

SQRT(X)

ใหคาสแควรทของ X ตวอยางเชน

mysql> select SQRT(4); -> 2.000000mysql> select SQRT(20); -> 4.472136

PI()

ใหคาของ PI ตวอยางเชน

mysql> select PI(); -> 3.141593

COS(X)

ใหคาโคซายของ X, เมอ X มหนวยเปนเรเดยน ตวอยาง

mysql> select COS(PI()); -> -1.000000

SIN(X)

ใหคาซายของ X, เมอ X มหนวยเปนเรเดยน ตวอยาง

mysql> select SIN(PI()); -> 0.000000

TAN(X)

ใหคาแทนของ X, เมอ X มหนวยเปนเรเดยน ตวอยาง

mysql> select TAN(PI()+1); -> 1.557408

Page 33: Mysql Thai

ACOS(X)

ใหคาอารคโคซายอง X ตวอยาง

mysql> select ACOS(1); -> 0.000000mysql> select ACOS(1.0001); -> NULLmysql> select ACOS(0); -> 1.570796

ASIN(X)

ใหคาอารคซายของ X ตวอยางเชน

mysql> select ASIN(0.2); -> 0.201358mysql> select ASIN('foo'); -> 0.000000

ATAN(X)

ใหคาอารคแทนเจนทของ X ตวอยาง

mysql> select ATAN(2); -> 1.107149mysql> select ATAN(-2); -> -1.107149

ATAN2(X,Y)

ใหคาอารคแทนเจนทของตวแปร X และ Y ตวอยางเชน

mysql> select ATAN(-2,2); -> -0.785398mysql> select ATAN(PI(),0); -> 1.570796

Page 34: Mysql Thai

COT(X)

ใหคาโคแทนเจนทของ X ตวอยางเชน

mysql> select COT(12); -> -1.57267341mysql> select COT(0); -> NULL

RAND()

RAND(N)

ใหคาเลข floating-point สมในชวงของ 0 ถง 1.0 คา N ถาใสจะเปน seed value ตวอยางเชน

mysql> select RAND(); -> 0.5925mysql> select RAND(20); -> 0.1811mysql> select RAND(20); -> 0.1811mysql> select RAND(); -> 0.2079mysql> select RAND(); -> 0.7888

5.3.1.! ฟงกชนเกยวกบสตรง

ASCII(str)

Return รหส ASCII ของตวอกษรทอยซายสดของ string strReturn NULL ถา str เปน empty string

mysql> select ASCII('2'); -> 50mysql> select ASCII(2); -> 50mysql> select ASCII('dx'); -> 100

Page 35: Mysql Thai

BIN(N)

Return คา Binary ของ N ซง N สามารถมคาไดเทากบ BIGINTReturns NULL ถา N เปน NULL

mysql> select BIN(12); -> '1100'

OCT(N)

Return คา Octal ของ N ซง N สามารถมคาไดเทากบ BIGINT

Return NULL ถา N เปน NULL

mysql> select OCT(12); -> '14'

HEX(N)

Return คา Hexadecimal ของ N ซง N สามารถมคาไดเทากบ BIGINT

Return NULL ถา N เปน NULL

mysql> select HEX(255); -> 'FF'

CHAR(N,...)

Return string ของรหส ASCII Nmysql> select CHAR(77,121,83,81,'76'); -> 'MySQL'mysql> select CHAR(77,77.3,'77.3'); -> 'MMM'

LENGTH(str)

Return ความยาวของ string str

mysql> select LENGTH('text'); -> 4

Page 36: Mysql Thai

LOCATE(substr,str)

POSITION(substr IN str)

Return ต าแหนงของ ตวอกษรตวแรกของ substring substr ใน string str.Return 0 ถา substr ไมอยใน str

mysql> select LOCATE('bar', 'foobarbar'); -> 4mysql> select LOCATE('xbar', 'foobar'); -> 0

LOCATE(substr,str,pos)

Return ต าแหนงของ ตวอกษรตวแรกของ substring substr ใน string str โดยเรมคนหาตงแตต าแหนง pos

Return 0 ถา substr ไมอยใน strmysql> select LOCATE('bar', 'foobarbar',5); -> 7

INSTR(str,substr)

เหมอนกบ LOCATE เพยงแตสลบท argumentReturn ต าแหนงของ ตวอกษรตวแรกของ substring substr ใน string strReturn 0 ถา substr ไมอยใน str

mysql> select INSTR('foobarbar', 'bar'); -> 4mysql> select INSTR('xbar', 'foobar'); -> 0

LPAD(str,len,padstr)

Return string str ซงจะเตมตวอกษรทางซายของ str ดวยเครองหมาย padstr จน string มความยาวเทากบ len ตวอกษร

mysql> select LPAD('hi',4,'??'); -> '??hi'

Page 37: Mysql Thai

RPAD(str,len,padstr)

Return string str ซงจะเตมตวอกษรทางขวาของ str ดวยเครองหมาย padstr จน string มความยาวเทากบ len ตวอกษร

mysql> select RPAD('hi',5,'?'); -> 'hi???'

LEFT(str,len)

Return ตวอกษรทอยดานซายสดของ string str จ านวน len ตวอกษรmysql> select LEFT('foobarbar', 5); -> 'fooba'

RIGHT(str,len)

Return ตวอกษรทอยดานขวาสดของ string str จ านวน len ตวอกษรmysql> select RIGHT('foobarbar', 4); -> 'rbar'

SUBSTRING(str,pos,len)

SUBSTRING(str FROM pos FOR len)

MID(str,pos,len)

Return string ทมความยาวเทากบ len ตวอกษร จาก str เรมจากต าแหนง posmysql> select SUBSTRING('Quadratically',5,6); -> 'ratica'

SUBSTRING(str,pos)

SUBSTRING(str FROM pos)

Returns substring จาก str โดยเรมตงแตต าแหนงท posmysql> select SUBSTRING('Quadratically',5); -> 'ratically'mysql> select SUBSTRING('foobarbar' FROM 4); -> 'barbar'

Page 38: Mysql Thai

LTRIM(str)

Returns str ทไมมชองวางอยดานหนา strmysql> select LTRIM(' barbar'); -> 'barbar'

RTRIM(str)

Returns str ทไมมชองวางอยดานหลง strmysql> select RTRIM('barbar '); -> 'barbar'

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

Return str ทถกตดตวอกษร remstr ทอยดานหนา(LEADIN) หรอ ดานหลง (TRAILING) หรอทง 2ดานของ str ออกไปแลว

mysql> select TRIM(' bar '); -> 'bar'mysql> select TRIM(LEADING 'x' FROM 'xxxbarxxx'); -> 'barxxx'mysql> select TRIM(BOTH 'x' FROM 'xxxbarxxx'); -> 'bar'mysql> select TRIM(TRAILING 'xyz' FROM 'barxxyz'); -> 'barx'

LCASE(str)

LOWER(str)

Return str ทเปนตวอกษรพมพเลกทงหมดmysql> select LCASE('QUADRATICALLY'); -> 'quadratically'

UCASE(str)

UPPER(str)

Return str ทเปนตวอกษรพมพเลกทงหมดmysql> select UCASE('Hej'); -> 'HEJ'

Page 39: Mysql Thai

5.3.2.! ฟงกชนเกยวกบวนท และ เวลา

DAYOFMONTH(date)

Return วนทใน 1 เดอน (1 ถง 31)mysql> select DAYOFMONTH('1998-02-03'); -> 3

DAYOFYEAR(date)

Return วนท ใน 1 ป (1 ถง 366)mysql> select DAYOFYEAR('1998-02-03'); -> 34

MONTH(date)

Return เดอนทใน 1 ป (1 ถง 12)mysql> select MONTH('1998-02-03'); -> 2

DAYNAME(date)

Return ชอวน ใน 1 อาทตยmysql> select DAYNAME("1998-02-05"); -> 'Thursday'

MONTHNAME(date)

Return ชอเดอนmysql> select MONTHNAME("1998-02-05"); -> 'February'

Page 40: Mysql Thai

YEAR(date)

Return ปส าหรบวนท ซงอยในชวง 1000-9999mysql> select YEAR('98-02-03'); -> 1998

HOUR(time)

Return ชวโมง จาก 0 ถง 23mysql> select HOUR('10:05:03'); -> 10

MINUTE(time)

Return นาท จาก 0 ถง 59mysql> select MINUTE('98-02-03 10:05:03'); -> 5

SECOND(time)

Return วนาท จาก 0 ถง 59mysql> select SECOND('10:05:03'); -> 3

DATE_FORMAT(date,format)

รปแบบของวนทท MySQL สามารถแสดงได ซงใช string ในตารางขางลางเปนตวก าหนดรปแบบ

%M Month name (January..December)%W Weekday name (Sunday..Saturday)%D Day of the month with english suffix (1st, 2nd, 3rd, etc.)%Y Year, numeric, 4 digits%y Year, numeric, 2 digits%X Year for the week where Sunday is the first day of the week, numeric, 4 digits, used with '%V'%x Year for the week, where Monday is the first day of the week, numeric, 4 digits, used with '%v'%a Abbreviated weekday name (Sun..Sat)%d Day of the month, numeric (00..31)%e Day of the month, numeric (0..31)%m Month, numeric (01..12)

Page 41: Mysql Thai

%c Month, numeric (1..12)%b Abbreviated month name (Jan..Dec)%j Day of year (001..366)%H Hour (00..23)%k Hour (0..23)%h Hour (01..12)%I Hour (01..12)%l Hour (1..12)%i Minutes, numeric (00..59)%r Time, 12-hour (hh:mm:ss [AP]M)%T Time, 24-hour (hh:mm:ss)%S Seconds (00..59)%s Seconds (00..59)%p AM or PM%w Day of the week (0=Sunday..6=Saturday)%U Week (0..53), where Sunday is the first day of the week%u Week (0..53), where Monday is the first day of the week%V Week (1..53), where Sunday is the first day of the week. Used with '%X'%v Week (1..53), where Monday is the first day of the week. Used with '%x'%% A literal `%'.

ตวอยางmysql> select DATE_FORMAT('1997-10-04 22:23:00', '%W %M %Y'); -> 'Saturday October 1997'mysql> select DATE_FORMAT('1997-10-04 22:23:00', '%H:%i:%s'); -> '22:23:00'mysql> select DATE_FORMAT('1997-10-04 22:23:00', '%D %y %a %d %m %b %j'); -> '4th 97 Sat 04 10 Oct 277'mysql> select DATE_FORMAT('1997-10-04 22:23:00', '%H %k %I %r %T %S %w'); -> '22 22 10 10:23:00 PM 22:23:00 00 6'mysql> select DATE_FORMAT('1999-01-01', '%X %V'); -> '1998 52'

TIME_FORMAT(time,format)

ใชเหมอนกบ DATE_FORMAT แตใชบอกเวลา

Page 42: Mysql Thai

CURDATE()

CURRENT_DATE

Return วนทปจจบนmysql> select CURDATE(); -> '2000-02-05'

CURTIME()

CURRENT_TIME

Return เวลาปจจบนmysql> select CURTIME();

-> '23:50:26'mysql> select CURTIME() + 0; -> 235026

NOW()

SYSDATE()

CURRENT_TIMESTAMP

Return ทงวนท และ เวลา ในรปแบบ 'YYYY-MM-DD HH:MM:SS' หรอ YYYYMMDDHHMMSSmysql> select NOW(); -> '2000-02-05 23:50:26'mysql> select NOW() + 0; -> 20000205235026

5.4.!CREATE DATABASE syntaxรปแบบของค าสง CREATE DATABASE มดงน

CREATE DATABASE db_nameส าหรบ MySQL , database จะถกสรางเปน directory อยภายใต data directory ของ MySQL ซง file ในdirectory กคอ table ใน database นนเอง.

Page 43: Mysql Thai

5.5.!DROP DATABASE syntaxรปแบบค าสง DROP DATABASE มดงน

DROP DATABASE [IF EXISTS] db_nameDrop database เปนการลบทกๆ ตารางใน database และ ลบ database ดวย คาทสงกลบมาจากค าสง dropdatabase คอ จ านวน file ทถกลบจาก database directory ซงโดยปกตแลว จ านวน file ทถกลบจะเทากบ 3เทาของจ านวนตาราง นนคอ 1 ตาราง จะประกอบดวย file นามสกล .MYD , .MYI และ .frm

5.6.!CREATE TABLE syntaxรปแบบค าสงของการสรางตารางดวยค าสง CREATE TABLE มดงน

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

รปแบบของ create_definition ไดแก col_name type [NOT NULL | NULL] [DEFAULT default_value] [AUTO_INCREMENT] [PRIMARY KEY] [reference_definition] หรอ PRIMARY KEY (index_col_name,...) หรอ KEY [index_name] (index_col_name,...) หรอ INDEX [index_name] (index_col_name,...) หรอ UNIQUE [INDEX] [index_name] (index_col_name,...) หรอ [CONSTRAINT symbol] FOREIGN KEY index_name (index_col_name,...) [reference_definition] หรอ CHECK (expr)

รปแบบของ type ไดแก TINYINT[(length)] [UNSIGNED] [ZEROFILL] หรอ SMALLINT[(length)] [UNSIGNED] [ZEROFILL] หรอ MEDIUMINT[(length)] [UNSIGNED] [ZEROFILL] หรอ INT[(length)] [UNSIGNED] [ZEROFILL] หรอ INTEGER[(length)] [UNSIGNED] [ZEROFILL] หรอ BIGINT[(length)] [UNSIGNED] [ZEROFILL] หรอ REAL[(length,decimals)] [UNSIGNED] [ZEROFILL] หรอ DOUBLE[(length,decimals)] [UNSIGNED] [ZEROFILL] หรอ FLOAT[(length,decimals)] [UNSIGNED] [ZEROFILL] หรอ DECIMAL(length,decimals) [UNSIGNED] [ZEROFILL] หรอ NUMERIC(length,decimals) [UNSIGNED] [ZEROFILL] หรอ CHAR(length) [BINARY] หรอ VARCHAR(length) [BINARY]

Page 44: Mysql Thai

หรอ DATE หรอ TIME หรอ TIMESTAMP หรอ DATETIME หรอ TINYBLOB หรอ BLOB หรอ MEDIUMBLOB หรอ LONGBLOB หรอ TINYTEXT หรอ TEXT หรอ MEDIUMTEXT หรอ LONGTEXT หรอ ENUM(value1,value2,value3,...) หรอ SET(value1,value2,value3,...)

รปแบบของ index_col_name: col_name [(length)]

รปแบบของ reference_definition: REFERENCES tbl_name [(index_col_name,...)] [MATCH FULL | MATCH PARTIAL] [ON DELETE reference_option] [ON UPDATE reference_option]

รปแบบ reference_option: RESTRICT | CASCADE | SET NULL | NO ACTION | SET DEFAULT

รปแบบของ table_options:TYPE = {ISAM | MYISAM | HEAP}

หรอ AUTO_INCREMENT = #หรอ AVG_ROW_LENGTH = #หรอ CHECKSUM = {0 | 1}หรอ COMMENT = "string"หรอ MAX_ROWS = #หรอ MIN_ROWS = #หรอ PACK_KEYS = {0 | 1}หรอ PASSWORD = "string"หรอ DELAY_KEY_WRITE = {0 | 1}หรอ ROW_FORMAT= { default | dynamic | static | compressed }

Page 45: Mysql Thai

รปแบบของ select_statement:[IGNORE | REPLACE] SELECT ... (Some legal 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 จะม

ไฟล จดมงหมายtbl_name.frm Table definition (form) filetbl_name.MYD Data filetbl_name.MYI Index file

ส าหรบขอมลเพมเตมในเรองคณสมบตของคอลมนชนดตางๆ กน อานไดในหวขอ Column types

5.7.!ALTER TABLE syntaxรปแบบค าสงของ ALTER TABLE เปนดงน

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

รปแบบของ alter_specification: ADD [COLUMN] create_definition [FIRST | AFTER column_name ] หรอ ADD INDEX [index_name] (index_col_name,...) หรอ ADD PRIMARY KEY (index_col_name,...) หรอ ADD UNIQUE [index_name] (index_col_name,...) หรอ ALTER [COLUMN] col_name {SET DEFAULT literal | DROP DEFAULT} หรอ CHANGE [COLUMN] old_col_name create_definition

Page 46: Mysql Thai

หรอ MODIFY [COLUMN] create_definition หรอ DROP [COLUMN] col_name หรอ DROP PRIMARY KEY หรอ DROP INDEX index_name หรอ RENAME [AS] new_tbl_name หรอ table_options

ALTER TABLE ใชในการเปลยนแปลงโครงสรางของตารางทมอย ตวอยางเชน คณสามารถจะเพมหรอลบคอลมน สรางหรอท าลายดรรชน เปลยนชนดของคอลมนทมอยแลว หรอเปลยนชอคอลมนหรอแมแตชอตารางเอง คณสามารถเปลยนคอมเมนตของตารางและชนดของตารางไดดวย

ถาคณใช ALTER TABLE ในการเปลยนขอก าหนดของคอลมนแต DESCRIBE tbl_name ก าหนดไววาคอลมนของคณตองไมถกเปลยนแปลงใดๆ กเปนไปไดท MySQL จะไมเปลยนแปลงคอลมนใหตามค าสงของคณ ยกตวอยาง ถาคณพยายามจะเปลยนตวแปรแบบ VARCHAR ไปเปน CHAR MySQL จะยงคงใช VARCHAR ถาตารางมคอลมนทความยาวสามารถแปรผนได

ALTER TABLE ท างานโดยการสรางชดจ าลองชวคราวของตารางตนแบบ การเปลยนแปลงจะถกท าบนชดจ าลองน จากนนตารางตนแบบจะถกลยและเปลยนชอตารางใหมใหเหมอนอนเดา ดงนนการปรบปรงใดๆ จะถกประยกตโดยตรงกบตารางใหมนโดยไรขอผดพลาดใดๆ ทงสน ขณะท 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 เปน bmysql> 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;

Page 47: Mysql Thai

• ! ใน MySQL 3.22 หรอหลงจากนน คณสามารถใช FIRST หรอ ADD … AFTER col_name ในการเพมคอลมน ณ ต าแหนงทตองการภายในตาราง

5.8.!DROP TABLE syntaxรปแบบของค าสง DROP TABLE เปนดงน

DROP TABLE [IF EXISTS] tbl_name [, tbl_name,...]DROP TABLE ใชในการลบตารางไดมากกวาหนง ขอมลทงหมดในตารางและขอก าหนดตางๆในตารางจะถกลบ ดงนนจงควรระวงเมอใชค าสงน

ใน MySQL 3.22 หรอหลงจากนน คณสามารถใช keyword IF EXISTS เพอเปนการปองกนขอผดพลาดอนจะเกดจากกรณทไมมตารางนนอยจรง

5.9.!DELETE syntaxรปแบบค าสง DELETE มดงน

DELETE [LOW_PRIORITY] FROM tbl_name [WHERE where_definition] [LIMIT rows]

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.

5.10.! SELECT syntaxรปแบบของค าสง SELECT มดงน

SELECT [STRAIGHT_JOIN] [SQL_SMALL_RESULT] [SQL_BIG_RESULT] [HIGH_PRIORITY] [DISTINCT | DISTINCTROW | ALL] select_expression,... [INTO {OUTFILE | DUMPFILE} 'file_name' export_options] [FROM table_references [WHERE where_definition] [GROUP BY col_name,...] [HAVING where_definition] [ORDER BY {unsigned_integer | col_name | formula} [ASC | DESC] ,...] [LIMIT [offset,] rows]

Page 48: Mysql Thai

[PROCEDURE procedure_name] ]

SELECT ใชในการคนหาแถวขอมลจากตารางทตองการ select_expression ใชในการก าหนดคอลมนทตองการจะคนหา SELECT อาจจะใชในการคนหาแถวโดยไมตองอางถงตารางใดเลยกได ตวอยาง

mysql> SELECT 1 + 1; -> 2

keyword ทงหมดทใชตองเรยงตามล าดบตามรปแบบทใหดานบน ตวอยางเชน ประโยค HAVING ตองตามหลงประโยค GROUP BY และตองมากอนประโยค ORDER BY• ! นพจน SELECT สามารถใชค ายอ AS ได โดยใชกบชอคอลมนและใชกบประโยค ORDER BY หรอ

HAVING ได ตวอยางเชน

mysql> select concat(last_name,', ',first_name) AS full_name from mytable ORDER BY full_name;

mysql> select t1.name, t2.salary from employee AS t1, info AS t2 where t1.name = t2.name;

mysql> select t1.name, t2.salary from employee t1, info t2 where t1.name = t2.name;

• ! ประโยค FROM table_reference ใชก าหนดวาตองการใชตารางใดในการคนขอมล ถาเรยกมากกวาหนงตาราง เรยกวาเปนการท า Join รายละเอยดดวธการใช Join

• ! การเลอกคอลมนทตองการใหแสดงออกมาอาจท าไดโดยการใชประโยค ORDER BY โดยใชชอคอลมน ชอยอของคอลมนหรอต าแหนงคอลมน ต าแหนงคอลมนเรมจาก 1 ตวอยางเชน

mysql> select college, region, seed from tournament ORDER BY region, seed;

mysql> select college, region AS r, seed AS s from tournament ORDER BY r, s;

mysql> select college, region, seed from tournament ORDER BY 2, 3;

Page 49: Mysql Thai

ในการเรยงล าดบในทางตรงขาง ใหเพม keyword DESC (descending) ขางหลงชอคอลมนในประโยค ORDER BY ถาไมก าหนดการเรยงจะเปนแบบ ASC (ascending) คอเรยงจากนอยไปมาก

• ! ประโยค HAVING สามารถในการอางถงคอลมนหรอชอยอใน select_expression ตวอยางเชน

mysql> select col_name from tbl_name HAVING col_name > 0;Write this instead:

mysql> select col_name from tbl_name WHERE col_name > 0;In MySQL 3.22.5 or later, you can also write queries like this:

mysql> select user,max(salary) from users group by user HAVING max(salary)>10;

• ! ประโยค SEKECT … INTO OUTFILE ‘file_name’ เปนการเลอกแถวขอมลเพอเกบลงไฟล ไฟลนจะถกสรางทเครองเซรฟเวอร และตองเปนไฟลทไมเคยมมากอน

5.11.! JOIN syntaxรปแบบของ Join ทใชในประโยค SELECT มดงน

table_reference, table_referencetable_reference [CROSS] JOIN table_referencetable_reference INNER JOIN table_referencetable_reference STRAIGHT_JOIN table_referencetable_reference LEFT [OUTER] JOIN table_reference ON conditional_exprtable_reference LEFT [OUTER] JOIN table_reference USING (column_list)table_reference NATURAL LEFT [OUTER] JOIN table_reference{ oj table_reference LEFT OUTER JOIN table_reference ON conditional_expr }

รปแบบของ LEFT OUTER JOIN ดงแสดงขางตนเปนแบบทใชกบ ODBC ไดเทานน

• ! ตารางทอางถงอาจจะเปนชอยอ โดยใช tbl_name AS alias_name หรอ tbl_name alias_name. กได ตวอยางเชน

mysql> select t1.name, t2.salary from employee AS t1, info AS t2 where t1.name = t2.name;

• ! INNER JOIN และ , (จลภาค) มความหมายเดยวกน คอ เปนการท า JOIN แบบเตมระหวางตารางทใช ปกตแลว จะตองก าหนดวาตารางจะถกเชอมอยางไรเงอนไขในประโยค WHERE

Page 50: Mysql Thai

• ! ถาไมมตารางตามทระบใน LEFT JOIN แถวขอมลทคอลมนทงหมดเปน NULL จะถกใชเปนตารางทตองการ ซงคณสามารถใชในการหาเรคคอรดในตารางทไมมอยในตารางอนได ตวอยางเชน

mysql> select table1.* from table1 LEFT JOIN table2 ON table1.id=table2.id where table2.id is NULL;ตวอยางน คนหาแถวขอมลทงหมดในตาราง table1 ทมคา id ไมมในตาราง table2 โดยสมมตฐานทวา table2 ไมมขอมล id ทเปน NULL

• ! ประโยค USING (column-list) ใชในการใหชอคอลมนทตองมอยในทงสองตาราง เชน

A LEFT JOIN B USING (C1,C2,C3,...)

ประโยคขางตนมความหมายเดยวกบประโยคขางลางน

A.C1=B.C1 AND A.C2=B.C2 AND A.C3=B.C3,...

• ! NATURAL LEFT JOIN เปนการ join สองตารางเหมอนกบ LEFT JOIN ทใช USING• ! STRAIGHT_JOIN เหมอนกบการใช JOIN ยกเวนแตวา ตารางทางดานซายจะถกอานกอนเสมอ

ตวอยางmysql> select * from table1,table2 where table1.id=table2.id;mysql> select * from table1 LEFT JOIN table2 ON table1.id=table2.id;mysql> select * from table1 LEFT JOIN table2 USING (id);mysql> select * from table1 LEFT JOIN table2 ON table1.id=table2.id LEFT JOIN table3 ON table2.id=table3.id;

5.12.! INSERT syntaxรปแบบการใชค าสง INSERT มดงน

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

Page 51: Mysql Thai

SET col_name=expression, col_name=expression, ...

INSERT ใชในการเพมแถวขอมลลงไปในตารางทมอยแลว รปแบบ INSERT… VALUES ใชในการเพมแถวขอมลโดยการองกบคาทระบในประโยค สวนรปแบบ INSERT … SELECT ใชในการเพมแถวขอมลดวยขอมลทมาจากตารางอน (เลอกไดมากกวาหนง)

ในนพจนอาจจะอางถงคอลมนใดๆทถกก าหนดไวแลวในเรคคอรดขอมล ตวอยางเชน

mysql> INSERT INTO tbl_name (col1,col2) VALUES(15,col1*2);

ถาคณก าหนด keyword LOW_PRIORITY การท าตามค าสง INSERT จะถกท าภายหลงจนกวาจะไมมลกขายใดก าลงอานขอมลจากตาราง ในกรณนลกขายจะตองรอจนกวาประโยค INSERT จะถกท าจนเสรจ ซงอาจจะใชเวลานานถาหากตารางก าลงถกใชงานอยางหนก ซงจะตรงขามกบประโยค INSERT DELAYED ทยอมใหลกขายท างานตอจนกระทงเสรจ

ถา keyword IGNORE ถกก าหนดใหประโยค INSERT พรอมกบแถวขอมลหลายแถว แถวทคาซ ากบคยหลกจะถกเพกเฉยและไมถกเพมเขาไปในตาราง แตถาไมก าหนด keyword IGNORE การ INSERT จะถกยกเลกทนททพบวามคาซ ากนของคยหลก

5.13.! REPLACE syntaxรปแบบการใช REPLACE มดงน

REPLACE [LOW_PRIORITY | DELAYED] [INTO] tbl_name [(col_name,...)] VALUES (expression,...)or REPLACE [LOW_PRIORITY | DELAYED] [INTO] tbl_name [(col_name,...)] SELECT ...or REPLACE [LOW_PRIORITY | DELAYED] [INTO] tbl_name SET col_name=expression, col_name=expression,...

REPLACE ใชเหมอนกบ INSERT ตางกนเพยงแคถาทเรคคอรดใดในตารางมคาคยหลกเหมอนกบเรคคอรดใหมทตองการจะเพม เรคคอรดเกาจะถกลบทงกอนทจะใสเรคคอรดใหมเขาไป

Page 52: Mysql Thai

5.14.! LOAD DATA INFILE syntaxรปแบบการใช LOAD DATA INFILE มดงน

LOAD DATA [LOW_PRIORITY] [LOCAL] INFILE 'file_name.txt' [REPLACE | IGNORE] INTO TABLE tbl_name [FIELDS [TERMINATED BY '\t'] [OPTIONALLY] ENCLOSED BY ''] [ESCAPED BY '\\' ]] [LINES TERMINATED BY '\n'] [IGNORE number LINES] [(col_name,...)]

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 เปนตน

mysql> LOAD DATA INFILE "/tmp/file_name" into table test IGNORE 1 LINES;

Page 53: Mysql Thai

5.15.! UPDATE syntaxรปแบบการใช UPDATE มดงน

UPDATE [LOW_PRIORITY] tbl_name SET col_name1=expr1,col_name2=expr2,... [WHERE where_definition] [LIMIT #]

UPDATE ใชในการปรบปรงคอลมนในตารางทมอยดวยคาใหม ประโยค SET ใชก าหนดวาคอลมนใดจถกเปลยนแปลงและคาใดทจะถกใช ประโยค WHERE ใชก าหนดวาแถวใดทจะถกปรบปรง ถาไมก าหนดแลวทกๆ แถวจะถกปรบปรงหมด

ถา LOW_PRIORITY ถกก าหนด การท างานตามค าสง UPDATE จะถกเลอนออกไปจนกระทงไมมลกขายใดก าลงอานขอมลจากตาราง

ตวอยางmysql> UPDATE persondata SET age=age+1;

คอลมน age ในตาราง persondata ถกเพมคาขนหนง จากคาเดมของมน

5.16.! USE syntaxรปแบบการใช USE มดงน

USE db_name

ประโยค USE db_name ใชในการบอก MySQL วาใหใชฐานขอมลชอ db_name เปนฐานขอมลหลกในการท าแบบสอบถาม ฐานขอมลทก าหนดนจะถกใชไปจนกระทงสนสดการท างาน หรอจนกวาค าสง USE จะถกเรยกใชอกครง

ตวอยางmysql> USE db1;mysql> SELECT count(*) FROM mytable; # selects from db1.mytablemysql> USE db2;mysql> SELECT count(*) FROM mytable; # selects from db2.mytable

ในการท าใหฐานขอมลหนงเปนฐานขอมลหลกในความหมายของค าสง USE ไมไดหมายความวาคณไมสามารถใชฐานขอมลอนได เพยงแตเปนการก าหนดฐานขอมลหลกในการท างานเทานน ตวอยางขางลางจะแสดงใหเหนวาสามารถเขาถงตารางจากฐานขอมลคนละตวได

Page 54: Mysql Thai

mysql> USE db1;mysql> SELECT author_name,editor_name FROM author,db2.editor WHERE author.editor_id = db2.editor.editor_id;

5.17.! SHOW syntaxรปแบบการใช SHOW มดงน

SHOW DATABASES [LIKE wild]or SHOW TABLES [FROM db_name] [LIKE wild]or SHOW COLUMNS FROM tbl_name [FROM db_name] [LIKE wild]or SHOW TABLE STATUSor SHOW STATUS

wild หมายถง wildcard characters คอ ‘%’ และ ‘_’SHOW ใชดขอมลเกยวกบ database, table, columns และ server ส าหรบการอางองชอตารางนน คณสามารถอางองโดยใช db_name.tbl_name แทน tbl_name FROM db_name syntax.ดงตวอยาง 2 บรรทดน ทมความหมายเหมอนกน

mysql> SHOW COLUMNS FROM mytable FROM mydb;mysql> SHOW COLUMNS FROM mydb.mytable;

• ! 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

5.18.! DESCRIBE syntaxรปแบบการใช DESCRIBE มดงน

{DESCRIBE | DESC} tbl_name {col_name | wild}

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

Page 55: Mysql Thai

5.19.! GRANT และ REVOKE syntax

GRANT priv_type [(column_list)] [, priv_type [(column_list)] ...] ON {tbl_name | * | *.* | db_name.*} TO user_name [IDENTIFIED BY 'password'] [, user_name [IDENTIFIED BY 'password'] ...] [WITH GRANT OPTION]

REVOKE priv_type [(column_list)] [, priv_type [(column_list)] ...] ON {tbl_name | * | *.* | db_name.*} FROM user_name [, user_name ...]

ค าสง 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 PRIVILEGES FILE RELOADALTER INDEX SELECTCREATE INSERT SHUTDOWNDELETE PROCESS UPDATEDROP REFERENCES USAGE

ALL : มสทธครบทงหมดUSAGE : ไมมสทธใดๆ เลย

ชนดของสทธทใชส าหรบ table คอ SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, GRANT,INDEX and ALTER.

ชนดของสทธทใชส าหรบ column คอ SELECT, INSERT and UPDATE.

Page 56: Mysql Thai

คณสามารถก าหนด 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

5.20.! CREATE INDEX syntaxรปแบบการใชค าสง CREATE INDEX มดงน

CREATE [UNIQUE] INDEX index_name ON tbl_name (col_name[(length)],... )

ค าสงนนยมใชรวมกบค าสง 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));

5.21.! DROP INDEX syntaxรปแบบการใชค าสง DROP INDEX มดงน

DROP INDEX index_name ON tbl_nameDROP INDEX drops the index named index_name from the table tbl_name.

ค าสงนใชรวมกบ ALTER TABLE เพอลบ index ออกจาก column ทตองการ

Page 57: Mysql Thai

5.22.! COMMENT syntaxMySQL อนญาตใชสญลกษณ

# หรอ – เพอใชเรมตนเขยน comment จนถงสนสดบรรทด/* ใชเรมตนเขยน comment จนถงสนสดทสญลกษณ */เชน :

mysql> select 1+1; # This comment continues to the end of linemysql> select 1+1; -- This comment continues to the end of linemysql> select 1 /* this is an in-line comment */ + 1;mysql> select 1+/*this is amultiple-line comment*/1;

5.23.! MySQL reserved wordsMySQL มค าทสงวนไว ซงคณไมสามารถน าค าเหลานไปตงเปนชอตารางหรอ column ได ซงค าดง

กลาว ไดแก ค าทเปนชนดของของมลใน MySQL , ค าทเปนชอ function ทมใหใชใน MySQL (เชนTIMESTAMP,GROUP) เปนตน คณสามารถใชชอ function ตงชอตารางหรอ column ไดเหมอนกน แตเวลาเรยกใช function นนๆ ตองไมใหมชองวางระหวางชอ function กบ เครองหมายวงเลบเปดเดดขาด

ค าตางๆ ในตารางดานลาง เปนค าทสงวนส าหรบ MySQL ซงสวนใหญกไมสามารถใชตงชอตารางหรอ column ไดตามมาตรฐานของ ANSI SQL92 ดวยเชนกนaction add aggregate allalter after and asasc avg avg_row_length auto_incrementbetween bigint bit binaryblob bool both bycascade case char characterchange check checksum columncolumns comment constraint createcross current_date current_time current_timestampdata database databases datedatetime day day_hour day_minuteday_second dayofmonth dayofweek dayofyear

Page 58: Mysql Thai

dec decimal default delayeddelay_key_write delete desc describedistinct distinctrow double dropend else escape escapedenclosed enum explain existsfields file first floatfloat4 float8 flush foreignfrom for full functionglobal grant grants grouphaving heap high_priority hourhour_minute hour_second hosts identifiedignore in index infileinner insert insert_id intinteger interval int1 int2int3 int4 int8 intoif is isam joinkey keys kill last_insert_idleading left length likelines limit load locallock logs long longbloblongtext low_priority max max_rowsmatch mediumblob mediumtext mediumintmiddleint min_rows minute minute_secondmodify month monthname myisamnatural numeric no notnull on optimize optionoptionally or order outeroutfile pack_keys partial passwordprecision primary procedure processprocesslist privileges read realreferences reload regexp renamereplace restrict returns revokerlike row rows secondselect set show shutdownsmallint soname sql_big_tables sql_big_selectssql_low_priority_updates sql_log_off sql_log_update sql_select_limitsql_small_result sql_big_result sql_warnings straight_joinstarting status string table

Page 59: Mysql Thai

tables temporary terminated textthen time timestamp tinyblobtinytext tinyint trailing totype use using uniqueunlock unsigned update usagevalues varchar variables varyingvarbinary with write whenwhere year year_month zerofill

สญลกษณจากตารางดานบนบางตวไมสามารถใชตงเปนชอตารางหรอคอลมนได ตามมาตรฐานของANSI SQL แตส าหรบ MySQL สามารถใชได สญลกษณเหลานนไดแก

• ! ACTION• ! BIT• ! DATE• ! ENUM• ! NO• ! TEXT• ! TIME• ! TIMESTAMP

Page 60: Mysql Thai

6.! บทท 6 MyODBC

6.1!การ install MyODBC บน Windows(1)! unzip file myodbc-2_50_22-win95.zip(2)! double click ท file setup.exe เพอ install program

รปท (1) Installation Window

(3)! เมอ setup เสรจแลว คณจะเหนหนาตาง Data Sources ดงรปท (2) ใหเลอก sample-MySQL แลวกดปม Setup เพอ setup Myodbc

รปท (2) Data Sources Window

(4)! คณจะเหนหนาตางส าหรบ Default configuration ของ MyODBC ดงรปท (3) ใหใสรายละเอยดของ MySQL server ดงน• ! Windows DSN name : ใหใสชอของ ODBC ทคณสรางขน• ! MySQL host (name or IP): ใสชอเครอง หรอ IP ของเครองทเปน MySQL server• ! MySQL database name: ใสชอ database ทตองการตดตอดวย

Page 61: Mysql Thai

• ! User: ใสชอ user เพอ login MySQL server• ! Password: ใสรหสผาน• ! Port: port ทตองการตดตอดวย ไมจ าเปนตองใส (default = 3306)

(5)! กดปม OK จากนนจะเหน Data Sources Windows อกครง ใหกดปม close

รปท (3) วธการใสขอมลลงไปใน Configuration

6.2!การสราง DSN ของ ODBC ไดหลาย DSN เพอใชใน application ตางกน(1)! เปด Control Panel(2)! Double click ทไอคอน ODBC Data Sources 32 bits(3)! Click ท tab User DSN(4)! Click ทปม Add(5)! เลอก MySQL ในหนาจอ Create New Data Source จากนน click ปม finish(6)! คณจะเหนหนาตาง TCX MySQL Driver default configuration ดงรปท (3) ซงคณสามารถ config คาตางๆ ได

Page 62: Mysql Thai

6.3!การใช Microsoft Access เชอมตอกบ MySQLวธการเชอมโยงขอมลกนระหวาง Access กบ MySQL จะใช ODBC เปนตวเชอม ซงแบงไดเปน 2 กรณ

คอ6.3.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

รปท (4) Select Data Source Window

6.3.2.! import/ export tableการ import/export น เปรยบเสมอนการคดลอกขอมลระหวาง Microsoft Access กบ

MySQL ซงวธการเรยกใช ODBC กเหมอนกบวธการ Link table• ! Import -> เปนการดงขอมลจาก MySQL มาเกบไวใน Microsoft Access• ! Export -> เปนการสงขอมลจาก Microsoft Access ไปเกบไวใน MySQL

Page 63: Mysql Thai

7.! บทท 7 วธใชงาน MySQL เบองตน

7.1!การ connect และ disconnect MySQL serverการ connect ไปยง server จะตองใช MySQL user name และ password ถา server run อยบน

เครองอนคนตองบอก host name ของเครอง server ดวยshell> mysql -h host -u user -pEnter password: ********

เครองหมาย ******** จะปรากฏแทนท password ของคณ เมอคณปอน password หากคณสามารถ login เขามาได คณจะเหน mysql> prompt ซง หมายถง MySQL พรอมทจะรบค าสงจากคณshell> mysql -h host -u user -pEnter password: ********Welcome to the MySQL monitor. Commands end with ; or \g.Your MySQL connection id is 459 to server version: 3.22.20a-log

Type 'help' for help.

mysql>

หลงจากคณสามารถ connect ไปยง MySQL server ไดแลว คณสามารถ disconnect ไดโดยพมพค าวา quitหรอกดปม Control-Dmysql> QUITBye

7.2!การพมพค าสงเพอดงขอมลจาก database (Entering Queries)ในขนตน ใหพมพค าสงเพอ ถาม version ของ MySQL server และ วนทปจจบนของเครอง ตามตว

อยางขางลางแลวกดปม Enter

mysql> SELECT VERSION(), CURRENT_DATE;+--------------+--------------+| version() | CURRENT_DATE |+--------------+--------------+| 3.22.20a-log | 1999-03-19 |+--------------+--------------+1 row in set (0.01 sec)mysql>

การ query ขอมลขางตนแสดงใหเหนวธการพมพค าสงใหกบ MySQL ดงน :• ! ทกๆ ค าสงทประกอบดวย SQL statement จะตองปดทายดวยเครองหมาย semicolon (;)• ! เมอคณพมพค าสงแลวกด Enter, MySQL จะสงค าสงไปยง server เพอประมวลผลและจากนนกแสดงผลลพธกลบมาใหทหนาจอ พรอมทงแสดง mysql> อกครงเพอรอรบค าสงครงใหม

• ! mysql แสงผลลพธของการ query ในรปแบบของตาราง แถวแรกของตารางคอชอของ column หรอexpression ทคณปอนเขาไป สวนแถวถดไปจะเปนผลลพธทไดจากการ query

Page 64: Mysql Thai

• ! mysql จะแสดงจ านวนแถว (records) ทไดจากการ query และ ใชเวลาในการ query นานเทาใด ซงจะท าใหเราทราบถงประสทธภาพของ server ไดอยางคราวๆ

Keywords ทใชอาจพมพโดยใชตวเลกหรอตวใหญกได เชน :

mysql> SELECT VERSION(), CURRENT_DATE;mysql> select version(), current_date;mysql> SeLeCt vErSiOn(), current_DATE;

คณสามารถใช mysql ในการค านวณกได เชน :

mysql> SELECT SIN(PI()/4), (4+1)*5;+-------------+---------+| SIN(PI()/4) | (4+1)*5 |+-------------+---------+| 0.707107 | 25 |+-------------+---------+

ค าสงทปอนเขาไปใน mysql> prompt ไมจ าเปนตองอยบรรทดเดยวกนทงหมด เนองจาก mysql จะพจารณาวา ทกค าสงตองสนสดดวยเครองหมาย semicolon(;) เชน

mysql> SELECT -> USER() -> , -> CURRENT_DATE;+--------------------+--------------+| USER() | CURRENT_DATE |+--------------------+--------------+| joesmith@localhost | 1999-03-18 |+--------------------+--------------+

จากตวอยางขางตน จะเหนวา prompt ของ mysql เปลยนจาก mysql> เปน -> เมอคณกดปม enterโดยทยงไมใสเครองหมาย semicolon หากคณตองการยกเลกค าสงทคณพมพไปแลว คณสามารถยกเลกไดโดยการพมพ \c

mysql> SELECT -> USER() -> \cmysql>

เมอคณยกเลกค าสงแลว prompt -> กจะกลบมาเปน mysql> เพอรอรบค าสงใหมตอไป

Prompt ความหมายmysql> พรอมรบค าสงตอไป-> รอรบค าสงบรรทดตอไป‘> รอรบค าสงบรรทดตอไป ซงจะตองมเครองหมาย single quote ในค าสงดวย“> รอรบค าสงบรรทดตอไป ซงจะตองมเครองหมาย double quote ในค าสงดวย

ตารางแสดงรปแบบของ prompt ทคณสามารถพบไดใน MySQL

Page 65: Mysql Thai

7.3!ตวอยางของการ query

7.3.1! การสรางตารางใหทดลองสรางตารางชอ shop เพอเกบราคาของหนงสอ ส าหรบแตละตวแทนจ าหนาย

CREATE TABLE shop ( article INT(4) UNSIGNED ZEROFILL DEFAULT '0000' NOT NULL, dealer CHAR(20) DEFAULT '' NOT NULL, price DOUBLE(16,2) DEFAULT '0.00' NOT NULL, PRIMARY KEY(article, dealer));

INSERT INTO shop VALUES(1,'A',3.45),(1,'B',3.99),(2,'A',10.99),(3,'B',1.45),(3,'C',1.69),(3,'D',1.25),(4,'D',19.95);Okay, so the example data is:SELECT * FROM shop

+---------+--------+-------+| article | dealer | price |+---------+--------+-------+| 0001 | A | 3.45 || 0001 | B | 3.99 || 0002 | A | 10.99 || 0003 | B | 1.45 || 0003 | C | 1.69 || 0003 | D | 1.25 || 0004 | D | 19.95 |+---------+--------+-------+

7.3.2! การสราง และ ใชงาน database(1)! การสราง database ถา administrator สราง database ใหคณในตอนท set up permission, คณสามารถใชมนไดเลย

หากยง คณตองสราง database ขนมาเอง ดงน:

mysql> CREATE DATABASE student;

ส าหรบการใชงานบน Linux, ชอของ database เปนแบบ case sensitive นนคอ database student ไมเหมอนกบ Student และ ไมเหมอนกบ STUDENT ซงการตงชอ table กใชกฎเดยวกนดวย

การสราง database จะสรางขนมาในครงแรกเพยงครงเดยวเทานน แตการใชงานแตคณตองเลอกdatabase กอนทจะใชงานทกครง

(2)! การใชงาน database

mysql> USE studentDatabase changed

อกวธคอ ระบ database ทตองการใชงาน ตอน login ใช MySQL Server เลยshell> mysql -h host -u user -p database_nameEnter password: ********

Page 66: Mysql Thai

7.4!การ Load ขอมลจากไฟล ลงไปใน ตารางสมมตวาเราสราง database ชอ petshop และสราง table ชอ pet โดยใช syntax ดงน

mysql> CREATE DATABASE petshop;mysql> CREATE TABLE pet (name VARCHAR(20), owner VARCHAR(20),-> species VARCHAR(20), sex CHAR(1), birth DATE, death DATE);

หลกจากม database และ สราง table ไดแลว เราจ าเปนตองเรยนค าสง LOAD DATA และINSERT เพอน าขอมลเขาไปเกบใน table สมมตวาคณสราง table pet โดยมรายละเอยดของตารางและขอมล ดงน

name owner species sex birth deathFluffy Harold cat f 1993-02-04Claws Gwen cat m 1994-03-17Buffy Harold dog f 1989-05-13Fang Benny dog m 1990-08-27Bowser Diane dog m 1998-08-31 1995-07-29Chirpy Gwen bird f 1998-09-11Whistler Gwen bird 1997-12-09Slim Benny snake m 1996-04-29

ถาคณมแต table วางๆ วธการงายๆ ทจะ load ขอมลเขา table คอ การสราง text file ซงประกอบดวยแถวส าหรบสตวแตละชนด จากนนท าการ load ขอมลใน file เขาไปไวใน table เชน สราง file ชอpet.txt ทม 1 record ตอ 1 บรรทด ซงคาแตละคาแยกจากการดวยเครองหมาย tab เรยงตามล าดบใน createtable statement ส าหรบ column ใดๆ ทไมมขอมลอย ใหใสเครองหมาย \N เชน

Whistler Gwen bird \N 1997-12-09 \N

การ load text file ชอ pet.txt ไปเกบใน pet table ใชค าสง

mysql> LOAD DATA LOCAL INFILE "pet.txt" INTO TABLE pet;

ถาคณตองการเพม record เขาไปดวยการ INSERT ใหใชค าสง

mysql> INSERT INTO pet -> VALUES ('Puffball','Diane','hamster','f','1999-03-30',NULL);

โดยทคาทจะ insert เขาไป จะตองเรยงตาม column เหมอนกน CREATE TABLE statement คาใดไมม ใหใช NULL เตมแทน

Page 67: Mysql Thai

7.5!การดงขอมลออกมาจากตารางค าสง SELECT ถกใชในการดงขอมลออกมาจากตาราง รปแบบทวไปของค าสง select เขยนไดดงน

SELECT what_to_selectFROM which_tableWHERE conditions_to_satisfy

what_to_select บอกวา select ขอมลอะไร อาจเปนชอ column หรอ * ซงหมายถงทกcolumn กได which_table บอกวา จะ select ขอมลจากตารางไหนThe WHERE clause เปนตวเลอก ไมจ าเปนตองพมพconditions_to_satisfy เปนตวก าหนดเงอนไขของขอมลทจะดงมาจากตาราง

7.5.1! เลอกขอมลทงตารางวธการ select ขอมลทงหมดมาจากตาราง

mysql> SELECT * FROM pet;+----------+--------+---------+------+------------+------------+| name | owner | species | sex | birth | death |+----------+--------+---------+------+------------+------------+| Fluffy | Harold | cat | f | 1993-02-04 | NULL || Claws | Gwen | cat | m | 1994-03-17 | NULL || Buffy | Harold | dog | f | 1989-05-13 | NULL || Fang | Benny | dog | m | 1990-08-27 | NULL || Bowser | Diane | dog | m | 1998-08-31 | 1995-07-29 || Chirpy | Gwen | bird | f | 1998-09-11 | NULL || Whistler | Gwen | bird | NULL | 1997-12-09 | NULL || Slim | Benny | snake | m | 1996-04-29 | NULL || Puffball | Diane | hamster | f | 1999-03-30 | NULL |+----------+--------+---------+------+------------+------------+

7.5.2! เลอกขอมลเฉพาะบางแถว (บาง records)มการใสเงอนไขลงไปใน WHERE clause เชน เลอกขอมลของสตวเลยงทชอ “Bowser” เทานน

mysql> SELECT * FROM pet WHERE name = "Bowser";+--------+-------+---------+------+------------+------------+| name | owner | species | sex | birth | death |+--------+-------+---------+------+------------+------------+| Bowser | Diane | dog | m | 1989-08-31 | 1995-07-29 |+--------+-------+---------+------+------------+------------+

Page 68: Mysql Thai

เลอกขอมลของสตวเลยงทเกดหลงจากป 1999

mysql> SELECT * FROM pet WHERE birth >= "1998-1-1";+----------+-------+---------+------+------------+-------+| name | owner | species | sex | birth | death |+----------+-------+---------+------+------------+-------+| Chirpy | Gwen | bird | f | 1998-09-11 | NULL || Puffball | Diane | hamster | f | 1999-03-30 | NULL |+----------+-------+---------+------+------------+-------+

คณสามารถใสเงอนไขหลายๆ เงอนไขรวมกนได โดยใชค าเชอมเชน AND , OR

mysql> SELECT * FROM pet WHERE species = "dog" AND sex = "f";+-------+--------+---------+------+------------+-------+| name | owner | species | sex | birth | death |+-------+--------+---------+------+------------+-------+| Buffy | Harold | dog | f | 1989-05-13 | NULL |+-------+--------+---------+------+------------+-------+

mysql> SELECT * FROM pet WHERE species = "snake" OR species = "bird";+----------+-------+---------+------+------------+-------+| name | owner | species | sex | birth | death |+----------+-------+---------+------+------------+-------+| Chirpy | Gwen | bird | f | 1998-09-11 | NULL || Whistler | Gwen | bird | NULL | 1997-12-09 | NULL || Slim | Benny | snake | m | 1996-04-29 | NULL |+----------+-------+---------+------+------------+-------+

mysql> SELECT * FROM pet WHERE (species = "cat" AND sex = "m") -> OR (species = "dog" AND sex = "f");+-------+--------+---------+------+------------+-------+| name | owner | species | sex | birth | death |+-------+--------+---------+------+------------+-------+| Claws | Gwen | cat | m | 1994-03-17 | NULL || Buffy | Harold | dog | f | 1989-05-13 | NULL |+-------+--------+---------+------+------------+-------+

7.5.3! เลอกขอมลเฉพาะบางคอลมนคณสามารถเลอกขอมลออกมาเฉพาะ columns ได โดยการระบชอ columns ใน SELECT

statement

mysql> SELECT name, birth FROM pet;+----------+------------+| name | birth |+----------+------------+| Fluffy | 1993-02-04 || Claws | 1994-03-17 || Buffy | 1989-05-13 || Fang | 1990-08-27 || Bowser | 1989-08-31 || Chirpy | 1998-09-11 || Whistler | 1997-12-09 || Slim | 1996-04-29 || Puffball | 1999-03-30 |+----------+------------+

Page 69: Mysql Thai

ตองการหาชอเจาของสตวเลยง

mysql> SELECT owner FROM pet;+--------+| owner |+--------+| Harold || Gwen || Harold || Benny || Diane || Gwen || Gwen || Benny || Diane |+--------+

ตองการหาชอเจาของสตวเลยงโดยไมตองการใชแสดงชอซ ากนใน record ใหใชค าสง DISTINCT:

mysql> SELECT DISTINCT owner FROM pet;+--------+| owner |+--------+| Benny || Diane || Gwen || Harold |+--------+

7.6!การใช Pattern matchingSQL pattern matching ใช ‘_’ แทนทตวอกษรใดๆ 1 ตว และ `%' แทนทตวอกษรใดๆ กตวกได

ส าหรบ MySQL, SQL patterns เปนการ match แบบ case insensitive เมอคณใช SQL patterns ใหใช ค าวา LIKE หรอ NOT LIKE ในการเปรยบเทยบ ตวอยางเชน

หาชอทขนตนดวย ‘b’ :

mysql> SELECT * FROM pet WHERE name LIKE "b%";+--------+--------+---------+------+------------+------------+| name | owner | species | sex | birth | death |+--------+--------+---------+------+------------+------------+| Buffy | Harold | dog | f | 1989-05-13 | NULL || Bowser | Diane | dog | m | 1989-08-31 | 1995-07-29 |+--------+--------+---------+------+------------+------------+

Page 70: Mysql Thai

หาชอทลงทายดวย ‘fy’ :

mysql> SELECT * FROM pet WHERE name LIKE "%fy";+--------+--------+---------+------+------------+-------+| name | owner | species | sex | birth | death |+--------+--------+---------+------+------------+-------+| Fluffy | Harold | cat | f | 1993-02-04 | NULL || Buffy | Harold | dog | f | 1989-05-13 | NULL |+--------+--------+---------+------+------------+-------+

หาชอทม ‘w’ อยต าแหนงใดกได ในชอ :

mysql> SELECT * FROM pet WHERE name LIKE "%w%";+----------+-------+---------+------+------------+------------+| name | owner | species | sex | birth | death |+----------+-------+---------+------+------------+------------+| Claws | Gwen | cat | m | 1994-03-17 | NULL || Bowser | Diane | dog | m | 1989-08-31 | 1995-07-29 || Whistler | Gwen | bird | NULL | 1997-12-09 | NULL |+----------+-------+---------+------+------------+------------+

หาชอทประกอบดวยตวอกษรอะไรกได จ านวน 5 ตวอกษร ใหใชสญลกษณ ‘_’ :

mysql> SELECT * FROM pet WHERE name LIKE "_____";+-------+--------+---------+------+------------+-------+| name | owner | species | sex | birth | death |+-------+--------+---------+------+------------+-------+| Claws | Gwen | cat | m | 1994-03-17 | NULL || Buffy | Harold | dog | f | 1989-05-13 | NULL |+-------+--------+---------+------+------------+-------+

7.7!การนบจ านวนแถวของของขอมลทถก selectใช function COUNT() ในการนบจ านวนแถวท query ได โดยใชรวมกบ SELECT statement:

mysql> SELECT COUNT(*) FROM pet;+----------+| COUNT(*) |+----------+| 9 |+----------+

ถาตองการ query ชอเจาของ และ จ านวนสตวเลยงทแตละคนมอย:

mysql> SELECT owner, COUNT(*) FROM pet GROUP BY owner;+--------+----------+| owner | COUNT(*) |+--------+----------+| Benny | 2 || Diane | 2 || Gwen | 3 || Harold | 2 |+--------+----------+

Page 71: Mysql Thai

สารบญ

1. บทท 1 Database Management System....................................................................................... 11.1. ความหมายของระบบฐานขอมล ........................................................................................... 11.2. ขอดในการใชโปรแกรมระบบจดการฐานขอมล ..................................................................... 11.3. Relational Database .......................................................................................................... 1

2. บทท 2 ระบบฐานขอมลแบบ Client/Server..................................................................................... 22.1. ขอด ของระบบฐานขอมลแบบ Client/Server ....................................................................... 22.2. ขอเสยของระบบ Client/Server............................................................................................ 3

3. บทท 3 เกยวกบ MySQL............................................................................................................... 44. บทท 4 ระบบการจดการกบสทธการเขาถงขอมล............................................................................. 5

4.1 ความรพนฐานเกยวกบ user-name และ รหสผาน ใน MySQL................................................... 54.2 ความรพนฐานเกยวกบการ connect MySQL server ................................................................. 54.3 ความรพนฐานเกยวกบ Privileges system ................................................................................ 54.4 ความรพนฐานเกยวกบ Privileges table.................................................................................... 64.5 ระบบรกษาความปลอดภยทวไป................................................................................................ 74.6 การปองกน MySQL ใหปลอดภยจาก crackers ......................................................................... 84.7 เมอสทธของผใชถกเปลยนแปลง จะมผลตอผใชเมอใด ?............................................................ 84.8 การ set up สทธการใช MySQL เรมตน .................................................................................... 94.9 การเพมผใช และ การจดการกบสทธของผใช ............................................................................. 94.10 วธการก าหนด passwords................................................................................................. 11

5. บทท 5 Language Reference..................................................................................................... 135.1. วธการเขยนสตรง และ ตวเลข............................................................................................ 13

5.1.1. สตรง ........................................................................................................................... 135.1.2. ตวเลข ......................................................................................................................... 145.1.3. เลขฐานสบหก .............................................................................................................. 145.1.4. NULL value ................................................................................................................ 145.1.5. Database, table, index, column, alias names ........................................................... 155.1.6. Case sensitivity in names.......................................................................................... 15

5.2. ชนดของขอมลคอลมน ....................................................................................................... 165.2.1. ขอมลชนดตวเลข ......................................................................................................... 165.1.2. ขอมลชนดวนท และ เวลา ............................................................................................ 175.1.3. ขอมลชนดสตรง ........................................................................................................... 17

5.3. Functions for use in SELECT and WHERE clauses...................................................... 185.1.1. ฟงกชนเกยวกบสตรง ................................................................................................... 335.1.2. ฟงกชนเกยวกบวนท และ เวลา .................................................................................... 38

5.4. CREATE DATABASE syntax.......................................................................................... 415.5. DROP DATABASE syntax .............................................................................................. 42

Page 72: Mysql Thai

5.6. CREATE TABLE syntax................................................................................................. 425.7. ALTER TABLE syntax..................................................................................................... 445.8. DROP TABLE syntax ...................................................................................................... 465.9. DELETE syntax ............................................................................................................... 465.10. SELECT syntax ............................................................................................................... 465.11. JOIN syntax ..................................................................................................................... 485.12. INSERT syntax................................................................................................................ 495.13. REPLACE syntax ............................................................................................................ 505.14. LOAD DATA INFILE syntax............................................................................................ 515.15. UPDATE syntax .............................................................................................................. 525.16. USE syntax...................................................................................................................... 525.17. SHOW syntax.................................................................................................................. 535.18. DESCRIBE syntax........................................................................................................... 535.19. GRANT และ REVOKE syntax......................................................................................... 545.20. CREATE INDEX syntax .................................................................................................. 555.21. DROP INDEX syntax ...................................................................................................... 555.22. COMMENT syntax .......................................................................................................... 565.23. MySQL reserved words................................................................................................... 56

6. บทท 6 MyODBC ....................................................................................................................... 596.1 การ install MyODBC บน Windows ....................................................................................... 596.2 การสราง DSN ของ ODBC ไดหลาย DSN เพอใชใน application ตางกน ................................ 606.3 การใช Microsoft Access เชอมตอกบ MySQL........................................................................ 61

6.3.2. import/ export table.................................................................................................... 617. บทท 7 วธใชงาน MySQL เบองตน.............................................................................................. 62

7.1 การ connect และ disconnect MySQL server ........................................................................ 627.2 การพมพค าสงเพอดงขอมลจาก database (Entering Queries) ............................................... 627.3 ตวอยางของการ query ........................................................................................................... 64

7.3.1 การสรางตาราง ............................................................................................................ 647.3.2 การสราง และ ใชงาน database ................................................................................... 64

7.4 การ Load ขอมลจากไฟล ลงไปใน ตาราง................................................................................ 657.5 การดงขอมลออกมาจากตาราง ................................................................................................ 66

7.5.1 เลอกขอมลทงตาราง .................................................................................................... 667.5.2 เลอกขอมลเฉพาะบางแถว (บาง records)..................................................................... 667.5.3 เลอกขอมลเฉพาะบางคอลมน....................................................................................... 67

7.6 การใช Pattern matching........................................................................................................ 687.7 การนบจ านวนแถวของของขอมลทถก select .......................................................................... 69