Basic operation of relational database
หลักๆ แล้วเราจะใช้คำสั่งในภาษา SQL ในการจัดการฐานข้อมูล แต่ในปัจจุบันมีโปรแกรม Client ในการช่วย query ทำให้ผู้ใช้งานไม่ต้องเขียนคำสั่งทั้งหมดเอง แต่ในบทความนี้ทางผู้เขียนจะแนะนำเป็น raw command เพื่อให้ทางผู้อ่านนำคำสั่งไปต่อยอด และเข้าใจการทำงานเบื้องหลังของ SQL Client ได้ง่ายขึ้น
Database
Database (ฐานข้อมูล) คือ ที่เก็บข้อมูลที่มีโครงสร้างซึ่งใช้สำหรับจัดเก็บและจัดการข้อมูลในรูปแบบที่สามารถเข้าถึงได้ง่าย โดยฐานข้อมูลสามารถมีหลายตารางที่เก็บข้อมูลที่เกี่ยวข้องกัน
Table
Table (ตาราง) คือ โครงสร้างภายในฐานข้อมูลที่ใช้สำหรับเก็บข้อมูลจริงๆ โดยแต่ละตารางประกอบด้วยแถว (Row) และคอลัมน์ (Column) ซึ่งแต่ละคอลัมน์จะเก็บข้อมูลประเภทหนึ่ง เช่น ชื่อ, อีเมล, หรืออายุ

Comment
พื้นฐานของการเขียน SQL คือการ comment code นั่นเอง ทาง SQL จะใช้เครื่องหมาย -
ในการ comment ตัวอย่างเช่น
-- sql create table
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100) NOT NULL,
email VARCHAR(255) UNIQUE NOT NULL,
age INT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
การสร้าง Database
เมื่อต้องการสร้างฐานข้อมูลใหม่ ใช้คำสั่ง CREATE DATABASE
ดังนี้
CREATE DATABASE my_database;
หากต้องการกำหนด Character Set และ Collation (เช่น UTF-8) ทำได้โดยเพิ่มคำสั่งดังนี้
CREATE DATABASE my_database CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
การดู Database
หากต้องการดูรายการฐานข้อมูลที่มีอยู่ในระบบ ใช้คำสั่ง
SHOW DATABASES;
การเลือกใช้งาน Database
หากต้องการเลือกฐานข้อมูลเพื่อทำงาน ใช้คำสั่ง:
USE my_database;
การลบ Database
เมื่อต้องการลบฐานข้อมูล (ข้อมูลทั้งหมดในฐานข้อมูลจะหายไป) ใช้คำสั่ง:
DROP DATABASE my_database;
Table
Data type
ก่อนใช้งาน Table เก็บข้อมูล เราจำเป็นต้องทราบเกี่ยวกับชนิดของข้อมูลก่อน เนื่องจาก Database Relational นั้น ต้องกำหนด Type ของข้อมูลก่อนที่จะนำข้อมูลเข้าตารางทุกครั้ง ตัวอย่าง type ที่ใช้บ่อย
- INT - เก็บค่าตัวเลขจำนวนเต็ม
- FLOAT(p) - เก็บค่าตัวเลขทศนิยม
- DOUBLE(m, d) - เก็บค่าตัวเลขทศนิยมที่มีความแม่นยำสูง
- VARCHAR(n) - เก็บข้อความที่มีความยาวไม่เกิน
n
ตัวอักษร - TEXT - เก็บข้อความขนาดใหญ่
- DATE - เก็บค่าวันที่
- DATETIME - เก็บค่าวันที่และเวลา
- TIMESTAMP - เก็บวันที่และเวลาปัจจุบัน
- ENUM(a, b, c) - เก็บได้เฉพาะค่าที่กำหนด
นอกจากนั้น ยังมี type ที่ใช้ได้เฉพาะบาง database เท่านั้น อันนี้เราก็ต้องศึกษาวิธีการใช้งานจาก document ของ db นั้นอีกที เช่น
- JSON - ใช้เก็บข้อมูลประเภท JSON โดยเฉพาะ (ใช้ได้เฉพาะ MySQL 8.0+, PostgreSQL)
- ARRAY - ใช้เก็บ list ข้อมูลโดยเฉพาะ (เฉพาะ PostgreSQL)
Reference type ทั้งหมด

Constraint
เป็นข้อกำหนดที่ใช้บังคับให้ข้อมูลในตารางมีความถูกต้องและสอดคล้องกับกฎที่กำหนดไว้ เช่น:
- PRIMARY KEY - กำหนดให้คอลัมน์เป็นคีย์หลัก ไม่สามารถมีค่าซ้ำหรือเป็นค่าว่างได้
- FOREIGN KEY - กำหนดความสัมพันธ์ระหว่างสองตาราง (อธิบายเพิ่มเติมใน part relation)
- NOT NULL - บังคับให้คอลัมน์ต้องมีค่าเสมอ
- UNIQUE - กำหนดให้ค่าของคอลัมน์ต้องไม่ซ้ำกัน
- DEFAULT - กำหนดค่าพื้นฐานหากไม่มีการป้อนค่า
- AUTO INCREMENT - กำหนดให้ running number + 1 ไปเรื่อยๆ ทุกครั้งที่เพิ่มข้อมูลใหม่
- CHECK - กำหนดเงื่อนไขเพื่อควบคุมค่าที่สามารถป้อนในคอลัมน์ เช่น
CHECK(age >= 18)
การสร้าง Table
Syntax
CREATE TABLE table_name (
column1 datatype constraint,
column2 datatype constraint,
column3 datatype constraint,
....
);
หลังจากเลือกฐานข้อมูลแล้ว สามารถสร้างตารางโดยใช้คำสั่ง CREATE TABLE
ตัวอย่างการสร้างตาราง users
:
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100) NOT NULL,
email VARCHAR(255) UNIQUE NOT NULL,
age INT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
การดู Table ทั้งหมดใน Database
เมื่อต้องการดูตารางที่มีอยู่ในฐานข้อมูลปัจจุบัน ใช้คำสั่ง:
SHOW TABLES;
การแก้ไขตาราง (Alter Table)
- เพิ่มคอลัมน์
ALTER TABLE users ADD COLUMN phone VARCHAR(15);
- เปลี่ยนประเภทของคอลัมน์
ALTER TABLE users MODIFY COLUMN age SMALLINT;
- เปลี่ยนชื่อคอลัมน์
ALTER TABLE users CHANGE COLUMN phone mobile VARCHAR(20);
- ลบคอลัมน์
ALTER TABLE users DROP COLUMN mobile;
- เปลี่ยนชื่อตาราง
ALTER TABLE users RENAME TO customers;
การลบ Table
หากต้องการลบตารางทั้งหมดในฐานข้อมูล ใช้คำสั่ง:
DROP TABLE users;
Reserve words
คือคำสงวนที่ไม่สามารถใช้ได้ ส่วนใหญ่จะเป็นคำท่ีตรงกับคำสั่งพื้นฐาน หรือ ฟังก์ชันช่วยของทาง SQL ที่ใช้ ควรตรวจสอบก่อนใช้งานทุกครั้ง
SELECT
- ใช้สำหรับดึงข้อมูลจากตารางINSERT
- ใช้สำหรับเพิ่มข้อมูลลงในตารางUPDATE
- ใช้สำหรับแก้ไขข้อมูลDELETE
- ใช้สำหรับลบข้อมูลWHERE
- ใช้กำหนดเงื่อนไขORDER BY
- ใช้สำหรับเรียงลำดับข้อมูลGROUP BY
- ใช้สำหรับจัดกลุ่มข้อมูลJOIN
- ใช้สำหรับรวมข้อมูลจากหลายตารางCREATE
- ใช้สำหรับสร้างฐานข้อมูลหรือโครงสร้างข้อมูลDROP
- ใช้สำหรับลบฐานข้อมูลหรือโครงสร้างข้อมูล
ทั้งหมด: https://dev.mysql.com/doc/refman/8.4/en/keywords.html
Exercise
- สร้าง database ชื่อ
my_company
เก็บข้อมูลรองรับ utf8, unicode รองรับภาษาไทย - สร้างตารางเก็บข้อมูลสินค้าโดยมีประเภทข้อมูลดังนี้
- id: เก็บรหัสสินค้า เป็น running number
- title: ชื่อสินค้า เก็บตัวอักษร ไม่เกิน 50 ตัว
- description: รายละเอียดสินค้า ใส่ได้ไม่จำกัดตัวอักษร
- price: ราคาสินค้า เก็บข้อมูลทศนิยม 2 ตำแหน่ง
- created_at: เก็บข้อมูลเวลาที่สร้างสินค้า โดย default ข้อมูลเป็น
current_timestamp
Reference
