ทำความรู้จักกับ Database และโครงสร้างตาราง
ก่อนจะเริ่มเขียนโค้ด เราต้องเข้าใจก่อนว่า MySQL และ MariaDB คือระบบจัดการฐานข้อมูล (Database Management System) ที่ทำหน้าที่เป็นเหมือนสมุดจดบันทึกข้อมูลขนาดใหญ่ ข้อมูลเหล่านี้ไม่ได้กองรวมกันมั่วๆ แต่ถูกจัดเก็บไว้ในรูปแบบของ Table (ตาราง) ที่มีคอลัมน์และแถวเหมือนตารางใน Excel
การเข้าใจโครงสร้างตารางเป็นทักษะพื้นฐานสำคัญของโปรแกรมเมอร์ เพราะหากเราออกแบบตารางไว้ดี การดึงข้อมูลไปแสดงผลบนแอปพลิเคชันจะทำได้รวดเร็วและไม่ซับซ้อน ถ้าเปรียบเทียบง่ายๆ ตารางก็เหมือนกับแฟ้มเก็บประวัติลูกค้า ที่ต้องมีช่องระบุชื่อ นามสกุล และเบอร์โทรศัพท์แยกกันให้ชัดเจน
หากเราต้องการสร้างระบบสมาชิก เราต้องกำหนดว่าในตารางสมาชิกจะมีข้อมูลอะไรบ้าง เช่น Primary Key (กุญแจหลักที่ใช้ระบุตัวตนของข้อมูลแต่ละแถวไม่ให้ซ้ำกัน) เพื่อให้เราอ้างอิงถึงข้อมูลนั้นได้แม่นยำ การวางแผนโครงสร้างก่อนลงมือเขียนคำสั่งจริงจะช่วยลดปัญหาการแก้ไขข้อมูลในอนาคต
การสร้างตารางด้วยคำสั่ง CREATE TABLE
เมื่อเราเข้าใจโครงสร้างแล้ว ขั้นตอนแรกคือการใช้คำสั่ง CREATE TABLE เพื่อสร้างตารางขึ้นมาบนฐานข้อมูล คำสั่งนี้จะระบุชื่อตารางและรายละเอียดของแต่ละคอลัมน์ที่เราต้องการเก็บข้อมูล โดยเราต้องกำหนด Data Type (ประเภทของข้อมูล) ให้เหมาะสม เช่น เก็บตัวเลข หรือเก็บข้อความ
มือใหม่มักลืมกำหนดประเภทข้อมูลให้เหมาะสม ทำให้เปลืองพื้นที่จัดเก็บโดยไม่จำเป็น หรือบางครั้งลืมกำหนดค่าเริ่มต้น ซึ่งอาจทำให้เกิดข้อผิดพลาดเมื่อเราพยายามบันทึกข้อมูลว่างเปล่าลงไปในตาราง การฝึกเขียนคำสั่งสร้างตารางให้เป็นนิสัยจะช่วยให้เราเห็นภาพรวมของระบบได้ชัดเจนยิ่งขึ้น
ลองมาดูตัวอย่างการสร้างตารางเก็บข้อมูลผู้ใช้งานกันครับ เราจะกำหนดให้ id เป็นเลขลำดับและ name เป็นชื่อผู้ใช้งาน
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY, -- id เป็นเลขจำนวนเต็ม เพิ่มค่าอัตโนมัติ และเป็นคีย์หลัก
name VARCHAR(100), -- name เป็นข้อความยาวไม่เกิน 100 ตัวอักษร
email VARCHAR(100) -- email เป็นข้อความยาวไม่เกิน 100 ตัวอักษร
);
ในโค้ดนี้ INT คือเลขจำนวนเต็ม AUTO_INCREMENT คือการสั่งให้ฐานข้อมูลใส่เลขเพิ่มขึ้นเองทีละหนึ่ง ส่วน VARCHAR คือช่องเก็บข้อความที่มีความยาวจำกัด ผลลัพธ์ที่ได้คือตารางชื่อ users ที่พร้อมให้เรานำข้อมูลไปใส่ได้ทันที
การปรับเปลี่ยนโครงสร้างด้วย ALTER TABLE
ในชีวิตจริงของโปรแกรมเมอร์ เมื่อทำโปรเจกต์ไปสักพัก เรามักจะพบว่าตารางที่สร้างไว้ตอนแรกไม่เพียงพอ เช่น ต้องเก็บข้อมูลวันเกิดเพิ่มขึ้นมา ALTER TABLE คือคำสั่งที่ใช้สำหรับแก้ไขโครงสร้างตารางเดิมโดยไม่ต้องลบข้อมูลทิ้งทั้งหมด
เราสามารถใช้คำสั่งนี้เพื่อเพิ่มคอลัมน์ใหม่ ลบคอลัมน์ที่ไม่ใช้แล้ว หรือแก้ไขชนิดของข้อมูลในคอลัมน์เดิม การใช้งานคำสั่งนี้ต้องทำอย่างระมัดระวัง เพราะหากเราลบคอลัมน์ที่มีข้อมูลสำคัญอยู่ ข้อมูลเหล่านั้นจะหายไปทันทีโดยไม่สามารถกู้คืนได้ง่ายๆ
ตัวอย่างด้านล่างนี้คือการเพิ่มคอลัมน์ birth_date เข้าไปในตาราง users ที่เราสร้างไว้ก่อนหน้า
ALTER TABLE users ADD birth_date DATE; -- เพิ่มคอลัมน์วันเกิดเข้าไปในตาราง
คำสั่ง ADD จะทำหน้าที่เพิ่มช่องใหม่เข้าไปต่อท้ายสุดของตารางเดิม ผลลัพธ์คือตาราง users ของเราจะมีคอลัมน์เพิ่มขึ้นมาหนึ่งช่องคือ birth_date ซึ่งจะว่างเปล่าในทุกแถวที่มีอยู่เดิมจนกว่าเราจะเข้าไปแก้ไขเพิ่มข้อมูล
การแก้ไขและลบคอลัมน์ที่ไม่ได้ใช้งาน
บางครั้งเราอาจต้องการเปลี่ยนชื่อคอลัมน์หรือเปลี่ยนประเภทข้อมูลให้เหมาะสมกว่าเดิม การใช้ ALTER TABLE ร่วมกับคำสั่งย่อยอย่าง CHANGE หรือ MODIFY จะช่วยให้เราปรับแต่งตารางได้ตามความต้องการของแอปพลิเคชันที่เปลี่ยนไปตามฟีเจอร์ใหม่ๆ
การลบคอลัมน์ทำได้โดยใช้คำสั่ง DROP COLUMN ซึ่งเหมาะสำหรับการจัดการข้อมูลที่ล้าสมัยหรือไม่มีการใช้งานแล้ว มือใหม่มักจะเก็บคอลัมน์ขยะไว้เยอะเกินไปจนทำให้ตารางอ่านยาก การรู้จักลบสิ่งที่ไม่ได้ใช้ออกจะช่วยให้ฐานข้อมูลของเราสะอาดและจัดการง่ายขึ้น
ลองดูตัวอย่างการเปลี่ยนชื่อคอลัมน์และลบคอลัมน์ที่ไม่ต้องการทิ้งกันครับ
ALTER TABLE users CHANGE name full_name VARCHAR(150); -- เปลี่ยนชื่อคอลัมน์จาก name เป็น full_name
ALTER TABLE users DROP COLUMN email; -- ลบคอลัมน์ email ออกจากตาราง
บรรทัดแรกเป็นการเปลี่ยนชื่อและขยายขนาดข้อมูลให้รองรับตัวอักษรได้มากขึ้น ส่วนบรรทัดที่สองคือการลบคอลัมน์ที่ไม่ได้ใช้งานออกไป ผลลัพธ์คือตาราง users จะเหลือเพียงคอลัมน์ id, full_name และ birth_date เท่านั้น
การล้างข้อมูลในตารางด้วย TRUNCATE
เมื่อเราทดสอบโปรแกรมเสร็จแล้วและต้องการเริ่มนับหนึ่งใหม่โดยการล้างข้อมูลทั้งหมดในตารางทิ้ง แต่ยังต้องการเก็บโครงสร้างตารางไว้เหมือนเดิม เราจะใช้คำสั่ง TRUNCATE TABLE ซึ่งจะล้างทุกแถวในตารางออกไปอย่างรวดเร็ว
อย่าสับสนระหว่าง TRUNCATE กับ DELETE นะครับ เพราะ TRUNCATE เป็นการล้างทั้งตารางและรีเซ็ตเลข AUTO_INCREMENT ให้กลับไปเริ่มที่ 1 ใหม่ ในขณะที่ DELETE จะลบทีละแถวและไม่รีเซ็ตเลขลำดับ ทำให้การล้างข้อมูลด้วย TRUNCATE เหมาะกับการเตรียมฐานข้อมูลให้สะอาดก่อนส่งงาน
ตัวอย่างการใช้งานนั้นง่ายมาก เพียงพิมพ์ชื่อตารางตามหลังคำสั่งนี้ครับ
TRUNCATE TABLE users; -- ล้างข้อมูลทั้งหมดในตาราง users
คำสั่งนี้จะจัดการลบข้อมูลทั้งหมดใน users ออกจนว่างเปล่า ผลลัพธ์คือเมื่อเราเพิ่มข้อมูลใหม่เข้าไปหลังจากนี้ ค่า id จะกลับมาเริ่มนับที่ 1 อีกครั้ง ทำให้ตารางกลับมาอยู่ในสถานะเหมือนตอนที่สร้างเสร็จใหม่ๆ
สรุป: การนำไปใช้จริงในการพัฒนาซอฟต์แวร์
การจัดการตารางด้วย SQL ไม่ใช่เรื่องยากหากเราหมั่นฝึกฝนและทำความเข้าใจลำดับขั้นตอน สมมติว่าวันนี้คุณกำลังทำระบบร้านค้าออนไลน์ ขั้นแรกคุณต้อง CREATE TABLE เพื่อสร้างตารางสินค้า หลังจากนั้นเมื่อลูกค้าต้องการให้เพิ่มฟีเจอร์ "สีของสินค้า" คุณก็แค่ใช้ ALTER TABLE เพื่อเพิ่มคอลัมน์ color เข้าไป
ในช่วงทดสอบระบบ คุณอาจจะใส่ข้อมูลตัวอย่างเข้าไปนับร้อยแถวเพื่อลองระบบค้นหา เมื่อถึงเวลาล้างข้อมูลเพื่อเตรียมเดโมให้ลูกค้าดู คุณก็ใช้ TRUNCATE เพื่อล้างข้อมูลเก่าทิ้งทั้งหมด การทำแบบนี้จะช่วยให้คุณทำงานได้เป็นมืออาชีพและลดความผิดพลาดในการจัดการฐานข้อมูลจริง
จำไว้ว่าฐานข้อมูลคือหัวใจของโปรแกรมทุกชนิด การออกแบบที่ดีตั้งแต่ต้นจะช่วยให้คุณประหยัดเวลาในการแก้ไขงานในอนาคตได้มหาศาล เริ่มฝึกจากการสร้างตารางเล็กๆ ในเครื่องตัวเอง แล้วลองแก้ไขโครงสร้างไปเรื่อยๆ จนคล่อง แล้วคุณจะพบว่าการจัดการฐานข้อมูลเป็นเรื่องที่สนุกและท้าทายมากครับ