Professional Documents
Culture Documents
MySQL Thai
MySQL Thai
MySQL
Database Server
ภาควิชาวิศวกรรมคอมพิวเตอร คณะวิศวกรรมศาสตร
มหาวิทยาลัยเชียงใหม
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 มีขอ ดีทสี่ าคั
ํ ญคือ ความยืดหยุนที่สมบูรณในการกลาวถึงความสัมพันธระหวาง
รายการขอมูลที่แตกตางกัน การตัดสินใจหลักๆของผูอ อกแบบฐานขอมูลคือการกําหนดตาราง Relation
Database ถือวาเปนฐานขอมูลแบบทีน่ ําไปสูก ารพัฒนาระบบ Client/Server ซึ่งจะ
กลาวถึงในหัวขอตอไป
2.! บทที่ 2 ระบบฐานขอมูลแบบ Client/Server
ระบบ Client/Server นีเ้ ปนการแยกการทํางานของ Font-end กับ Back-end ออกจากกันโดยผูใช
สามารถที่จะทําการทํางานกับฐานขอมูลไดโดยไมจําเปนตองทํางานอยูที่เครื่องที่ทําหนาทีเ่ ก็บฐานขอมูลอยู
นัน้ เราจะเรียกวา Back-end ในการนําเสนอระบบนีอ้ ยางไรนัน้ ขึน้ กับ Platform ที่ Font-end กับ Back-end
ทํางานอยู และระดับการจัดการทีถ่ กู แบงออกเปน 2 สวน
+,-'.$ +,-'.$
"#$#%#&'!(')*')
+,-'.$
2.2.!ขอเสียของระบบ Client/Server
(1)! การเพิ่มคาใชจายในการจัดการและเตรียมบุคลากรที่จะทําหนาที่บํารุงรักษา Database Server
เมือ่ จํานวนผูใชมีมากขึ้นหรือเมื่อฐานขอมูลมีขนาดใหญมากขึ้น นอกจากนีก้ ารฝกฝนผูค วบคุม
ระบบยังเปนคาใชจายที่เพิ่มขึ้นในตอนเริ่มตนดวย เนื่องจากคนที่เขามาทํางานอาจจะไมคุนเคย
กับระบบที่ทําอยู
(2)! การเพิ่มคาใชจายทางดาน Hardware ก็จะเพิม่ ขึน้
3.! บทที่ 3 เกีย่ วกับ 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
โดยรูปแบบ 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)
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++
-! ตรวจสอบการใช escape และ quote ในการ query
(6)! การสงขอมูลผานระบบเน็ตเวิรก ควรมีการเขารหัสโดยใช SSL
ooh
เปน full superuser ซึง่ สามารถ connect มายัง server จากทีไ่ หนก็ได แตตองใช password
‘something’ ในการติดตอกับ server
admin
เปน user ทีส่ ามารถ connect จาก local host โดยไมใช password และสามารถใชสทิ ธิในการ
reload และ process MySQL ได นัน้ คือ admin สามารถ run คําสัง่ mysqladmin reload, mysqladmin
refresh และ mysql flush-* ได แตไมสามารถใช Database ไหนได ซึ่งมันสามารถถูก grant ไดภายหลังโดย
ใช GRANT statement
dummy
user สามารถ connect โดยไมใช password แตตองจาก local host เทานัน้ สิทธิทั่วไปถูก set ให
เปน ‘N’
คุณสามารถ add ขอมูลของ user เหลานีไ้ ดโดยตรง โดยใช INSERT statements และ บอกให server reload
grant tables
shell> mysql --user=root mysql
mysql> 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 จาก 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 , ทําไดดงั นี้ :
shell> mysql --user=root mysql
mysql> 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 custom@cpe.cmu
IDENTIFIED BY 'manager';
mysql> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP
ON transcript.*
TO custom@'%'
IDENTIFIED BY 'manager';
หรือจะ set up สิทธิของ user จากการแกไขที่ grant table โดยตรงก็ได ดังนี้ :
shell> mysql --user=root mysql
คําสัง่ 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 r ant tables :
mysql> INSERT INTO user VALUES ('%.mydomainname.com', 'myusername',
PASSWORD('mypassword'),...);
mysql> FLUSH PRIVILEGES;
จากคําสัง่ นี้ ผลลัพธทไ่ี ดคอื คําวา ‘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 เขามาได
ถาคุณ set password โดยใช GRANT ... IDENTIFIED BY statement หรือ ใช คําสัง่ mysqladmin
password ก็ไมจําเปนตองใช function PASSWORD() เนือ่ งจากมันจะทําการเขารหัสใหโดยอัตโนมัติ ดังนี้ :
mysql> GRANT USAGE ON *.* TO jeffrey@"%" IDENTIFIED BY 'biscuit';
5.1.1.! สตริง
สตริง คือ ตัวอักขระที่นามาเขี
ํ ยนเรียงกัน ซึ่งจะถูกลอมดวยเครื่องหมาย single quote (‘’)
หรือ double quote (“”) ก็ได เชน
'a string'
"another string"
5.1.2.! ตัวเลข
interger number คือ กลุมของตัวเลขที่เรียงตอกัน สวน float number นัน้ จะมีการใช
เครื่องหมาย . เพือ่ ทําการแยกสวนทศนิยมออก โดยทั้ง interger และ float numbers นั้นสามารถมี
คาเปนลบได กําหนดโดยใชเครื่องหมาย – นําหนา ดังตัวอยางตอไปนี้
1221
0
-32
294.42
-32032.6809e+10
148.00
จะเห็นไดวา เลขจํานวนเต็มนัน้ สามารถอางอยูใ นรูปของ float number ไดเชนกัน
5.1.3.! เลขฐานสิบหก
MySQL นัน้ สามารถอางถึงตัวเลขฐานสิบหกได เมื่อ MySQL ทําการประมวลผลแลวจะ
สามารถแปลงเลขฐานสิบหกเปนเลขฐานสิบ หรือแปลงเปนอักขระก็ได โดยเลขฐานสิบหกสองตัวติด
กันจะถูกแปลงเปนอักขระหนึง่ ตัว ดังตัวอยางตอไปนี้
mysql> SELECT 0xa+0
-> 10
mysql> select 0x5061756c;
-> Paul
5.2.! ชนิดของขอมูลคอลัมน
Column ทีส่ ามารถมีไดใน MySQL แตละชนิดตองการเนือ้ ทีใ่ นการเก็บขอมูลตางกัน ดังนี้
5.2.1.! ขอมูลชนิดตัวเลข
Column type Storage required
TINYINT 1 byte
SMALLINT 2 bytes
MEDIUMINT 3 bytes
INT 4 bytes
INTEGER 4 bytes
BIGINT 8 bytes
FLOAT(X) 4 if X <= 24 or 8 if 25 <= X <= 53
FLOAT 4 bytes
DOUBLE 8 bytes
DOUBLE PRECISION 8 bytes
REAL 8 bytes
DECIMAL(M,D) M bytes (D+2, if M < D)
NUMERIC(M,D) M bytes (D+2, if M < D)
5.2.2.! ขอมูลชนิดวันที่ และ เวลา
Column type Storage required
DATE 3 bytes
DATETIME 8 bytes
TIMESTAMP 4 bytes
TIME 3 bytes
YEAR 1 byte
หากไมมีขอมูลใน column ชนิด date และ time (Zero value) คาที่เก็บลงใน column แสดงดังตารางตอไปนี้
Column type ``Zero'' value
DATETIME '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 required
CHAR(M) M bytes, 1 <= M <= 255
VARCHAR(M) L+1 bytes, where L <= M and 1 <= M <= 255
TINYBLOB, TINYTEXT L+1 bytes, where L < 2^8
BLOB, TEXT L+2 bytes, where L < 2^16
MEDIUMBLOB,
L+3 bytes, where L < 2^24
MEDIUMTEXT
LONGBLOB,
L+4 bytes, where L < 2^32
LONGTEXT
ENUM('value1','value2',... 1 or 2 bytes, depending on the number of enumeration values (65535
) values maximum)
1, 2, 3, 4 or 8 bytes, depending on the number of set members (64
SET('value1','value2',...)
members maximum)
5.3.! Functions for use in SELECT and WHERE clauses
select_expression หรือ where_definition ในประโยค SQL สามารถจะใสนิพจนใดที่ใชฟงกชันดัง
ทีจ่ ะอธิบายตอไปได นิพจนทม่ี ี NULL จะไดคา ทีเ่ ปน NULL เสมอ เวนแตวาในนิพจนนั้นจะมีฟงกชันและ
ตัวกระทําตัวอืน่ อยูใ นนัน้ (หมายเหตุ หามมีชองวางหรือวงเล็บในชื่อฟงกชัน)
ตัวอยาง
5.3.2 ตัวกระทําทางคณิตศาสตรทว่ั ไป
ประกอบดวยตัวกระทําทางคณิตศาสตรที่ใชกันบอยๆ เชน +, -, * , /
ตัวอยาง
+ : การบวก
mysql> select 3+5;
-> 8
- : การลบ
mysql> select 3-5;
-> -2
* : การคูณ
mysql> select 3*5;
-> 15
mysql> select 18014398509481984*18014398509481984.0;
-> 324518553658426726783156020576256.0
mysql> select 18014398509481984*18014398509481984;
-> 0
ผลลัพธของนิพจนสดุ ทายไมถกู ตองเพราะวาผลลัพธของการคูณเลขจํานวนเต็มเกินคาในชวงการ
คํานวณของ BIGINT 64 บิท
/ : การหาร
mysql> select 3/5;
-> 0.60
การหารดวยคาศูนย ผลลัพธจะไดเปนคา NULL
mysql> select 102/(1-1);
-> NULL
|###$##Bitwise OR
mysql> select 29 | 15;
-> 31
~ : เปลี่ยนคาบิททั้งหมดใหเปนคาตรงกันขาม
mysql> select 5 & ~1
-> 4
BIT_COUNT(N)
สงกลับจํานวนบิทที่ใชในการนับเลขจํานวน N
mysql> select BIT_COUNT(29);
-> 4
OR : ||
AND : &&
ตัวกระทําเปรียบเทียบ ไดแก
= : Equal
mysql> select 1 = 0;
-> 0
mysql> select '0' = 0;
-> 1
mysql> select '0.0' = 0;
-> 1
mysql> select '0.01' = 0;
-> 0
mysql> select '.01' = 0.01;
-> 1
expr IN (value,...)
ISNULL(expr)
COALESCE(list)
INTERVAL(N,N1,N2,N3,...)
5.3.6 การเปรียบเทียบสตริง
ตัวอยาง
mysql> select 'David!' LIKE 'David_';
-> 1
mysql> select 'David!' LIKE '%D%v%';
-> 1
ถาตองการเปรียบเทียบอักขระตัวเดียวดวยการระบุอกั ขระ ใหใช “\” นําหนาอักขระที่ตองการจะ
เปรียบเทียบในรูปแบบ
\% แทนอักขระ % หนึ่งตัว
\_ แทนอักขระ _ หนึ่งตัว
ตัวอยาง
mysql> select 'David!' LIKE 'David\_';
-> 0
mysql> select 'David_' LIKE 'David\_';
-> 1
ในการกําหนกอักขระ ESCAPE ตัวอื่น ใหใชประโยค ESCAPE ในการกําหนด เชน
mysql> select 'David_' LIKE 'David|_' ESCAPE '|';
-> 1
STRCMP()
BINARY
IFNULL(expr1,expr2)
ถา expr1 ไมใช NULL, IFNULL() จะใหคา expr1, มิฉะนั้นจะใหคา expr2. IFNULL() จะใหคา ตัว
เลขหรือสตริง ขึ้นอยูกับวาใชแบบไหน ตัวอยาง
mysql> select IFNULL(1,0);
-> 1
mysql> select IFNULL(0,10);
-> 0
mysql> select IFNULL(1/0,10);
-> 10
mysql> select IFNULL(1/0,'yes');
-> 'yes'
IF(expr1,expr2,expr3)
ถา expr1 เปนจริง (TRUE) โดยที่ (expr1 <> 0 and expr1 <> NULL) แลว IF() จะใหคา expr2,
มิฉะนั้นจะใหคา expr3. IF() จะใหคา ตัวเลขหรือสตริงขึน้ อยูก บั วาคาไหนถูกใช ตวอยาง
ABS(X)
SIGN(X)
MOD(N,M) : %
CEILING(X)
ROUND(X)
ROUND(X,D)
LOG(X)
LOG10(X)
POW(X,Y)
POWER(X,Y)
PI()
COS(X)
SIN(X)
TAN(X)
ASIN(X)
ใหคาอารคซายของ X ตัวอยางเชน
mysql> select ASIN(0.2);
-> 0.201358
mysql> select ASIN('foo');
-> 0.000000
ATAN(X)
ใหคาอารคแทนเจนทของ X ตัวอยาง
mysql> select ATAN(2);
-> 1.107149
mysql> select ATAN(-2);
-> -1.107149
ATAN2(X,Y)
RAND()
RAND(N)
ใหคา เลข floating-point สุมในชวงของ 0 ถึง 1.0 คา N ถาใสจะเปน seed value ตัวอยางเชน
mysql> select RAND();
-> 0.5925
mysql> select RAND(20);
-> 0.1811
mysql> select RAND(20);
-> 0.1811
mysql> select RAND();
-> 0.2079
mysql> select RAND();
-> 0.7888
ASCII(str)
Return รหัส ASCII ของตัวอักษรทีอ่ ยูซ า ยสุดของ string str
Return NULL ถา str เปน empty string
mysql> select ASCII('2');
-> 50
mysql> select ASCII(2);
-> 50
mysql> select ASCII('dx');
-> 100
BIN(N)
Return คา Binary ของ N ซึง่ N สามารถมีคาไดเทากับ BIGINT
Returns 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 N
mysql> select CHAR(77,121,83,81,'76');
-> 'MySQL'
mysql> select CHAR(77,77.3,'77.3');
-> 'MMM'
LENGTH(str)
Return ความยาวของ string str
POSITION(substr IN str)
Return ตําแหนงของ ตัวอักษรตัวแรกของ substring substr ใน string str.
Return 0 ถา substr ไมอยูใน str
mysql> select LOCATE('bar', 'foobarbar');
-> 4
mysql> select LOCATE('xbar', 'foobar');
-> 0
LOCATE(substr,str,pos)
Return ตําแหนงของ ตัวอักษรตัวแรกของ substring substr ใน string str โดยเริ่มคนหาตั้งแต
ตําแหนง pos
Return 0 ถา substr ไมอยูใน str
mysql> select LOCATE('bar', 'foobarbar',5);
-> 7
INSTR(str,substr)
เหมือนกับ LOCATE เพียงแตสลับที่ argument
Return ตําแหนงของ ตัวอักษรตัวแรกของ substring substr ใน string str
Return 0 ถา substr ไมอยูใน str
mysql> select INSTR('foobarbar', 'bar');
-> 4
mysql> select INSTR('xbar', 'foobar');
-> 0
LPAD(str,len,padstr)
Return string str ซึง่ จะเติมตัวอักษรทางซายของ str ดวยเครื่องหมาย padstr จน string มีความ
ยาวเทากับ len ตัวอักษร
mysql> select LPAD('hi',4,'??');
-> '??hi'
RPAD(str,len,padstr)
Return string str ซึง่ จะเติมตัวอักษรทางขวาของ str ดวยเครื่องหมาย padstr จน string มีความ
ยาวเทากับ len ตัวอักษร
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)
MID(str,pos,len)
Return string ทีม่ คี วามยาวเทากับ len ตัวอักษร จาก str เริ่มจากตําแหนง pos
mysql> select SUBSTRING('Quadratically',5,6);
-> 'ratica'
SUBSTRING(str,pos)
RTRIM(str)
Returns str ทีไ่ มมีชองวางอยูดานหลัง str
mysql> select RTRIM('barbar ');
-> 'barbar'
LCASE(str)
LOWER(str)
Return str ทีเ่ ปนตัวอักษรพิมพเล็กทั้งหมด
mysql> select LCASE('QUADRATICALLY');
-> 'quadratically'
UCASE(str)
UPPER(str)
Return str ทีเ่ ปนตัวอักษรพิมพเล็กทั้งหมด
mysql> select UCASE('Hej');
-> 'HEJ'
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'
YEAR(date)
Return ปสําหรับวันที่ ซึง่ อยูในชวง 1000-9999
mysql> select YEAR('98-02-03');
-> 1998
HOUR(time)
Return ชัว่ โมง จาก 0 ถึง 23
mysql> select HOUR('10:05:03');
-> 10
MINUTE(time)
Return นาที จาก 0 ถึง 59
mysql> select MINUTE('98-02-03 10:05:03');
-> 5
SECOND(time)
Return วินาที จาก 0 ถึง 59
mysql> select SECOND('10:05:03');
-> 3
DATE_FORMAT(date,format)
รูปแบบของวันที่ที่ MySQL สามารถแสดงได ซึง่ ใช string ในตารางขางลางเปนตัวกําหนดรูปแบบ
ตัวอยาง
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 แตใชบอกเวลา
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' หรือ YYYYMMDDHHMMSS
mysql> select NOW();
-> '2000-02-05 23:50:26'
mysql> select NOW() + 0;
-> 20000205235026
รูปแบบของ 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 }
รูปแบบของ select_statement:
[IGNORE | REPLACE] SELECT ... (Some legal select statement)
ไฟล จุดมุงหมาย
tbl_name.frm Table definition (form) file
tbl_name.MYD Data file
tbl_name.MYI Index file
รูปแบบของ 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
หรือ MODIFY [COLUMN] create_definition
หรือ DROP [COLUMN] col_name
หรือ DROP PRIMARY KEY
หรือ DROP INDEX index_name
หรือ RENAME [AS] new_tbl_name
หรือ table_options
•! ในการใช 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 ในการเพิม่
คอลัมน ณ ตําแหนงที่ตองการภายในตาราง
mysql> SELECT 1 + 1;
-> 2
table_reference, table_reference
table_reference [CROSS] JOIN table_reference
table_reference INNER JOIN table_reference
table_reference STRAIGHT_JOIN table_reference
table_reference LEFT [OUTER] JOIN table_reference ON conditional_expr
table_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 }
ประโยคขางตนมีความหมายเดียวกับประโยคขางลางนี้
•! 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;
LOCAL หมายถึง file ทีถ่ กู อานถูกเก็บไวที่ client ซึง่ จะทําใหเครื่องทํางานชาลง เนือ่ งจาก server จะตองไป
อาน file จากเครือ่ ง client ถาไมมีคําวา LOCAL , file จะตองถูกเก็บไวท่ี server และ การอาน
text files ทีอ่ ยูบน server file จะตองอยูใ น database directory หรือเปน file ที่ user ทุกคนสามารถเปด
อานได นัน่ คือถาคุณตองการอาน file จาก server คุณจะตองกําหนด file privilege บน server host.
การหาตําแหนงของ 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;
5.15.! UPDATE syntax
รูปแบบการใช UPDATE มีดังนี้
ตัวอยาง
mysql> UPDATE persondata SET age=age+1;
USE db_name
ตัวอยาง
mysql> USE db1;
mysql> SELECT count(*) FROM mytable; # selects from db1.mytable
mysql> USE db2;
mysql> SELECT count(*) FROM mytable; # selects from db2.mytable
DESCRIBE ใชแสดงขอมูลเกีย่ วกับ columns ของ table tbl_name โดยที่ col_name อาจเปนตัว
อักษร หรือ ‘%’ และ ‘_’ (wildcard character)
5.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
ชนิดของสิทธิทใ่ี ชสําหรับ table คือ SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, GRANT,
INDEX and ALTER.
สําหรับ column ทีม่ ชี นิดขอมูลเปน CHAR และ VARCHAR , เราสามารถสราง index ใหกบั ขอมูลทัง้ 2
ชนิดโดยใชเพียงสวนหนึ่งของ columns ได เชน หากตองการใหสราง index โดยใชตัวอักษร 10 ตัวแรกของ
column ชื่อ name ใหใชคําสัง่ ดังนี้ :
สัญลักษณจากตารางดานบนบางตัวไมสามารถใชตั้งเปนชื่อตารางหรือคอลัมนได ตามมาตรฐานของ
ANSI SQL แตสําหรับ MySQL สามารถใชได สัญลักษณเหลานัน้ ไดแก
•! ACTION
•! BIT
•! DATE
•! ENUM
•! NO
•! TEXT
•! TIME
•! TIMESTAMP
6.! บทที่ 6 MyODBC
(3)! เมื่อ setup เสร็จแลว คุณจะเห็นหนาตาง Data Sources ดังรูปที่ (2) ใหเลือก sample-MySQL
แลวกดปุม Setup เพือ่ setup Myodbc
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
คาตางๆ ได
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
เครื่องหมาย ******** จะปรากฏแทนที่ password ของคุณ เมือ่ คุณปอน password หากคุณสามารถ login
เขามาได คุณจะเห็น mysql> prompt ซึง่ หมายถึง MySQL พรอมที่จะรับคําสัง่ จากคุณ
shell> mysql -h host -u user -p
Enter password: ********
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 459 to server version: 3.22.20a-log
mysql>
หลังจากคุณสามารถ connect ไปยัง MySQL server ไดแลว คุณสามารถ disconnect ไดโดยพิมพคําวา quit
หรือกดปุม Control-D
mysql> QUIT
Bye
mysql> SELECT
-> USER()
-> ,
-> CURRENT_DATE;
+--------------------+--------------+
| USER() | CURRENT_DATE |
+--------------------+--------------+
| joesmith@localhost | 1999-03-18 |
+--------------------+--------------+
จากตัวอยางขางตน จะเห็นวา prompt ของ mysql เปลีย่ นจาก mysql> เปน -> เมือ่ คุณกดปุม enter
โดยที่ยังไมใสเครื่องหมาย semicolon หากคุณตองการยกเลิกคําสั่งที่คุณพิมพไปแลว คุณ
สามารถยกเลิกไดโดยการพิมพ \c
mysql> SELECT
-> USER()
-> \c
mysql>
Prompt ความหมาย
mysql> พรอมรับคําสัง่ ตอไป
-> รอรับคําสัง่ บรรทัดตอไป
‘> รอรับคําสัง่ บรรทัดตอไป ซึ่งจะตองมีเครื่องหมาย single quote ในคําสัง่ ดวย
“> รอรับคําสัง่ บรรทัดตอไป ซึ่งจะตองมีเครื่องหมาย double quote ในคําสัง่ ดวย
ตารางแสดงรูปแบบของ prompt ที่คุณสามารถพบไดใน MySQL
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));
+---------+--------+-------+
| 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 |
+---------+--------+-------+
สําหรับการใชงานบน Linux, ชื่อของ database เปนแบบ case sensitive นัน้ คือ database student ไม
เหมือนกับ Student และ ไมเหมือนกับ STUDENT ซึ่งการตั้งชื่อ table ก็ใชกฎเดียวกันดวย
การสราง database จะสรางขึน้ มาในครัง้ แรกเพียงครัง้ เดียวเทานัน้ แตการใชงานแตคุณตองเลือก
database กอนที่จะใชงานทุกครั้ง
อีกวิธีคือ ระบุ database ทีต่ องการใชงาน ตอน login ใช MySQL Server เลย
shell> mysql -h host -u user -p database_name
Enter password: ********
7.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 ใชคําสัง่
โดยที่คาที่จะ insert เขาไป จะตองเรียงตาม column เหมือนกัน CREATE TABLE statement คาใดไมมี ให
ใช NULL เติมแทน
7.5!การดึงขอมูลออกมาจากตาราง
คําสัง่ SELECT ถูกใชในการดึงขอมูลออกมาจากตาราง รูปแบบทั่วไปของคําสัง่ select เขียนไดดงั นี้
SELECT what_to_select
FROM which_table
WHERE conditions_to_satisfy
7.5.1! เลือกขอมูลทั้งตาราง
วิธีการ select ขอมูลทั้งหมดมาจากตาราง
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 = "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 |
+----------+------------+
ตองการหาชื่อเจาของสัตวเลี้ยง
mysql> SELECT owner FROM pet;
+--------+
| owner |
+--------+
| Harold |
| Gwen |
| Harold |
| Benny |
| Diane |
| Gwen |
| Gwen |
| Benny |
| Diane |
+--------+
7.7!การนับจํานวนแถวของของขอมูลที่ถูก select
ใช function COUNT() ในการนับจํานวนแถวที่ query ได โดยใชรวมกับ SELECT statement:
mysql> SELECT COUNT(*) FROM pet;
+----------+
| COUNT(*) |
+----------+
| 9 |
+----------+