ฐานข้อมูลคือหัวใจของเว็บแอปเกือบทุกระบบ ใช้เก็บข้อมูลผู้ใช้ สินค้า คำสั่งซื้อ ฯลฯ อย่างเป็นระเบียบ MySQL เป็นระบบฐานข้อมูลยอดนิยมที่สุด บทความนี้จะสอนตั้งแต่แนวคิดจนเขียนคำสั่ง SQL จัดการข้อมูลได้จริง ═══════════════════════════════════════ 📌 1. ฐานข้อมูลและ MySQL คืออะไร ═══════════════════════════════════════ Database (ฐานข้อมูล) = ที่เก็บข้อมูลอย่างเป็นระบบ ค้นหา/แก้ไขได้ง่าย MySQL = ระบบจัดการฐานข้อมูลเชิงสัมพันธ์ (RDBMS) ยอดนิยม ใช้ภาษา SQL โครงสร้างแบบลำดับชั้น: • Database (ฐานข้อมูล) → เช่น "ร้านค้า" • Table (ตาราง) → เช่น "users", "products" • Column (คอลัมน์/ฟิลด์) → เช่น id, name, email • Row (แถว/เรคคอร์ด) → ข้อมูล 1 รายการ เปรียบเทียบ: Database = ตู้เอกสาร, Table = แฟ้ม, Row = แต่ละหน้ากระดาษ ═══════════════════════════════════════ 🔢 2. ชนิดข้อมูลที่ใช้บ่อย ═══════════════════════════════════════ • INT → จำนวนเต็ม (เช่น อายุ, จำนวน) • VARCHAR(n) → ข้อความสั้น กำหนดความยาว (เช่น ชื่อ อีเมล) • TEXT → ข้อความยาว (เช่น เนื้อหาบทความ) • DECIMAL(m,d) → ทศนิยม (เช่น ราคา 99.50) • DATE / DATETIME → วันที่ / วันที่+เวลา • BOOLEAN → จริง/เท็จ (0 หรือ 1) ═══════════════════════════════════════ 🏗️ 3. สร้างฐานข้อมูลและตาราง ═══════════════════════════════════════ ```sql -- สร้างฐานข้อมูล CREATE DATABASE shop; -- เลือกใช้ฐานข้อมูล USE shop; -- สร้างตาราง users CREATE TABLE users ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(100) NOT NULL, email VARCHAR(150) UNIQUE, age INT, created_at DATETIME DEFAULT CURRENT_TIMESTAMP ); ``` • AUTO_INCREMENT → เพิ่มเลขอัตโนมัติ (1, 2, 3...) • PRIMARY KEY → คีย์หลัก ระบุแถวไม่ซ้ำ • NOT NULL → ห้ามเว้นว่าง • UNIQUE → ห้ามค่าซ้ำ ═══════════════════════════════════════ ➕ 4. INSERT — เพิ่มข้อมูล ═══════════════════════════════════════ ```sql -- เพิ่ม 1 แถว INSERT INTO users (name, email, age) VALUES ('สมชาย', 'somchai@mail.com', 25); -- เพิ่มหลายแถวพร้อมกัน INSERT INTO users (name, email, age) VALUES ('สมหญิง', 'somying@mail.com', 23), ('สมศักดิ์', 'somsak@mail.com', 30); ``` ═══════════════════════════════════════ 🔍 5. SELECT — ดึงข้อมูล (สำคัญที่สุด) ═══════════════════════════════════════ ```sql -- ดึงทุกคอลัมน์ ทุกแถว SELECT * FROM users; -- ดึงเฉพาะบางคอลัมน์ SELECT name, email FROM users; -- มีเงื่อนไข (WHERE) SELECT * FROM users WHERE age >= 25; SELECT * FROM users WHERE name = 'สมชาย'; -- เรียงลำดับ (ORDER BY) SELECT * FROM users ORDER BY age DESC; -- มากไปน้อย -- จำกัดจำนวน (LIMIT) SELECT * FROM users LIMIT 10; -- ค้นหาบางส่วน (LIKE) SELECT * FROM users WHERE name LIKE '%สม%'; ``` เงื่อนไขที่ใช้ใน WHERE: =, >, <, >=, <=, !=, AND, OR, LIKE, IN ═══════════════════════════════════════ ✏️ 6. UPDATE — แก้ไขข้อมูล ═══════════════════════════════════════ ```sql -- แก้ไขต้องมี WHERE เสมอ (ไม่งั้นแก้ทุกแถว!) UPDATE users SET age = 26 WHERE id = 1; -- แก้หลายคอลัมน์ UPDATE users SET name = 'สมชาย ใจดี', age = 27 WHERE id = 1; ``` *** ระวัง: UPDATE/DELETE ที่ลืม WHERE จะกระทบทุกแถว! *** ═══════════════════════════════════════ 🗑️ 7. DELETE — ลบข้อมูล ═══════════════════════════════════════ ```sql -- ลบแถวที่ระบุ DELETE FROM users WHERE id = 3; -- ลบตามเงื่อนไข DELETE FROM users WHERE age < 18; ``` ═══════════════════════════════════════ 🔗 8. ความสัมพันธ์และ JOIN ═══════════════════════════════════════ ตารางมักเชื่อมกันด้วย Foreign Key เช่น orders เชื่อมกับ users ```sql -- ตาราง orders มี user_id ชี้ไปที่ users.id CREATE TABLE orders ( id INT AUTO_INCREMENT PRIMARY KEY, user_id INT, total DECIMAL(10,2), FOREIGN KEY (user_id) REFERENCES users(id) ); -- JOIN ดึงข้อมูลข้ามตาราง (ชื่อผู้ใช้ + ยอดสั่งซื้อ) SELECT users.name, orders.total FROM orders JOIN users ON orders.user_id = users.id; ``` • Primary Key = คีย์หลักของตาราง (ไม่ซ้ำ) • Foreign Key = คีย์ที่ชี้ไปคีย์หลักของอีกตาราง (สร้างความสัมพันธ์) • JOIN = รวมข้อมูลจากหลายตารางเข้าด้วยกัน ═══════════════════════════════════════ 📊 9. ฟังก์ชันรวมข้อมูล (Aggregate) ═══════════════════════════════════════ ```sql SELECT COUNT(*) FROM users; -- นับจำนวนแถว SELECT AVG(age) FROM users; -- ค่าเฉลี่ยอายุ SELECT MAX(age), MIN(age) FROM users; -- มากสุด/น้อยสุด SELECT SUM(total) FROM orders; -- ผลรวม -- จัดกลุ่ม (GROUP BY): นับผู้ใช้ตามอายุ SELECT age, COUNT(*) FROM users GROUP BY age; ``` ═══════════════════════════════════════ ✅ 10. สรุปคำสั่งที่ต้องรู้ ═══════════════════════════════════════ • CREATE DATABASE / TABLE → สร้าง • INSERT INTO ... VALUES → เพิ่มข้อมูล • SELECT ... FROM ... WHERE → ดึงข้อมูล • UPDATE ... SET ... WHERE → แก้ไข • DELETE FROM ... WHERE → ลบ • JOIN → รวมตาราง เคล็ดลับ: • UPDATE/DELETE ต้องมี WHERE เสมอ • ตั้ง PRIMARY KEY ให้ทุกตาราง • ฝึกกับ phpMyAdmin (มากับ XAMPP) จะเห็นภาพชัด จำไว้: SQL คือภาษาสากลของฐานข้อมูล เรียนครั้งเดียวใช้ได้กับ MySQL, PostgreSQL, SQLite 🗄️