MySQL ใช้ภาษา SQL (Structured Query Language) ในการจัดการฐานข้อมูล ซึ่งสามารถแบ่งชุดคำสั่งหลักๆ ได้เป็น 4 ประเภทดังนี้:
- DDL (Data Definition Language): ภาษาสำหรับนิยามข้อมูล – ใช้สร้าง, แก้ไข, และลบโครงสร้างของฐานข้อมูล
- DML (Data Manipulation Language): ภาษาสำหรับจัดการข้อมูล – ใช้เพิ่ม, แก้ไข, ลบ, และเรียกดูข้อมูลภายในตาราง
- DCL (Data Control Language): ภาษาสำหรับควบคุมข้อมูล – ใช้กำหนดสิทธิ์การเข้าถึงข้อมูล
- TCL (Transaction Control Language): ภาษาสำหรับควบคุมธุรกรรม – ใช้จัดการการเปลี่ยนแปลงข้อมูล
1. DDL (Data Definition Language)
ใช้สำหรับสร้างและจัดการโครงสร้างของอ็อบเจกต์ในฐานข้อมูล เช่น ตาราง (Table), ดัชนี (Index)
คำสั่ง | คำอธิบาย | ตัวอย่างการใช้งาน |
CREATE | สร้างอ็อบเจกต์ใหม่ในฐานข้อมูล เช่น ฐานข้อมูล (DATABASE) หรือ ตาราง (TABLE) | สร้างฐานข้อมูล:CREATE DATABASE my_store; สร้างตาราง: CREATE TABLE products (id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(100) NOT NULL,price DECIMAL(10, 2), created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP); |
ALTER | แก้ไขโครงสร้างของตารางที่มีอยู่แล้ว เช่น การเพิ่ม/ลบ/แก้ไขคอลัมน์ | เพิ่มคอลัมน์:ALTER TABLE products ADD COLUMN stock INT; แก้ไขประเภทข้อมูลคอลัมน์: ALTER TABLE products MODIFY COLUMN name VARCHAR(150); ลบคอลัมน์: ALTER TABLE products DROP COLUMN created_at; |
DROP | ลบอ็อบเจกต์ออกจากฐานข้อมูลอย่างถาวร (ไม่สามารถกู้คืนได้) | ลบตาราง:DROP TABLE products; ลบฐานข้อมูล: DROP DATABASE my_store; ข้อควรระวัง: คำสั่งนี้จะลบทั้งโครงสร้างและข้อมูลทั้งหมดอย่างถาวร |
TRUNCATE | ลบข้อมูลทั้งหมดในตารางออกไปอย่างรวดเร็ว แต่ยังคงโครงสร้างตารางไว้ | TRUNCATE TABLE products; หมายเหตุ: TRUNCATE เร็วกว่า DELETE ที่ไม่มี WHERE clause เพราะไม่บันทึกการลบทีละแถว |
2. DML (Data Manipulation Language)
ใช้สำหรับจัดการกับข้อมูลที่อยู่ภายในตาราง
คำสั่ง | คำอธิบาย | ตัวอย่างการใช้งาน |
SELECT | ดึงหรือค้นหาข้อมูลจากตาราง | ดึงทุกคอลัมน์จากตาราง:SELECT * FROM products; ดึงบางคอลัมน์: SELECT name, price FROM products; ดึงข้อมูลแบบมีเงื่อนไข: SELECT * FROM products WHERE price > 500; ดึงและจัดเรียงข้อมูล: SELECT * FROM products ORDER BY name ASC; |
INSERT INTO | เพิ่มข้อมูลแถวใหม่ (Record) เข้าไปในตาราง | ระบุชื่อคอลัมน์:INSERT INTO products (name, price, stock) VALUES ('Laptop', 25000.00, 10) ;ไม่ระบุชื่อคอลัมน์ (ต้องใส่ข้อมูลครบทุกคอลัมน์และเรียงลำดับถูกต้อง): INSERT INTO products VALUES (2, 'Mouse', 450.00, 50); |
UPDATE | แก้ไขข้อมูลที่มีอยู่แล้วในตาราง | UPDATE employees SET position = ‘รองหัวหน้าแผนกซ่อมบำรุง' WHERE employee_id = 301050001; UPDATE employees SET position = ‘เมียรองหัวหน้าแผนกซ่อมบำรุง’ WHERE employee_id = 301050004; ข้อควรระวัง: หากไม่ระบุ WHERE clause ข้อมูลในคอลัมน์ที่ระบุจะถูกอัปเดตทั้งหมดทุกแถว! |
DELETE | ลบข้อมูลแถวออกจากตาราง | DELETE FROM products WHERE id = 2; ข้อควรระวัง: หากไม่ระบุ WHERE clause ข้อมูลทั้งหมดในตารางจะถูกลบ! |
3. DCL (Data Control Language)
ใช้สำหรับจัดการสิทธิ์การเข้าถึงฐานข้อมูลของผู้ใช้ (User)
คำสั่ง | คำอธิบาย | ตัวอย่างการใช้งาน |
GRANT | ให้สิทธิ์ผู้ใช้ในการเข้าถึงหรือจัดการฐานข้อมูล | ให้สิทธิ์ SELECT และ INSERT บนตาราง products แก่ผู้ใช้ john :GRANT SELECT, INSERT ON my_store.products TO 'john'@'localhost'; ให้สิทธิ์ทั้งหมดบนทุกตารางในฐานข้อมูล my_store :GRANT ALL PRIVILEGES ON my_store.* TO 'admin'@'localhost'; |
REVOKE | ยกเลิกสิทธิ์ที่เคยให้ไปแล้ว | ยกเลิกสิทธิ์ INSERT จากผู้ใช้ john :REVOKE INSERT ON my_store.products FROM 'john'@'localhost'; |
4. TCL (Transaction Control Language)
ใช้สำหรับจัดการกลุ่มของคำสั่ง DML ให้ทำงานเป็นหน่วยเดียวกัน (Transaction) เพื่อรับประกันความถูกต้องของข้อมูล
คำสั่ง | คำอธิบาย | ตัวอย่างการใช้งาน |
COMMIT | บันทึกการเปลี่ยนแปลงข้อมูลทั้งหมดที่ทำใน Transaction นั้นอย่างถาวร | START TRANSACTION; UPDATE accounts SET balance = balance - 100 WHERE id = 1; UPDATE accounts SET balance = balance + 100 WHERE id = 2; COMMIT; |
ROLLBACK | ยกเลิกการเปลี่ยนแปลงทั้งหมดที่เกิดขึ้นใน Transaction ปัจจุบัน | START TRANSACTION; UPDATE products SET stock = 5 WHERE id = 1; -- ตรวจสอบแล้วพบว่าทำผิด ROLLBACK; |
SAVEPOINT | กำหนดจุดบันทึกภายใน Transaction เพื่อให้สามารถย้อนกลับมาที่จุดนั้นได้ | START TRANSACTION; INSERT INTO orders (customer_id, amount) VALUES (101, 2000); SAVEPOINT point1; INSERT INTO order_details (order_id, product_id) VALUES (LAST_INSERT_ID(), 5); -- หากเกิดข้อผิดพลาด สามารถย้อนกลับไปที่ savepoint ได้ ROLLBACK TO SAVEPOINT point1; |