เติมเทคนิค 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 และอื่นๆ ที่น่าสนใจ

ดัชนี