انتقل إلى محتوى الدرس
الدرس 11
دورة MySQL

نوع بيانات JSON الأصلي ومعاملات المسار في MySQLMySQL JSON Data Type

تعلّم نوع بيانات JSON الأصلي ومعاملات المسار في MySQL بأسلوب MySQL 8 الحديث مع أمثلة استعلامات SQL وتطبيقات تفاعلية.
أقسام الدرس
6
الأمثلة
5
اللغة
العربية
تاريخ النشر
غير محدد
المشاهدات
8
محتوى الدرس
في هذا الدرس 6تصفّح المواضيع

بدلاً من حفظ بيانات JSON كنص عادي غير مفحوص داخل حقل LONGTEXT، توفّر MySQL 8 نوع البيانات الأصلي JSON. تخضع كل قيمة من نوع JSON لتحقق نحوي فوري وفق معيار RFC 8259، ثم تُحوَّل إلى بنية شجرية ثنائية مهيأة تسمح بقراءة المفاتيح وعناصر المصفوفات مباشرة عبر مؤشرات الإزاحة دون الحاجة إلى إعادة تحليل النص كاملاً.

مخطط نوع بيانات JSON الأصلي ومعاملات المسار في MySQL 8
SQL
-- 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 مرتبة مع الحفاظ على الأنواع الرقمية والمنطقية المتداخلة.

SQL
-- 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) علامات الاقتباس المحيطة بالنص.

SQL
-- 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')).

SQL
-- 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) المفتاح المحدد.

SQL
-- 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

راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.

0 / 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

راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.

0 / 2 مفهومةأول بطاقة، أول خطوة
01 JSON JSON
JavaScript Object Notation (RFC 8259)
صيغة قياسية خفيفة لتبادل البيانات المهيكلة على هيئة كائنات ومصفوفات تدعمها MySQL 8 كنوع ثنائي أصلي.
للمراجعة
02 DOM DOM
Binary Document Object Model
البنية الشجرية الثنائية التي تستخدمها MySQL لفهرسة مفاتيح وعناصر JSON عبر إزاحات البايت للوصول السريع.
للمراجعة

اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.

من الفهم للتطبيق

مهامك قبل الاختبار

خطوة صغيرة كل مرة. وإنجاز تقدر ترجع له.

0/2مهام منجزة
  1. افتح عميل MySQL 8 المحلي ونفّذ استعلام SQL المشروح في قسم التخزين الثنائي الأصلي لبيانات JSON للتحقق من النتائج.

  2. بدّل بين الحالات الثلاث في المحاكي التفاعلي ضمن قسم بناء الكائنات والمصفوفات برمجياً وقارن مخرجات MySQL 8.

تأشير المهمة إقرار منك بإتمامها، وليس تصحيحًا آليًا للكود. يُحفظ تقدمك في حسابك.

مساحة التحدي

اختبر فهمك.
ووصلها للإتقان.

كل سؤال خطوة لقدّام. اختار، اكتب كود، وشوف نتيجتك فورًا.

4أسئلة 1أنواع تحديات 100%هدف الإتقان
تصحيح تلقائي. فرص بلا حدود.

أكمل المهام، واجمع كل الإجابات الصحيحة. أقل من 100%؟ راجع وأعد المحاولة.

الأسئلة متاحة للاطلاع. سجّل الدخول للتفاعل وحفظ تقدمك.

لمحة عن التحدي4 أسئلة تنتظرك
01

كيف تخزّن MySQL 8 القيم داخلياً في حقل من نوع JSON الأصلي؟

ميّز بين التخزين الأصلي لنوع JSON والتخزين النصي العادي.

02

ما هو الرمز الذي يمثّل دائماً جذر مستند JSON في تعبيرات المسار داخل MySQL؟

حدّد الرمز الابتدائي في مسارات الاستخراج مثل $.user.name.

03

ما هو الفرق بين المعامل -> والمعامل ->> في استعلامات JSON داخل MySQL؟

تذكّر أي المعاملين يدمج الاستخراج مع إزالة علامات الاقتباس.

04

أي دالة من دوال JSON تحدّث قيمة المفتاح إذا كان موجوداً وتضيفه إذا لم يكن موجوداً؟

اختر الدالة التي تجمع بين التعديل والإضافة (Upsert).