เติมเทคนิค MySQL ให้เต็มประสิทธิภาพ
ผู้เขียน: สาธิต ชัยวิวัฒน์ตระกูล
ISBN: 974-91895-4-x
จำนวนหน้า: 320 หน้า
ขนาด: 14.5 x 21 ซม.
รูปแบบหนังสือ:
หนังสือขาวดำ
ราคาปก: 225 บาท
ราคาสั่งซื้อ: 200 บาท
- แก้ไขโครงสร้างตาราง
- ควบคุมเรคอร์ดที่ซ้ำซ้อน
- จัดการข้อมูลสตริงและวันที่-เวลา
- สร้างเลขลำดับและหาผลสรุปข้อมูล
- เชื่อมตารางหลายๆ ตารางเข้าด้วยกัน
- เร่งสปีดในการค้นหาข้อมูลด้วยอินเด็กซ์
- ใช้ทรานแซกชันในระบบงานที่ต้องการความเที่ยงตรงและความปลอดภัยเต็มขั้น ...และอื่นๆ อีกมากมาย!
รวมเทคนิคการเขียนคำสั่งใน MySQL เพื่อใช้งานระดับสูง อาทิ...
บทที่ 1 เทคนิคการใช้คำสั่ง SELECT
เมื่อเห็นชื่อบทแรกนี้ บางคนอาจจะสงสัยว่า คำสั่ง SELECT มีวิธีการเรียกใช้งานง่ายๆ ไม่เห็นมีอะไรซับซ้อน แล้วจะมีเทคนิคการใช้งานอะไรที่น่าสนใจสักขนาดไหนเชียว ถ้าอยากรู้ก็ต้องตามอ่านดูแหละครับ แล้วท่านจะเชื่อว่า เราสามารถพลิกแพลงคำสั่งนี้ในลักษณะต่างๆ ให้เกิดประโยชน์ได้มากมายอย่างยิ่งทีเดียว
- แสดงข้อมูลโดยกำหนดลำดับคอลัมน์เอง
- เปลี่ยนหัวคอลัมน์ให้สื่อความหมาย
- ตั้งเงื่อนไขให้แสดงเฉพาะเรคอร์ดที่เข้าข่าย
- แสดงผลลัพธ์ที่ตรงกันข้าม
- กำจัดข้อมูลซ้ำซ้อนเพื่อไม่ให้สับสน
- จัดเรียงลำดับผลลัพธ์เพื่อความเป็นระเบียบ
- ใช้ LIMIT เลือกผลลัพธ์เฉพาะช่วงบนสุดหรือช่วงท้ายสุด
- เลือกผลลัพธ์เฉพาะเรคอร์ดช่วงกลางๆ
- ห้ามระบุสูตรหรือ expression ตามหลัง LIMIT
- ป้องกันไม่ให้คำสั่ง LIMIT ตัดข้อมูลคลาดเคลื่อน
- แก้ปัญหาข้อความยาวล้นขอบจอภาพ
- เก็บผลลัพธ์ไว้ในตารางอื่น = โคลนนิ่งตาราง
- สร้างตารางปลายทางสำหรับเก็บผลลัพธ์ก่อน
- สร้างตารางปลายทางอัตโนมัติ
- ข้อแตกต่างที่พึงระวัง
- สร้างตารางใช้งานชั่วคราว (กันพลาด)
- เพิ่มความสะดวกด้วยการใช้ตัวแปร
- เติมหมายเลขลำดับกำกับผลลัพธ์
- ต้องใช้วิธีเฉพาะในการเปรียบเทียบค่า NULL
- เปลี่ยน NULL เป็นค่าอื่นเวลาแสดงผลลัพธ์
- ตรวจสอบผลลัพธ์ก่อนเปรียบเทียบข้อมูลจริง
- เขียนคำสั่ง SQL ซ้อนกันแบบ subquery
- คุยกันท้ายบท
บทที่ 2 เทคนิคการจัดการสตริง
สตริง เป็นรูปแบบข้อมูลที่นิยมกันมากที่สุดในการเก็บบันทึกลงฐานข้อมูลก็ว่าได้ เทคนิคที่เกี่ยวข้องกับการเรียกใช้ข้อมูลสตริงก็มีหลายอย่าง และเป็นสิ่งสำคัญที่ควรรู้ไว้ เวลาที่ต้องการใช้งานจะได้สามารถเลือกประยุกต์ใช้อย่างเหมาะสม และถูกต้องตามวัตถุประสงค์
- ป้องกันความสับสนกับสัญลักษณ์ ' " \ ก่อน query
- ละเว้นการตัดช่องว่างหลังสตริงโดยอัตโนมัติ
- จะตัดแบ่งสตริงหรือรวมสตริงก็ย่อมได้
- ค้นหาสตริงย่อยภายในสตริงหลัก
- Pattern Matching โดยใช้ SQL Pattern
- Pattern Matching โดยใช้ Regular Expression
- Pattern Matching สำหรับสัญลักษณ์พิเศษ
- เปรียบเทียบสตริงได้ทั้งแบบ case-sensitive และ case-insensitive
- Pattern Matching แบบ case-sensitive และ case-insensitive
- คุยกันท้ายบท
บทที่ 3 เทคนิคการจัดการวันที่-เวลา
งานหลายๆ งานอาจจำเป็นต้องนำข้อมูลจำพวกวันที่-เวลา มาใช้ในการคำนวณ, การเปรียบเทียบ รวมไปถึงการแปลงค่าไปมาระหว่างวันที่-เวลากับตัวเลขธรรมดา ระบบ MySQL จึงเตรียมฟังก์ชันที่ใช้งานกับข้อมูลจำพวกนี้โดยเฉพาะ มาให้เลือกมากมายลายตาไปหมด จนอาจตัดสินไม่ถูกว่าจะใช้ฟังก์ชันไหนดี
- บันทึกวันที่-เวลาปัจจุบันลงในฐานข้อมูล
- เปลี่ยนรูปแบบการแสดงวันที่-เวลาได้หลากหลาย
- แยกวันที่-เวลาออกเป็นส่วนๆ
- กำหนดค่าบางค่าโดยตรงให้แก่วันที่-เวลา
- แปลงค่าไป-มาระหว่างเวลากับจำนวนวินาที
- แปลงค่าไป-มาระหว่างวันที่กับจำนวนวัน
- แปลงค่าไป-มาระหว่างวันที่-เวลากับ Unix timestamp
- เพิ่มหรือบวกเวลาในข้อมูลชนิดเวลาเข้าด้วยกัน
- คำนวณผลต่างระหว่างเวลา 2 เวลา
- เพิ่มวัน-เวลาให้แก่ข้อมูลชนิด DATE หรือ DATETIME
- คำนวณผลต่างระหว่างวันที่
- คำนวณหาอายุ
- หาวันที่วันแรกและวันที่สุดท้ายของเดือน
- หาจำนวนวันในเดือน
- วันนี้เป็นวันอะไร
- เปรียบเทียบวันที่-เวลา
- บันทึกเวลาสร้างหรือแก้ไขข้อมูลโดยอัตโนมัติ
- คุยกันท้ายบท
บทที่ 4 เทคนิคการจัดเรียงลำดับผลลัพธ์
การแสดงข้อมูลผลลัพธ์แบบเรียงลำดับ ต้องใช้คำสั่ง ORDER BY เข้ามาช่วย โดยทั่วไปเรามักจัดเรียงข้อมูลตามลำดับตัวเลขหรือลำดับตัวอักษร จากมากไปน้อยหรือจากน้อยไปมากเท่านั้น ลองมาดูวิธีอื่นๆ ที่ใช้ในการจัดเรียงลำดับข้อมูลกันบ้าง เพราะอาจจะเหมาะสมกว่าวิธีที่ใช้กันโดยปกติก็ได้
- ORDER BY เป็นคำสั่งพื้นฐานของการจัดเรียง
- จัดเรียงตามผลลัพธ์ที่ได้จากการคำนวณ
- สั่งให้เรียงตามค่าที่ไม่ได้เลือกหรือค่าจากฟังก์ชันก็ได้
- ตรึงค่า NULL ให้อยู่บนสุดหรือท้ายสุดของลำดับ
- เรียงสตริงได้ทั้ง case-sensitive และ case-insensitive
- จัดลำดับวันที่-เวลาตามปกติวิสัย
- ถ้าอยากเรียงวันที่ตามปฏิทินก็ไม่ต้องสนใจปี
- ทดลองเรียงตามเวลาในรอบ 1 วัน
- ถ้าเรียงตามวันในรอบสัปดาห์จะเริ่มวันไหนก็ได้
- ใช้สตริงย่อยที่มีความยาวคงที่ในการจัดเรียง
- สตริงย่อยที่มีความยาวไม่คงที่ก็เรียงได้เช่นกัน
- IP Address เรียงได้ทั้งแบบสตริงและแบบตัวเลข
- เจาะจงให้ค่าบางค่าอยู่ลำดับบนสุดหรือท้ายสุด
- กำหนดลำดับการเรียงก่อน-หลังด้วยตัวเราเอง
- ข้อมูลชนิด ENUM เรียงอย่างไม่เหมือนใคร
- คุยกันท้ายบท
บทที่ 5 เทคนิคการหาผลสรุปข้อมูล
ข้อมูลที่เก็บอยู่ท่วมท้นระบบฐานข้อมูล คงจะไม่มีประโยชน์อะไรนัก ถ้าไม่ได้หาผลลัพธ์ออกมาในลักษณะของผลสรุป ซึ่งจะช่วยให้นักบริหารสามารถวิเคราะห์และตัดสินใจได้อย่างไม่ผิดพลาด วิธีการหาผลสรุปไม่เพียงแต่หาจากข้อมูลรวมเท่านั้น ยังสามารถแบ่งข้อมูลเป็นกลุ่มย่อยๆ เพื่อหาผลสรุปแยกตามกลุ่มได้ด้วย
- ใช้ COUNT() นับจำนวนเรคอร์ดแบบธรรมดาๆ
- วัดค่าต่ำสุดและค่าสูงสุดโดยใช้ MIN() และ MAX()
- คำนวณผลรวมและค่าเฉลี่ยจาก SUM() และ AVG()
- นับจำนวนเรคอร์ดแบบไม่นับซ้ำ
- หาข้อมูลในเรคอร์ดที่ตรงกับค่าต่ำสุดหรือสูงสุด
- แจกแจงผลสรุปออกเป็นกลุ่มย่อย ด้วย GROUP BY
- การทำงานของ aggregate function กับค่า NULL
- ตั้งเงื่อนไขการแสดงผลสรุปของกลุ่มย่อย
- ใช้ HAVING จึงจะแสดงเรคอร์ดไม่ซ้ำซ้อน
- แบ่งผลสรุปเป็นกลุ่มย่อยตามผลการคำนวณ
- แบ่งผลสรุปข้อมูลใหม่จากผลสรุปข้อมูลเดิม
- หาค่าสูงสุดหรือต่ำสุดของผลสรุปกลุ่มย่อย
- แบ่งผลสรุปเป็นกลุ่มย่อยตามวันที่-เวลา
- คุยกันท้ายบท
บทที่ 6 เทคนิคการเชื่อมข้อมูลหลายตาราง
ในระบบงานที่มีโครงสร้างซับซ้อน ข้อมูลที่สัมพันธ์กันอาจจะต้องแยกเก็บไว้คนละตาราง เวลาจะเรียกใช้ข้อมูลก็ค่อยมาเชื่อมตารางต่างๆ เข้าด้วยกัน ถึงแม้อาจจะดูเหมือนว่ายุ่งยากสักหน่อย แต่ความจริงแล้วเป็นหนทางที่ช่วยให้เราสามารถใช้ระบบฐานข้อมูลเพื่อการจัดเก็บอย่างเต็มประสิทธิภาพและเกิดประโยชน์สูงสุด
- เชื่อมข้อมูลถึงกันหมดทุกตาราง
- ตั้งชื่อตารางแฝงให้กระชับเพื่อใช้แทนชื่อจริง
- เชื่อมตารางที่ไม่ได้อยู่ในฐานข้อมูลเดียวกัน
- เชื่อมข้อมูลจากตารางที่มีความสัมพันธ์กัน
- เชื่อมตารางเพื่อหาเรคอร์ดที่ไม่มีความสัมพันธ์กัน
- เชื่อมตารางเพื่อหาข้อมูลสูงสุดหรือต่ำสุดในกลุ่ม
- เชื่อมตารางเพื่อเติมข้อมูลที่ขาดหาย
- เชื่อมตารางที่มีความสัมพันธ์แบบ many to many
- เชื่อมข้อมูลในตารางเดียวกัน
- รวมผลลัพธ์จาก SELECT หลายคำสั่งเข้าด้วยกัน
- เชื่อมตารางเพื่อลบเรคอร์ดที่ไม่มีความสัมพันธ์กัน
- คุยกันท้ายบท
บทที่ 7 เทคนิคเพิ่มความเร็วค้นหาข้อมูลด้วยอินเด็กซ์
อินเด็กซ์เป็นเครื่องมือที่นิยมใช้เพื่อช่วยเพิ่มความเร็วในการค้นหาข้อมูลจากฐานข้อมูล เนื่องจากข้อมูลอาจจะเก็บอยู่อย่างกระจัดกระจาย ทำให้กระบวนการค้นหาข้อมูลตามปกติทำงานได้ช้า เนื้อหาในบทนี้เราจะมาทำความรู้จักกับอินเด็กซ์อย่างเจาะลึก ว่ามีกี่ประเภท, มีการทำงานอย่างไรบ้าง รวมไปถึงตัวอย่างเทคนิคการสร้างอินเด็กซ์แต่ละประเภทเพื่อใช้งาน
- อินเด็กซ์ใน MySQL ก็เหมือนอินเด็กซ์ในหนังสือ
- ข้อเสียย่อมมีบ้างเป็นธรรมดา
- อินเด็กซ์ 4 ประเภทที่ไม่เหมือนกัน
- ลองสร้างอินเด็กซ์ทันทีตอนสร้างตาราง
- เทคนิคการเลือกใช้อินเด็กซ์ให้เหมาะสม
- อย่าให้ข้อมูลซ้ำซ้อนเกิน 30%
- กำหนดอินเด็กซ์ให้สั้นที่สุด
- กรณีไหนควรสร้างอินเด็กซ์ร่วมหลายคอลัมน์
- เลือกคอลัมน์ที่เหมาะสำหรับสร้างอินเด็กซ์
- ต้องใช้ MATCH() และ AGAINST() ค้นหาจาก FULLTEXT
- Boolean Mode ช่วยเพิ่มสมรรถนะ FULLTEXT
- คุยกันท้ายบท
บทที่ 8 เทคนิคการแก้ไขโครงสร้างตาราง
ตารางที่สร้างขึ้นมาแล้ว อาจจำเป็นต้องปรับเปลี่ยนแก้ไขโครงสร้างของตารางเสียใหม่ในภายหลัง เช่น ต้องการเปลี่ยนชื่อคอลัมน์เพื่อให้สื่อความหมายชัดเจนยิ่งขึ้น, ต้องการเปลี่ยนชนิดข้อมูลของบางคอลัมน์เพื่อให้เก็บข้อมูลได้เยอะขึ้น หรือต้องการเพิ่มคอลัมน์ใหม่เข้าไปในตาราง ฯลฯ ถ้ารู้เทคนิคเหล่านี้ ก็ไม่ต้องลบตารางเดิมทิ้งแล้วสร้างตารางขึ้นมาใหม่ให้เสียเวลา
- เพิ่ม-ลบคอลัมน์ตามความเหมาะสม
- เปลี่ยนได้หมดทั้งชื่อทั้งชนิดของคอลัมน์
- กำหนดคุณสมบัติให้ครบทุกครั้งที่เปลี่ยนชื่อหรือชนิดของคอลัมน์
- ปรับเปลี่ยนค่าดีฟอลต์ประจำคอลัมน์
- แปลงประเภทของตารางตามการใช้งาน
- ลองเปลี่ยนชื่อตารางดูบ้าง
- เพิ่ม-ลบอินเด็กซ์ตามความจำเป็น
- คุยกันท้ายบท
บทที่ 9 เทคนิคการสร้างเลขลำดับ
ข้อมูลแต่ละเรคอร์ดหรือแต่ละรายการในฐานข้อมูล ควรจะมีรหัสหรือเลขที่ประจำรายการ และวิธีที่สะดวกที่สุดในการกำหนดรหัสหรือเลขที่ประจำรายการ ก็คือ การกำหนดเลขลำดับ ซึ่ง MySQL มีความสามารถในการกำหนดให้โดยอัตโนมัติอยู่แล้ว แต่ความสามารถนี้มีเทคนิคที่น่าสนใจและเราจำเป็นต้องรู้อยู่มากทีเดียว
- นับเลขลำดับอัตโนมัติด้วย AUTO_INCREMENT
- กำหนดเลขลำดับเองโดยไม่สนใจลำดับที่ถูกต้อง
- เกิดอะไรขึ้นเมื่อลบเรคอร์ดที่มีเลขลำดับอัตโนมัติ
- หาเลขลำดับล่าสุด (ซึ่งอาจไม่ใช่เลขลำดับสูงสุด)
- เพิ่มค่าในการเก็บเลขลำดับ
- จัดเรียงเลขลำดับใหม่
- นำเลขลำดับล่าสุดที่ลบทิ้งแล้วกลับมาใช้อีกครั้ง
- ตั้งค่าเริ่มต้นของเลขลำดับ
- สร้างเลขลำดับหลายชุดในคอลัมน์เดียว
- คุยกันท้ายบท
บทที่ 10 เทคนิคการจัดการเรคอร์ดที่ซ้ำซ้อน
จะว่าไปแล้ว การเก็บข้อมูลซ้ำซ้อนอาจจะไม่ใช่เรื่องใหญ่โตอะไรนัก ถ้าระบบฐานข้อมูลของเรามีขนาดเล็ก เก็บข้อมูลไม่มาก มีพื้นที่ว่างเหลือเฟือในระบบ แต่ถ้าเราปล่อยปละละเลยเรื่องนี้ตั้งแต่แรก อาจจะเกิดผลกระทบหนักหนาในระยะยาวก็ได้ การวางมาตรการป้องกันที่รัดกุมจึงเป็นแนวทางที่ควรให้ความสำคัญตั้งแต่เนิ่นๆ
- ป้องกันไม่ให้มีการเพิ่มเรคอร์ดที่ซ้ำซ้อน
- กำจัดข้อความ error เมื่อเพิ่มเรคอร์ดที่ซ้ำซ้อน
- นับจำนวนเรคอร์ดที่ซ้ำ
- แสดงเฉพาะเรคอร์ดที่ไม่ซ้ำ
- ลบเรคอร์ดที่ซ้ำออกจากตาราง
- คุยกันท้ายบท
บทที่ 11 เทคนิคการจัดการทรานแซกชัน
ถ้าระบบคอมพิวเตอร์ของเราขาดระบบป้องกันความปลอดภัยที่ดี ไร้ความน่าเชื่อถือ ไม่สามารถทำงานอย่างถูกต้องเที่ยงตรงได้ ต่อให้ MySQL มีคำสั่งหรือฟังก์ชันการทำงานเก่งกาจขนาดไหน เทคนิคล้ำลึกเลอเลิศเท่าไรก็ตาม ก็คงไม่มีประโยชน์อะไร ดังนั้นจึงต้องมีกระบวนการทำงานที่เรียกว่า ทรานแซกชัน มาช่วยเติมเต็มช่องโหว่ด้านความมั่นคงปลอดภัยให้สมบูรณ์
- เข้าใจทรานแซกชันให้ทะลุปรุโปร่งก่อน
- ตรวจสอบว่า MySQL ของคุณสนับสนุนทรานแซกชันหรือเปล่า
- เริ่มต้นใช้งานทรานแซกชัน
- ทดลองใช้ทรานแซกชันกับ PHP และ Java
- LOCK TABLE เป็นอีกทางเลือกหนึ่งแทนทรานแซกชัน
- คุยกันท้ายบท
ภาคผนวก ก คำสงวนของ MySQL
ภาคผนวก ข ใช้ JSP และ PHP ติดต่อกับ MySQL
- โค้ด JSP ต้องใช้ JDBC
- โค้ด PHP มีฟังก์ชันในตัว
ภาคผนวก ค แนะนำเว็บไซต์ MySQL และอื่นๆ ที่น่าสนใจ
ดัชนี