- 1 สิ่งที่หมายถึง “Schema” ใน MySQL? (คำศัพท์และแนวคิดพื้นฐาน)
- 2 [Basics] วิธีตรวจสอบ Schema ของ MySQL (รายการ, การสลับ, ตาราง)
- 3 [Advanced] การดึงข้อมูลรายละเอียดโดยใช้ INFORMATION_SCHEMA
- 4 [Expert] การใช้เมตาดาต้า InnoDB และสกีม่า sys (MySQL 8.0+)
- 5 [Quick Reference by Use Case] คำสั่งแนะนำ
- 6 [Troubleshooting and Error Handling]
- 7 คำถามที่พบบ่อย (FAQ)
- 7.1 Q1. สกีม่า MySQL แตกต่างจากสกีม่าใน Oracle หรือ PostgreSQL อย่างไร?
- 7.2 Q2. วิธีที่มีประสิทธิภาพที่สุดในการดึงข้อมูลคอลัมน์อย่างละเอียดคืออะไร?
- 7.3 Q3. ฉันจะตรวจสอบ character set หรือ collation ได้อย่างไร?
- 7.4 Q4. ฉันไม่มีสิทธิ์ดูข้อมูล ควรทำอย่างไร?
- 7.5 Q5. ฉันจะตรวจสอบข้อมูลสกีม่าในเครื่องมือ GUI อย่างไร?
- 8 สรุปและลิงก์ที่เกี่ยวข้อง
สิ่งที่หมายถึง “Schema” ใน MySQL? (คำศัพท์และแนวคิดพื้นฐาน)
หลายคนที่เพิ่งเริ่มใช้ MySQL หรือผู้ที่ย้ายมาจากระบบฐานข้อมูลอื่น ๆ มักจะสับสนกับคำว่า “schema” แม้ว่าคำว่า “schema” จะถูกใช้ในฐานข้อมูลหลายประเภท ความหมายของมันอาจแตกต่างกันไปตามระบบ การเข้าใจเรื่องนี้อย่างชัดเจนตั้งแต่ต้นเป็นสิ่งสำคัญ
โดยเดิมแล้ว “schema” หมายถึง “โครงสร้าง” หรือ “แบบแปลน” ในบริบทของระบบจัดการฐานข้อมูลเชิงสัมพันธ์ (RDBMS) มักหมายถึง การกำหนดโครงสร้างทั้งหมดภายในฐานข้อมูล รวมถึงการกำหนดตาราง, ข้อมูลคอลัมน์, ดัชนี, วิว, สตอร์ดโปรซีเยอร์ และอื่น ๆ
อย่างไรก็ตามใน MySQL คำว่า “schema” และ “database” ถูกถือว่าเกือบเหมือนกัน เอกสารอย่างเป็นทางการของ MySQL ระบุอย่างชัดเจนว่า “schema = database” และใช้คำทั้งสองสลับกัน ตัวอย่างเช่น เมื่อสร้าง schema คุณจะใช้คำสั่ง CREATE DATABASE
ในระบบ RDBMS อื่น ๆ เช่น Oracle และ PostgreSQL คำว่า “schema” และ “database” มีความแตกต่างชัดเจนดังนี้
- Oracle : Schema คือชุดของอ็อบเจกต์ที่จัดการตามผู้ใช้ ส่วน database คือคอนเทนเนอร์ทางกายภาพ และมีหลาย schema อยู่ภายใน
- PostgreSQL : ฐานข้อมูลเดียวสามารถมีหลาย schema (namespace) เพื่อจัดประเภทและจัดการตารางและวิว
ในทางตรงกันข้าม MySQL ถือว่า “database” = “schema” ไม่ว่าคุณจะใช้คำใดในคำอธิบาย การดำเนินการและวิธีการจัดการก็เหมือนกัน ดังนั้น “การตรวจสอบ schema” ใน MySQL จึงหมายถึง “การตรวจสอบ database”
ในเอกสารภาษาอังกฤษ ทั้ง “schema” และ “database” ปรากฏอยู่บ่อยครั้ง และคู่มือ MySQL บางครั้งก็ใช้สลับกัน ในการปฏิบัติเมื่อคุณเห็น “schema” ในเอกสาร MySQL คุณสามารถตีความว่าเป็น “database” ได้
โดยการเข้าใจ การใช้คำศัพท์เฉพาะของ MySQL อย่างถูกต้อง คุณจะหลีกเลี่ยงความสับสนเมื่อต้องจัดการระบบหรืออ้างอิงเอกสารทางเทคนิค ตั้งแต่ส่วนต่อไปนี้ เราจะอธิบายอย่างชัดเจนว่าการตรวจสอบ schema (database) ใน MySQL ทำอย่างไรทีละขั้นตอน
[Basics] วิธีตรวจสอบ Schema ของ MySQL (รายการ, การสลับ, ตาราง)
เพื่อทำความเข้าใจเนื้อหาของ “schema (database)” ใน MySQL จำเป็นต้องรู้คำสั่งและขั้นตอนพื้นฐาน ในส่วนนี้เราจะอธิบายการทำงานทั่วไปอย่างละเอียด ตั้งแต่การแสดงรายการ schema จนถึงการตรวจสอบตารางและข้อมูลคอลัมน์ แม้ผู้เริ่มต้นก็สามารถทำตามได้
การแสดงรายการ Schemas (Databases)
ใน MySQL คุณสามารถสร้างหลาย database (schema) บนเซิร์ฟเวอร์ได้
เพื่อดูรายการของมัน ให้ใช้คำสั่งต่อไปนี้:
SHOW DATABASES;
เมื่อรันคำสั่งนี้ ระบบจะแสดงชื่อของทุก schema (database) บนเซิร์ฟเวอร์ ในบางสภาพแวดล้อมคุณอาจใช้ SHOW SCHEMATA; ซึ่งให้ผลลัพธ์เดียวกับ SHOW DATABASES; หากคุณกังวลเรื่องความแตกต่างของเวอร์ชัน ให้ดูคู่มืออย่างเป็นทางการ
การสลับ Schema ที่ใช้งานอยู่
เพื่อทำงานกับ schema (database) เฉพาะคุณต้องเลือกมันก่อน
เพื่อสลับ schema ให้ใช้:
USE database_name;
ตัวอย่างเช่น หากต้องการใช้ schema ชื่อ sample_db ให้พิมพ์:
USE sample_db;
การดำเนินการทั้งหมดต่อจากนี้จะทำกับ schema (database) ที่เลือกไว้
การตรวจสอบโครงสร้างตารางและคอลัมน์
แต่ละ schema มีหลายตาราง
เพื่อแสดงรายการตาราง ให้ใช้:
SHOW TABLES;
คำสั่งนี้จะแสดงชื่อของทุกตารางใน schema ที่เลือกอยู่ในขณะนั้น
เพื่อดูโครงสร้างของตารางเฉพาะ (ชื่อคอลัมน์, ชนิดข้อมูล, การตั้งค่า NULL ฯลฯ) ให้ใช้คำสั่งใดคำสั่งหนึ่งต่อไปนี้:
DESCRIBE table_name;
หรือ
SHOW COLUMNS FROM table_name;
ทั้งสองคำสั่งให้ผลลัพธ์ที่เกือบเหมือนกัน ตัวอย่างเช่น เพื่อตรวจสอบโครงสร้างคอลัมน์ของตาราง users ให้พิมพ์:
DESCRIBE users;
การตรวจสอบการตั้งค่าโดยละเอียดของ Schema
หากต้องการตรวจสอบการตั้งค่าเฉพาะของ schema เช่น character set และ collation ให้ใช้:
SHOW CREATE DATABASE database_name;
This command outputs the SQL statement used to create the schema (database). It is particularly useful for verifying character encoding and collation settings to prevent configuration-related issues.
ประเด็นสำคัญ
- งานตรวจสอบพื้นฐานทั้งหมดสามารถทำได้โดยใช้คำสั่ง MySQL มาตรฐาน
- ผลลัพธ์จะแสดงโดยตรงในเทอร์มินัล (บรรทัดคำสั่ง) ทำให้คุณสามารถดำเนินการได้อย่างมีประสิทธิภาพ
- งานส่วนใหญ่ยังสามารถทำได้โดยใช้เครื่องมือ GUI เช่น MySQL Workbench หรือ phpMyAdmin แต่คำสั่ง CLI มักจะเชื่อถือได้มากกว่าเมื่อแก้ไขปัญหา
คำสั่งที่แนะนำในส่วนนี้เป็นความรู้พื้นฐานสำหรับผู้ที่ทำงานกับ MySQL อย่างสม่ำเสมอ.
[Advanced] การดึงข้อมูลรายละเอียดโดยใช้ INFORMATION_SCHEMA
ในขณะที่คำสั่ง MySQL พื้นฐานช่วยให้คุณตรวจสอบโครงสร้างสกีม่าและตารางได้ แต่ข้อมูลที่ละเอียดมากขึ้นหรือการสกัดข้อมูลเป็นกลุ่มใหญ่จะทำได้ดีที่สุดโดยใช้ INFORMATION_SCHEMA. INFORMATION_SCHEMA เป็นฐานข้อมูลระบบที่ให้คุณอ้างอิงเมตาดาต้าที่จัดการภายในโดยเซิร์ฟเวอร์ MySQL ในรูปแบบตาราง SQL มาตรฐาน
เนื่องจากมันทำให้สามารถดึงข้อมูลที่จำเป็นด้วย SQL อย่างยืดหยุ่น จึงมีประโยชน์อย่างมากสำหรับการอัตโนมัติและการรายงาน
INFORMATION_SCHEMA คืออะไร?
INFORMATION_SCHEMA เป็นหนึ่งในฐานข้อมูลระบบที่รวมมาโดยค่าเริ่มต้นใน MySQL
มันมีตารางเช่น “SCHEMATA,” “TABLES,” และ “COLUMNS,” ซึ่งเก็บเมตาดาต้าเกี่ยวกับฐานข้อมูล (สกีม่า), ตาราง, และคอลัมน์
คุณสามารถสอบถามตารางเหล่านี้โดยใช้คำสั่ง SELECT มาตรฐานเพื่อสกัดข้อมูลการกำหนดค่าและรายละเอียดโครงสร้างภายใน
กรณีการใช้งานหลัก:
- ดึงข้อมูลสกีม่าและตารางอย่างละเอียด
- ตรวจสอบประเภทข้อมูล, ข้อจำกัด, และค่าเริ่มต้น
- ทำการสกัดข้อมูลอย่างยืดหยุ่นด้วยตัวกรองและการรวมข้อมูล
การดึงข้อมูลสกีม่า
เพื่อดึงรายการและคุณลักษณะของสกีม่า (ฐานข้อมูล) ทั้งหมด:
SELECT * FROM INFORMATION_SCHEMA.SCHEMATA;
คิวรีนี้จะคืนชื่อสกีม่า (SCHEMA_NAME), ชุดอักขระเริ่มต้น (DEFAULT_CHARACTER_SET_NAME), การจัดเรียงเริ่มต้น (DEFAULT_COLLATION_NAME) และรายละเอียดการกำหนดค่าอื่น ๆ
การดึงข้อมูลตารางและคอลัมน์
เพื่อดึงข้อมูลตารางหรือคอลัมน์อย่างละเอียดเป็นกลุ่มใหญ่ ให้ใช้ตาราง “TABLES” และ “COLUMNS”.
ตัวอย่าง: ดึงข้อมูลตารางทั้งหมดภายในสกีม่า
SELECT * FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = 'target_schema_name';
ตัวอย่าง: ดึงข้อมูลคอลัมน์อย่างละเอียด
SELECT * FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = 'target_schema_name'
AND TABLE_NAME = 'target_table_name';
นี่จะให้ชื่อคอลัมน์ (COLUMN_NAME), ประเภทข้อมูล (DATA_TYPE), การตั้งค่า NULL (IS_NULLABLE), ค่าเริ่มต้น (COLUMN_DEFAULT) และความยาวสูงสุด (CHARACTER_MAXIMUM_LENGTH).
ตัวอย่างการกรองเชิงปฏิบัติ
INFORMATION_SCHEMA อนุญาตให้กรองอย่างยืดหยุ่นโดยใช้เงื่อนไข WHERE.
ตัวอย่าง 1: สกัดคอลัมน์ประเภท INT ทั้งหมดภายในสกีม่า
SELECT TABLE_NAME, COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = 'target_schema_name'
AND DATA_TYPE = 'int';
ตัวอย่าง 2: ค้นหาตารางที่ใช้การจัดเรียงเฉพาะ
SELECT TABLE_NAME
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = 'target_schema_name'
AND TABLE_COLLATION LIKE 'utf8mb4%';
การใช้ INFORMATION_SCHEMA ทำให้สามารถสกัดและวิเคราะห์โครงสร้างภายในของ MySQL ด้วย SQL อย่างยืดหยุ่น
[Expert] การใช้เมตาดาต้า InnoDB และสกีม่า sys (MySQL 8.0+)
เมื่อคุณคุ้นเคยกับการดึงข้อมูลสกีม่าและตารางแล้ว คุณสามารถก้าวไปสู่การจัดการขั้นสูงและการวิเคราะห์ประสิทธิภาพ โดยเฉพาะเมื่อใช้เครื่องมือจัดเก็บข้อมูล InnoDB หรือดำเนินการระบบขนาดใหญ่ ตาราง InnoDB ของ INFORMATION_SCHEMA และสกีม่า sys มีประโยชน์อย่างมาก
เมตาดาต้าเครื่องยนต์ InnoDB
InnoDB เป็นเครื่องมือจัดเก็บข้อมูลเริ่มต้นของ MySQL และรองรับการทำธุรกรรม, การล็อกระดับแถว, และข้อจำกัดคีย์ต่างประเทศ
ตารางที่เกี่ยวข้องกับ InnoDB ที่เป็นประโยชน์ได้แก่:
INNODB_TABLES: ข้อมูลพื้นฐานของตารางที่จัดการโดย InnoDBINNODB_COLUMNS: ข้อมูลคอลัมน์INNODB_INDEXES: รายละเอียดดัชนีINNODB_LOCKS: ข้อมูลการล็อกปัจจุบันINNODB_TRX: ธุรกรรมที่กำลังทำงาน
ตัวอย่าง: ตรวจสอบสถานะการล็อกปัจจุบัน
SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCKS;
การใช้ sys Schema
มีให้โดยค่าเริ่มต้นใน MySQL 5.7 และรุ่นต่อไป (โดยเฉพาะ 8.0+) สกีม่า sys ให้ มุมมองสรุปที่เป็นมิตรต่อผู้ใช้ ของข้อมูล INFORMATION_SCHEMA และ performance schema data.
มุมมองที่ใช้บ่อย:
sys.schema_table_statistics: สถิติการเข้าถึงตารางsys.schema_index_statistics: สถิติการใช้ดัชนีsys.innodb_lock_waits: ข้อมูลการรอการล็อกsys.user_summary: สรุปกิจกรรมของผู้ใช้
ตัวอย่าง: ตรวจสอบการรอการล็อกปัจจุบัน
SELECT * FROM sys.innodb_lock_waits;
ตัวอย่าง: ตรวจสอบสถิติการอ่าน/เขียนของทุกตาราง
SELECT * FROM sys.schema_table_statistics;

สรุป
INFORMATION_SCHEMA และสกีม่า sys เป็น เครื่องมือที่ทรงพลังในการแสดงภาพสถานะภายในของ MySQL ผ่าน SQL.
โดยเฉพาะอย่างยิ่งมีคุณค่าในสภาพแวดล้อมการผลิตที่ใช้ InnoDB หรือมุ่งเน้นการดำเนินการขั้นสูงและการปรับประสิทธิภาพ.
[Quick Reference by Use Case] คำสั่งแนะนำ
เมื่อทำการตรวจสอบสกีม่า หรือโครงสร้างตารางใน MySQL การเลือกคำสั่งที่เหมาะสมกับเป้าหมายของคุณเป็นกุญแจสู่ประสิทธิภาพ ตารางด้านล่างสรุปคำสั่งที่ใช้บ่อยตามวัตถุประสงค์.
| Purpose | Command / SQL Example | Notes |
|---|---|---|
| List all schemas on the server | SHOW DATABASES; | Most basic command |
| List tables in the selected schema | SHOW TABLES; | Displays tables in current schema |
| Retrieve all table info in a schema | SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'schema_name'; | Includes table attributes |
| Quickly check column definitions | DESCRIBE table_name;SHOW COLUMNS FROM table_name; | Shows column names and types |
| Retrieve detailed column info | SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = 'schema_name' AND TABLE_NAME = 'table_name'; | Includes NULL and default values |
| Check schema creation settings | SHOW CREATE DATABASE schema_name; | Includes COLLATE and CHARSET |
| Check table creation details | SHOW CREATE TABLE table_name; | Includes indexes and foreign keys |
| Check InnoDB locks and transactions | SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCKS;SELECT * FROM sys.innodb_lock_waits; | Useful for InnoDB |
| Check table/index access statistics | SELECT * FROM sys.schema_table_statistics;SELECT * FROM sys.schema_index_statistics; | Uses sys schema |
| Check user privileges | SHOW GRANTS FOR 'username'@'hostname'; | Verify user permissions |
[Troubleshooting and Error Handling]
เมื่อพยายามตรวจสอบสกีม่า หรือ ตารางใน MySQL คุณอาจเจอปัญหาเช่น คำสั่งไม่ทำงานหรือข้อมูลไม่แสดง.
ข้อผิดพลาดด้านสิทธิ์ (Access Denied)
ตัวอย่างข้อผิดพลาด:
ERROR 1044 (42000): Access denied for user 'user'@'host' to database 'mysql'
ERROR 1142 (42000): SHOW command denied to user 'user'@'host' for table 'database'
วิธีแก้ไข:
- เข้าสู่ระบบด้วยบัญชีผู้ดูแลระบบ
- ขอสิทธิ์ SHOW หรือ SELECT ที่จำเป็น
GRANT SHOW DATABASES ON *.* TO 'user'@'host'; FLUSH PRIVILEGES;
ตรวจสอบสิทธิ์ปัจจุบัน:
SHOW GRANTS FOR 'user'@'host';
ไม่พบฐานข้อมูลหรือ ตาราง
ตัวอย่าง:
ERROR 1049 (42000): Unknown database 'db_name'
ERROR 1146 (42S02): Table 'db_name.table_name' doesn't exist
ตรวจสอบการพิมพ์ผิด, ความแตกต่างของตัวพิมพ์ใหญ่/เล็ก, และยืนยันการมีอยู่ด้วย:
SHOW DATABASES;
SHOW TABLES;
ความแตกต่างของเวอร์ชัน
บางฟีเจอร์ขึ้นอยู่กับเวอร์ชันของ MySQL.
ตรวจสอบเวอร์ชัน:
SELECT VERSION();
ปัญหาอื่น ๆ
- การเชื่อมต่อล้มเหลวเนื่องจากปัญหาเครือข่าย/เซิร์ฟเวอร์
- การหมดเวลาในการคิวรี — ปรับปรุงคิวรีหรือปรับตั้งค่าการหมดเวลา
คำถามที่พบบ่อย (FAQ)
Q1. สกีม่า MySQL แตกต่างจากสกีม่าใน Oracle หรือ PostgreSQL อย่างไร?
A. ใน MySQL, สกีม่า = ฐานข้อมูล. ใน Oracle และ PostgreSQL, สกีม่าและฐานข้อมูลเป็นแนวคิดที่แยกกัน.
Q2. วิธีที่มีประสิทธิภาพที่สุดในการดึงข้อมูลคอลัมน์อย่างละเอียดคืออะไร?
A.
SELECT * FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = 'database_name';
Q3. ฉันจะตรวจสอบ character set หรือ collation ได้อย่างไร?
A. ใช้:
SHOW CREATE DATABASE database_name;
SHOW CREATE TABLE table_name;
Q4. ฉันไม่มีสิทธิ์ดูข้อมูล ควรทำอย่างไร?
A. ขอสิทธิ์ที่เหมาะสม. ตรวจสอบสิทธิ์ปัจจุบันของคุณ:
SHOW GRANTS FOR 'username'@'hostname';
Q5. ฉันจะตรวจสอบข้อมูลสกีม่าในเครื่องมือ GUI อย่างไร?
A. ใน MySQL Workbench หรือ phpMyAdmin, สกีม่าแสดงในแผงนำทางด้านซ้าย. คุณยังสามารถรันคำสั่ง SQL ในแท็บ SQL ได้.
สรุปและลิงก์ที่เกี่ยวข้อง
สรุป
- ใน MySQL, schema = database.
- การตรวจสอบพื้นฐานสามารถทำได้ด้วย
SHOW DATABASES;,SHOW TABLES;และDESCRIBE table_name;. - INFORMATION_SCHEMA และ sys schema ให้ข้อมูลเชิงลึกและการมองเห็นประสิทธิภาพที่ลึกขึ้น.
- ปัญหาส่วนใหญ่เกิดจากสิทธิ์, ความผิดพลาดในการตั้งชื่อ, หรือความแตกต่างของเวอร์ชัน.
- เก็บคำสั่งอ้างอิงอย่างรวดเร็วไว้เพื่อการดำเนินการที่มีประสิทธิภาพ.
ลิงก์ที่เกี่ยวข้อง
บทสรุป
เราหวังว่าคู่มือนี้จะช่วยให้คุณจัดการ schema และตารางของ MySQL ได้ดีขึ้นในงานประจำวัน. โปรดอัปเดตความรู้ของคุณต่อไปเมื่อเวอร์ชันใหม่ของ MySQL และความต้องการการดำเนินงานเปลี่ยนแปลง.


