SQL Script
ملف .sql هو تفريغ قاعدة بيانات بنص عادي — لقطة من الجداول والصفوف وتعريفات المخطط المُصدّرة بواسطة mysqldump أو pg_dump أو sqlite3 .dump. فتحه في محرر نصوص يعرض تعليمات SQL الخام، واستيراده في محرك قاعدة البيانات المطابق يُعيد إنشاء قاعدة البيانات الأصلية.
التحويل غير متاح حالياً. ملفات تفريغ SQL تحتوي لهجات خاصة بقواعد بيانات تتطلب محللاً لكل محرك.
أسئلة شائعة
ما هو ملف .sql وكيف أفتحه؟
ملف .sql هو تفريغ قاعدة بيانات بنص عادي يحتوي تعليمات SQL تُعيد إنشاء الجداول والبيانات عند استيرادها في محرك قاعدة بيانات. افتحه في أي محرر نصوص (Notepad++ أو VS Code أو nano) لقراءة SQL الخام. لاستخدامه فعلياً، استورده في قاعدة البيانات المطابقة: mysql لتفريغات MySQL وpsql لتفريغات PostgreSQL وsqlite3 لتفريغات SQLite. تعليقات ترويسة الملف تُعرّف الأداة التي أنشأته.
كيف أستورد ملف .sql في قاعدة بياناتي؟
لـ MySQL: mysql -u root -p database_name < dump.sql. لـ PostgreSQL: psql -U postgres -d database_name -f dump.sql. لـ SQLite: sqlite3 database.db < dump.sql. يجب أن تكون قاعدة البيانات الهدف موجودة قبل الاستيراد. phpMyAdmin أيضاً يقبل رفع ملفات .sql عبر تبويب الاستيراد.
هل من الآمن تشغيل ملف .sql تلقيته من مصدر خارجي؟
ليس بدون فحص. ملفات تفريغ SQL يمكنها احتواء تعليمات تدميرية مثل DROP DATABASE وتصعيد صلاحيات عبر GRANT وتسريب بيانات عبر INTO OUTFILE. افحص دائماً تفريغاً غير موثوق بـ head وgrep للكلمات المفتاحية الخطيرة قبل الاستيراد. لا تستورد أبداً بحساب مدير عندما يكفي حساب محدود الصلاحيات.
لماذا يفشل تفريغ MySQL عند استيراده في PostgreSQL؟
MySQL وPostgreSQL يستخدمان لهجات SQL غير متوافقة. مخرجات mysqldump تحتوي اقتباس backtick وAUTO_INCREMENT وENGINE=InnoDB وتعليقات شرطية خاصة بـ MySQL يرفضها PostgreSQL كأخطاء نحوية. استخدم pgloader للترحيل الآلي من MySQL إلى PostgreSQL أو mysql2sqlite لأهداف SQLite.
كيف أعرف أي أداة قاعدة بيانات أنشأت ملف .sql؟
تحقق من أول 20 سطراً. ملفات mysqldump تبدأ بـ -- MySQL dump وإصدار الخادم. ملفات pg_dump تبدأ بـ -- PostgreSQL database dump. ملفات sqlite3 .dump تفتتح بـ BEGIN TRANSACTION يليها مباشرةً تعليمات CREATE TABLE. تفريغات phpMyAdmin تتضمن -- phpMyAdmin SQL Dump في الترويسة.
ما الفرق بين ملف تفريغ .sql ولغة SQL؟
SQL لغة استعلام مُعرّفة بمعيار ISO 9075 للتعامل مع قواعد البيانات العلائقية. ملف تفريغ .sql أداة تصدير مُحددة — ملف نصي يحتوي تعليمات SQL أنتجتها أداة نسخ احتياطي. الملف يستخدم اللغة، لكن اللغة موجودة مستقلة عن أي ملف.
كيف أتعامل مع ملف .sql كبير جداً لا يمكن فتحه في محرر نصوص؟
استخدم أدوات سطر الأوامر: wc -l dump.sql يحسب الأسطر، وhead -50 dump.sql يعرض معاينة الترويسة، وsplit -l 100000 dump.sql chunk_ يُقسّمه لملفات أصغر. للاستيراد، وجّه مباشرةً لعميل قاعدة البيانات دون فتح الملف: mysql -u root -p db < dump.sql يتعامل مع ملفات بالغيغابايت دون تحميلها في الذاكرة.
ما يميز .SQL
ما وراء الامتداد
على خلاف معظم الصيغ التي يغطيها FileDex، ملفات .sql ليس لها مواصفة. لا يوجد مستند ISO يُعرّف ما يجب أن يحتويه ملف تفريغ .sql، ولا بايتات سحرية عند الإزاحة صفر، ولا ترويسة إلزامية. الامتداد مجرد اصطلاح: ملف نص عادي يحمل تعليمات SQL مُنتجة بأي أداة تصدير قاعدة بيانات. سجّلت IANA نوع application/sql كنوع MIME رسمي في أبريل 2013 عبر RFC 6922، لكن هذا RFC يصف نوع وسائط لغة SQL وليس بنية ملف التفريغ. الكشف يعتمد كلياً على الاستدلال — أمر file في Unix يُعرّف .sql بتمييز كلمات SQL المفتاحية وأنماط التعليقات في أول مئات البايتات.
اكتشف التفاصيل التقنية
كيف تختلف ملفات التفريغ حسب المحرك
الأدوات الثلاث الأكثر شيوعاً للتفريغ تُنتج مخرجات مختلفة بنيوياً. التعرف على الأداة التي أنشأت الملف هو الخطوة الأولى عند التعامل مع تفريغ .sql مجهول.
mysqldump (MySQL/MariaDB) يفتتح بكتلة تعليقات تحتوي إصدار MySQL والمضيف واسم قاعدة البيانات. يُصدر تعليمات SET لضبط ترميز الأحرف وفحوصات المفاتيح الخارجية ووضع SQL قبل أي تعريفات جداول. الجداول تظهر كـ DROP TABLE IF EXISTS يليها CREATE TABLE مع عبارات خاصة بالمحرك مثل ENGINE=InnoDB وDEFAULT CHARSET=utf8mb4. البيانات تستخدم INSERT INTO متعدد الصفوف بصيغة VALUES المُجمّعة للأداء.
pg_dump (PostgreSQL) يبدأ بترويسة تعليق تُعرّف إصدار PostgreSQL وإصدار أداة التفريغ. يستخدم تعليمات SET لـ client_encoding وstatement_timeout وlock_timeout. تعريفات المخطط تستخدم صيغة PostgreSQL — مُعرّفات بين علامتي اقتباس مزدوجة وSERIAL/IDENTITY للزيادة التلقائية وأسماء مؤهلة بالمخطط مثل public.users. للبيانات، يستخدم pg_dump افتراضياً أمر COPY (صيغة تحميل جماعي خاصة بـ PostgreSQL) بدلاً من INSERT.
sqlite3 .dump يلف كل شيء في BEGIN TRANSACTION وCOMMIT للاستعادة الذرية. المخطط يستخدم نظام أنواع SQLite المتساهل. البيانات تظهر كتعليمات INSERT INTO فردية. المخرجات هي الأبسط والأكثر قابلية للنقل بين الثلاث.
الجذور التاريخية
إدغار فرانك كود نشر ورقة "نموذج علائقي للبيانات في البنوك المشتركة الكبيرة" عام 1970 في مختبر أبحاث IBM بسان خوسيه. هذه الورقة قدّمت الأساس الرياضي — الجبر العلائقي والتفاضل العلائقي — الذي حلّ محل نماذج قواعد البيانات الهرمية والشبكية. بعد أربع سنوات، طوّر باحثا IBM دونالد تشامبرلين وريموند بويس لغة SEQUEL (لغة الاستعلام الإنجليزية المُهيكلة) كأول تطبيق عملي لعمليات كود العلائقية لنموذج System R. نزاع على علامة تجارية فرض تغيير الاسم إلى SQL. Oracle شحنت أول قاعدة بيانات SQL تجارية عام 1979. ANSI وحّدت اللغة كـ SQL-86، ثم ISO كـ ISO 9075 عام 1987. المعيار رُوجع عبر SQL-92 وSQL:1999 وSQL:2003 وSQL:2011 وSQL:2016 وأخيراً SQL:2023.
أنماط بنية الملف
رغم الاختلافات بين المحركات، تتشارك ملفات التفريغ هيكلاً عظمياً مشتركاً. تفتتح بترويسات تعليق تُعرّف الأداة المصدر والإصدار. تعليمات SET للتكوين تليها لضبط متغيرات الجلسة لاستيراد نظيف. ثم تأتي تعليمات CREATE TABLE التي تُعرّف المخطط. أخيراً تعليمات INSERT أو COPY تحمل صفوف البيانات الفعلية. بعض التفريغات تتضمن CREATE INDEX وALTER TABLE للمفاتيح الخارجية وCREATE TRIGGER للمنطق المُخزّن.
الترميز يكون UTF-8 افتراضياً في التفريغات الحديثة، لكن ملفات mysqldump القديمة قد تستخدم latin1 أو مجموعة أحرف قاعدة البيانات. ترويسة mysqldump عادةً تتضمن SET NAMES utf8mb4 للإعلان عن الترميز.
جدار قابلية النقل
بينما يُعرّف ISO 9075 لغة SQL معيارية، تتباعد تطبيقات المُصنّعين بشكل كبير. ملف mysqldump يستخدم اقتباس backtick وAUTO_INCREMENT وENGINE=InnoDB وINSERT متعدد الصفوف. ملف pg_dump يستخدم اقتباس مزدوج وSERIAL/IDENTITY وCOPY FROM stdin وأنواع خاصة مثل JSONB وTIMESTAMPTZ. تغذية مخرجات محرك في محرك آخر تُنتج سلسلة أخطاء نحوية.
أدوات التحويل موجودة لكنها تنطوي على مقايضات. mysql2sqlite يحذف صيغة MySQL الخاصة ويُعيد كتابتها لـ SQLite، لكنه يخسر الإجراءات المُخزّنة والمشغّلات وبعض أنواع البيانات. pgloader يمكنه ترحيل MySQL إلى PostgreSQL بأمر واحد.
السياق السعودي
القطاع المصرفي السعودي يعتمد بشكل كبير على قواعد البيانات العلائقية. منصة Elm (علم) — مزود الخدمات الرقمية الحكومية — تتعامل مع عمليات ترحيل بيانات واسعة تتضمن تفريغات SQL. شركة الاتصالات السعودية (stc) تدير أنظمة بيانات ضخمة تُصدّر وتستورد تفريغات SQL بشكل روتيني. مشاريع تحديث البنية التحتية الرقمية ضمن رؤية 2030 تتطلب ترحيل قواعد بيانات من أنظمة قديمة إلى حلول سحابية، مما يجعل فهم صيغ تفريغ SQL مهارة عملية حاسمة.
الأمان: لا تنفّذ بلا فحص
قسم اعتبارات الأمان في RFC 6922 يُحذّر صراحةً: SQL "لغة برمجة كاملة" وملفات التفريغ قد تحتوي تعليمات تحذف جداول أو تُصعّد صلاحيات أو تُنشئ حسابات خلفية أو تُسرّب بيانات عبر INTO OUTFILE. ملف .sql خبيث يمكنه تضمين DROP DATABASE أو GRANT ALL PRIVILEGES داخل ما يبدو كنسخة احتياطية عادية.
حقن SQL لا يزال في قائمة OWASP لأخطر 10 ثغرات — مصنّف A03 في 2021 (94% من التطبيقات المفحوصة أظهرت شكلاً من ثغرات الحقن مع 274,000 حالة). بينما يستهدف الحقن عادةً تطبيقات الويب، نفس المبدأ ينطبق على ملفات التفريغ: تنفيذ SQL غير موثوق يُشغّل أوامر عشوائية ضد قاعدة بياناتك.
قبل استيراد أي ملف .sql من مصدر خارجي، افحصه: شغّل wc -l للتحقق من عدد الأسطر، وhead -50 لفحص الترويسة، وابحث عن كلمات مفتاحية خطيرة مثل DROP وGRANT وINTO OUTFILE وCREATE FUNCTION.
مقارنة .SQL مع البدائل
| المقارنة | المعيار | الفائز |
|---|---|---|
| .SQL DUMP vs .CSV | دقة البيانات تفريغات SQL تحفظ المخطط الكامل — أنواع الأعمدة والقيود والفهارس والمفاتيح الخارجية والعلاقات متعددة الجداول. CSV بيانات جدولية مسطحة بلا معلومات أنواع ولا علاقات ولا تعريف مخطط. | SQL DUMP أفضل |
| .SQL DUMP vs .SQLITE .DB | قابلية النقل ملف SQLite .db قاعدة بيانات ثنائية مستقلة قابلة للقراءة بأي مكتبة SQLite على أي منصة. تفريغ SQL نص مربوط بلهجة محرك مُحدد — مخرجات mysqldump تفشل على PostgreSQL دون تحويل. | SQLITE .DB أفضل |
| .MYSQLDUMP vs .PG_DUMP | التوافق عبر المحركات mysqldump يستخدم اقتباس backtick وAUTO_INCREMENT وعبارات ENGINE= وINSERT VALUES متعدد الصفوف. pg_dump يستخدم اقتباساً مزدوجاً وSERIAL/IDENTITY وCOPY FROM stdin وأسماء مؤهلة بالمخطط. لا يُستورد أي منهما في الآخر دون تحويل لهجة. | تعادل |
المرجع التقني
- نوع MIME
application/sql- المطوّر
- IBM (Edgar Codd / Donald Chamberlin)
- سنة التقديم
- 1974
- معيار مفتوح
- نعم — عرض المواصفات
البنية الثنائية
ملف تفريغ .sql نص عادي بلا بنية ثنائية أو بايتات سحرية. يفتتح الملف بكتلة ترويسة تعليقات — أسطر تبدأ بـ -- (شرطتان) أو محاطة بـ /* */ — تُعرّف أداة التفريغ والإصدار والمضيف واسم قاعدة البيانات والطابع الزمني. بعد الترويسة، تعليمات SET تُهيئ الجلسة: ترميز الأحرف (SET NAMES utf8mb4) وفحوصات المفاتيح الخارجية (SET FOREIGN_KEY_CHECKS=0) ووضع SQL. الجسم يحتوي تعليمات CREATE TABLE التي تُعرّف الأعمدة والأنواع والقيود والفهارس، يليها تعليمات INSERT INTO التي تحمل صفوف البيانات الفعلية. بعض التفريغات تتضمن ALTER TABLE للمفاتيح الخارجية المؤجلة وCREATE INDEX لفهارس الأداء. mysqldump قد يلف أقساماً في تعليقات شرطية (/*!40101 ... */). pg_dump يستخدم COPY ... FROM stdin للبيانات الجماعية بدلاً من INSERT. sqlite3 .dump يلف المخرجات بالكامل في BEGIN TRANSACTION وCOMMIT.
التحويل غير متاح حالياً. ملفات تفريغ SQL تحتوي لهجات خاصة بقواعد بيانات تتطلب محللاً لكل محرك.
نقاط الضعف
- التنفيذ الأعمى لتفريغات خبيثة — استيراد ملف .sql غير موثوق يُنفّذ جميع التعليمات المحتواة، التي قد تحذف جداول أو تمحو بيانات أو تُدرج حسابات خلفية أو تمنح صلاحيات مُرتفعة لمستخدمين يسيطر عليهم المهاجم
- حقن إجراءات مُخزّنة — تفريغ يمكنه إنشاء CREATE FUNCTION أو CREATE TRIGGER بمنطق عشوائي يُنفّذ في عمليات قاعدة البيانات المستقبلية، مما يُديم الهجوم بعد الاستيراد الأولي
- تسريب بيانات عبر INTO OUTFILE — أمر SELECT INTO OUTFILE في MySQL يكتب نتائج الاستعلام على نظام ملفات الخادم، مما يسمح لتفريغ مُصطنع بتسريب بيانات حساسة
- تصعيد صلاحيات عبر GRANT — تفريغ يحتوي تعليمات GRANT ALL PRIVILEGES يمكنه رفع حساب محدود الصلاحيات إلى مدير قاعدة بيانات كامل إذا استُورد بمستخدم ذي صلاحيات كافية
الحماية: FileDex يعرض ملفات .sql كنص للقراءة فقط كمرجع للصيغة. لا تنفيذ SQL، لا اتصال بقاعدة بيانات، لا معالجة من جانب الخادم. المحتوى يُعرض في المتصفح بدون تقييم أي تعليمة.