การสร้างตารางด้วย JSON Column
mysql> CREATE TABLE DemoTable1876 (
EmployeeInformation JSON
);
Insert ข้อมูล JSON Object
mysql> INSERT INTO DemoTable1876 VALUES('{
"EmployeeData": {
"Name": "Chris",
"Age": 27
}
}');
mysql> INSERT INTO DemoTable1876 VALUES('{
"EmployeeData": {
"Name": "David",
"Age": 24
}
}');
แสดงข้อมูล (MySQL จัดรูปแบบ JSON ให้อัตโนมัติ)
mysql> SELECT * FROM DemoTable1876;
ผลลัพธ์:
+------------------------------------------------+
| EmployeeInformation |
+------------------------------------------------+
| {"EmployeeData": {"Age": 27, "Name": "Chris"}} |
| {"EmployeeData": {"Age": 24, "Name": "David"}} |
+------------------------------------------------+
ข้อดีของ JSON Data Type (MySQL 5.7+)
- Validation: Reject Invalid JSON อัตโนมัติ
- Storage: Binary Format (Parsed) เร็วกว่า TEXT
- Functions: JSON_EXTRACT, JSON_CONTAINS, JSON_SET, JSON_ARRAY_APPEND ฯลฯ
- Indexing: Virtual Column + Index สำหรับ Path เฉพาะ
ฟังก์ชัน JSON ที่น่าสนใจ
-- ดึงค่า (-> คืน JSON, ->> คืน Text)
SELECT EmployeeInformation->'$.EmployeeData.Name' AS name FROM DemoTable1876;
SELECT EmployeeInformation->>'$.EmployeeData.Name' AS name FROM DemoTable1876;
-- ค้นหา
SELECT * FROM DemoTable1876
WHERE JSON_CONTAINS(EmployeeInformation, '"Chris"', '$.EmployeeData.Name');
-- อัปเดต
UPDATE DemoTable1876
SET EmployeeInformation = JSON_SET(EmployeeInformation, '$.EmployeeData.Age', 28)
WHERE JSON_EXTRACT(EmployeeInformation, '$.EmployeeData.Name') = '"Chris"';
สร้าง Index บน JSON Path
ALTER TABLE DemoTable1876
ADD COLUMN name_virtual VARCHAR(50)
GENERATED ALWAYS AS (EmployeeInformation->>'$.EmployeeData.Name') VIRTUAL,
ADD INDEX idx_name (name_virtual);