في هذا الدرس 6تصفّح المواضيع
بدلاً من حفظ بيانات JSON كنص عادي غير مفحوص داخل حقل LONGTEXT، توفّر MySQL 8 نوع البيانات الأصلي JSON. تخضع كل قيمة من نوع JSON لتحقق نحوي فوري وفق معيار RFC 8259، ثم تُحوَّل إلى بنية شجرية ثنائية مهيأة تسمح بقراءة المفاتيح وعناصر المصفوفات مباشرة عبر مؤشرات الإزاحة دون الحاجة إلى إعادة تحليل النص كاملاً.
-- Validate JSON syntax and inspect the detected value type
SELECT
JSON_VALID('{"engine": "InnoDB", "ver": 8}') AS is_valid,
JSON_TYPE('{"engine": "InnoDB", "ver": 8}') AS root_type,
JSON_TYPE('[10, 20, 30]') AS array_type;
يُعدّ بناء نصوص JSON يدوياً بدمج علامات الاقتباس عرضة للأخطاء النحوية ومشكلات المحارف الخاصة. لذلك توفّر MySQL 8 دوال بناء أصلية آمنة: تبني الدالة JSON_OBJECT(key1, val1, ...) كائن JSON من أزواج المفاتيح والقيم المتتالية، وتبني الدالة JSON_ARRAY(val1, val2, ...) مصفوفة JSON مرتبة مع الحفاظ على الأنواع الرقمية والمنطقية المتداخلة.
-- Construct structured JSON objects and arrays safely in SQL
SELECT
JSON_OBJECT('id', 108, 'active', TRUE) AS user_obj,
JSON_ARRAY('mysql', 'innodb', 8) AS skill_tags,
JSON_MERGE_PRESERVE('["sql"]', '["json"]') AS merged_tags;
للاستعلام عن العناصر المتداخلة داخل مستند JSON، تستخدم MySQL تعبيرات المسار التي تبدأ برمز الجذر $، متبوعاً بالنقطة للوصول إلى مفاتيح الكائنات (مثل $.profile.city) أو الأقواس المربعة للمصفوفات التي يبدأ ترقيمها من الصفر (مثل $.tags[0]). تستخرج دالة JSON_EXTRACT(doc, path) القيمة المطابقة، بينما تزيل دالة JSON_UNQUOTE(val) علامات الاقتباس المحيطة بالنص.
-- Extract nested keys and array elements via $ path syntax
SELECT
JSON_EXTRACT('{"u":{"name":"Sara"}}', '$.u.name') AS raw_val,
JSON_UNQUOTE(
JSON_EXTRACT('{"u":{"name":"Sara"}}', '$.u.name')
) AS clean_name,
JSON_EXTRACT('["alpha","beta","gamma"]', '$[1]') AS second_item;
لجعل استعلامات SQL أكثر إيجازاً ووضوحاً عند التعامل مع أعمدة الجداول، توفّر MySQL معاملَي الأسهم المباشرين: يعمل السهم المفرد column->'$.path' كاختصار مطابق لدالة JSON_EXTRACT(column, '$.path')، بينما يعمل السهم المزدوج column->>'$.path' كاختصار يدمج الاستخراج مع إزالة علامات الاقتباس عبر JSON_UNQUOTE(JSON_EXTRACT(column, '$.path')).
-- Inspect JSON keys and membership via JSON_KEYS & JSON_CONTAINS
SELECT
JSON_KEYS('{"host":"localhost","port":3306}') AS top_keys,
JSON_LENGTH('["read","write","admin"]') AS array_len,
JSON_CONTAINS('["read","write"]', '"write"') AS has_write;
توفّر MySQL 8 دوال تعديل جزئي دقيقة تغنيك عن استبدال المستند كاملاً من كود التطبيق: تحدّث الدالة JSON_SET(doc, path, val) المسارات الموجودة وتضيف المسارات الجديدة، وتضيف JSON_INSERT(doc, path, val) المفاتيح غير الموجودة فقط، وتعدّل JSON_REPLACE(doc, path, val) المفاتيح الموجودة فحسب، بينما تحذف JSON_REMOVE(doc, path) المفتاح المحدد.
-- Compare JSON_SET upsert vs JSON_REMOVE key deletion
SELECT
JSON_SET('{"env":"dev","dbg":1}', '$.env', 'prod') AS set_doc,
JSON_INSERT('{"env":"dev"}', '$.region', 'mena') AS ins_doc,
JSON_REMOVE('{"env":"dev","temp":1}', '$.temp') AS clean_doc;
| الدالة / المعامل | التصنيف الوظيفي | صيغة القيمة المُرجعة | السلوك مع المسارات الموجودة أو المفقودة |
|---|---|---|---|
JSON_OBJECT(k, v, ...) | بناء المستندات | كائن JSON ثنائي موثق | ينشئ كائناً مفهرساً ويعتمد آخر قيمة عند تكرار المفتاح |
JSON_ARRAY(v1, v2, ...) | بناء المستندات | مصفوفة JSON ثنائية | ينشئ مصفوفة مرتبة يبدأ ترقيم عناصرها من الصفر |
JSON_EXTRACT(doc, path) / -> | استخراج القيم | قيمة JSON مع علامات اقتباس | يُرجع القيمة المطابقة للمسار أو NULL عند عدم وجوده |
JSON_UNQUOTE(...) / ->> | استخراج القيم | سلسلة نصية نظيفة بدون اقتباس | يزيل علامات الاقتباس المحيطة بالنص المستخرج |
JSON_SET(doc, path, val) | تعديل جزئي | مستند JSON محدّث | يحدّث المفتاح الموجود ويضيف المفتاح الجديد (Upsert) |
JSON_INSERT(doc, path, val) | تعديل جزئي | مستند JSON محدّث | يضيف المفتاح فقط إذا لم يكن موجوداً مسبقاً |
JSON_REPLACE(doc, path, val) | تعديل جزئي | مستند JSON محدّث | يعدّل قيمة المفتاح فقط إذا كان موجوداً مسبقاً |
JSON_REMOVE(doc, path) | تعديل جزئي | مستند JSON محدّث | يحذف المفتاح أو عنصر المصفوفة المحدد بالمسار |
ملخص الدرس: أتقنّا في هذا الدرس نوع بيانات JSON الأصلي في MySQL 8، بما في ذلك التخزين الثنائي المهيكل، ودوال البناء JSON_OBJECT وJSON_ARRAY، واستخراج المسارات بالرمز $ ومعاملَي الأسهم، والتحديث الجزئي عبر JSON_SET.
الخطوة التالية والدرس القادم: بعد إتمام الوحدة الثالثة الخاصة بأنواع البيانات، سننتقل في الدرس القادم إلى الوحدة الرابعة (جداول MySQL) بدءاً بدرس إنشاء الجداول واستعراض بنيتها الهندسية.
ملخص الدرس
حصاد الدرسمراجعة مركّزة لأهم المفاهيم والقواعد الهندسية التي أتقنتها في هذا الدرس قبل التطبيق العملي
ماذا تعلّمت في هذا الدرس؟
أتقنّا في هذا الدرس نوع بيانات JSON الأصلي في MySQL 8، بما في ذلك التخزين الثنائي المهيكل، ودوال البناء JSON_OBJECT وJSON_ARRAY، واستخراج المسارات بالرمز $ ومعاملَي الأسهم، والتحديث الجزئي عبر JSON_SET. الخطوة التالية: بعد إتمام الوحدة الثالثة الخاصة بأنواع البيانات، سننتقل في الدرس القادم إلى الوحدة الرابعة (جداول MySQL) بدءاً بدرس إنشاء الجداول واستعراض بنيتها الهندسية.
سجّل الدخول لحفظ تقدمك
تابع إنجاز المواضيع والمصطلحات والمهام، وكمّل من آخر خطوة على أي جهاز.
المصطلحات4
راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.
- 01 JSON Type نوع JSON
- تعلّم نوع بيانات JSON الأصلي ومعاملات المسار في MySQL بأسلوب MySQL 8 الحديث مع أمثلة استعلامات SQL وتطبيقات تفاعلية.
- للمراجعة
- 02 Native Binary JSON Storage التخزين الثنائي الأصلي لبيانات JSON
- المفهوم الهندسي الأساسي لقسم التخزين الثنائي الأصلي لبيانات JSON في قواعد بيانات MySQL 8 الحديثة.
- للمراجعة
- 03 Building Objects and Arrays بناء الكائنات والمصفوفات برمجياً
- الصياغة القياسية وقواعد التنفيذ العملي لقسم بناء الكائنات والمصفوفات برمجياً.
- للمراجعة
- 04 Extracting Values by Path استخراج القيم عبر مسارات JSON
- آلية التخزين وأفضل ممارسات محرك InnoDB الخاصة بقسم استخراج القيم عبر مسارات JSON.
- للمراجعة
لا توجد بطاقات تطابق البحث والتصفية.
اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.
الاختصارات2
راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.
- 01 JSON JSON
- JavaScript Object Notation (RFC 8259)
- صيغة قياسية خفيفة لتبادل البيانات المهيكلة على هيئة كائنات ومصفوفات تدعمها MySQL 8 كنوع ثنائي أصلي.
- للمراجعة
- 02 DOM DOM
- Binary Document Object Model
- البنية الشجرية الثنائية التي تستخدمها MySQL لفهرسة مفاتيح وعناصر JSON عبر إزاحات البايت للوصول السريع.
- للمراجعة
لا توجد بطاقات تطابق البحث والتصفية.
اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.
مهامك قبل الاختبار
خطوة صغيرة كل مرة. وإنجاز تقدر ترجع له.
-
افتح عميل MySQL 8 المحلي ونفّذ استعلام SQL المشروح في قسم التخزين الثنائي الأصلي لبيانات JSON للتحقق من النتائج.
-
بدّل بين الحالات الثلاث في المحاكي التفاعلي ضمن قسم بناء الكائنات والمصفوفات برمجياً وقارن مخرجات MySQL 8.
تأشير المهمة إقرار منك بإتمامها، وليس تصحيحًا آليًا للكود. يُحفظ تقدمك في حسابك.
اختبر فهمك.
ووصلها للإتقان.
كل سؤال خطوة لقدّام. اختار، اكتب كود، وشوف نتيجتك فورًا.
أكمل المهام، واجمع كل الإجابات الصحيحة. أقل من 100%؟ راجع وأعد المحاولة.
الأسئلة متاحة للاطلاع. سجّل الدخول للتفاعل وحفظ تقدمك.
لمحة عن التحدي4 أسئلة تنتظرك +
كيف تخزّن MySQL 8 القيم داخلياً في حقل من نوع JSON الأصلي؟
ميّز بين التخزين الأصلي لنوع JSON والتخزين النصي العادي.
ما هو الرمز الذي يمثّل دائماً جذر مستند JSON في تعبيرات المسار داخل MySQL؟
حدّد الرمز الابتدائي في مسارات الاستخراج مثل $.user.name.
ما هو الفرق بين المعامل -> والمعامل ->> في استعلامات JSON داخل MySQL؟
تذكّر أي المعاملين يدمج الاستخراج مع إزالة علامات الاقتباس.
أي دالة من دوال JSON تحدّث قيمة المفتاح إذا كان موجوداً وتضيفه إذا لم يكن موجوداً؟
اختر الدالة التي تجمع بين التعديل والإضافة (Upsert).