EP06: ชุดคำสั่งพื้นฐานของ MySQL

MySQL ใช้ภาษา SQL (Structured Query Language) ในการจัดการฐานข้อมูล ซึ่งสามารถแบ่งชุดคำสั่งหลักๆ ได้เป็น 4 ประเภทดังนี้:

  1. DDL (Data Definition Language): ภาษาสำหรับนิยามข้อมูล – ใช้สร้าง, แก้ไข, และลบโครงสร้างของฐานข้อมูล
  2. DML (Data Manipulation Language): ภาษาสำหรับจัดการข้อมูล – ใช้เพิ่ม, แก้ไข, ลบ, และเรียกดูข้อมูลภายในตาราง
  3. DCL (Data Control Language): ภาษาสำหรับควบคุมข้อมูล – ใช้กำหนดสิทธิ์การเข้าถึงข้อมูล
  4. 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;