ما هي SQL، ولماذا تهمّ اللهجة؟
SQL هي لغة استعلام قواعد البيانات العلائقية، موحّدة في خطوطها العامة لكن مطبّقة بفروق لهجية — قواعد الاقتباس والدوال وLIMIT مقابل TOP وصيغ التواريخ — في PostgreSQL وMySQL وSQLite وSQL Server وOracle. يوحّد المنسّق الكلمات المفتاحية والمسافات البادئة وفواصل الأسطر ليمكن قراءة الاستعلام الطويل ومراجعته؛ ويحلّل المدقّق العبارة ليجد أخطاء الصياغة قبل وصولها إلى قاعدة البيانات.
ملاحظة أمنية: عبارات INSERT أو IN المولَّدة مخصصة لبيانات الاختبار والترحيلات. أما في شيفرة التطبيق فيجب أن تمر القيم عبر استعلامات مُعامَلة — بناء SQL من مدخلات المستخدم بربط النصوص هو الطريق إلى حقن SQL.
كيفية استخدام مولّد جمل SQL INSERT
- الصق الصفوف (السطر الأول = أسماء الأعمدة) أو مصفوفة JSON.
- أدخل اسم الجدول واختر اللهجة ونمط الجمل.
- انسخ جمل INSERT المولَّدة.
مزايا مولّد جمل SQL INSERT
- قبول CSV/TSV مع صف ترويسة أو مصفوفة JSON من الكائنات
- استنتاج تلقائي لأنواع الأعمدة من أجل اقتباس صحيح (الأرقام والقيم المنطقية والتواريخ وNULL)
- INSERT متعدد الصفوف مع التجميع في دفعات، أو جملة واحدة لكل صف
- صياغة MySQL وPostgreSQL وSQL Server وOracle (باستخدام INSERT ALL) وSQLite
- اقتباس المعرّفات: عند الحاجة فقط، أو دائماً، أو أبداً
- تغليف اختياري ضمن معاملة (transaction)
مثال على مولّد جمل SQL INSERT
صفّان إلى جملة INSERT متعددة الصفوف
الإدخال:
id,name,active
1,Layla,true
2,Omar,falseالنتيجة:
INSERT INTO users (id, name, active) VALUES
(1, 'Layla', 1),
(2, 'Omar', 0);الأسئلة الشائعة حول مولّد جمل SQL INSERT
ما صيغ الإدخال المقبولة؟
CSV أو TSV مع صف ترويسة (مفصولة بفاصلة أو فاصلة منقوطة أو علامة جدولة أو شريط عمودي — تُكتشف تلقائياً) ومصفوفات JSON من الكائنات. وتُسطَّح كائنات JSON المتداخلة إلى أسماء أعمدة بصيغة column_subcolumn.
كيف تُقتبس القيم؟
تُستنتج أنواع الأعمدة من البيانات: تبقى الأرقام بلا اقتباس، وتتحول القيم المنطقية إلى TRUE/FALSE أو 1/0 حسب اللهجة، وتصبح الخلايا الفارغة وNULL قيمة NULL، ويوضع كل ما عدا ذلك بين علامتي اقتباس مفردتين مع تهريب علامات الاقتباس. فعّل «اقتباس كل قيمة كنص» (Quote every value as text) لتعطيل الاستنتاج.
لماذا تُجمَّع الصفوف في دفعات؟
قد تتجاوز جمل INSERT متعددة الصفوف الكبيرة حدود الحزم أو المعاملات. يسمح SQL Server بما لا يزيد عن 1000 صف لكل INSERT … VALUES؛ ويقسّم حجم الدفعة الصفوف إلى عدة جمل. أما Oracle فتستخدم صياغة INSERT ALL تلقائياً.
هل يمكنني توليد بيانات أولية (seed) دون ملف؟
نعم — اكتب CSV صغيراً يدوياً، أو استخدم أدوات بيانات الاختبار لتوليد CSV والصقه هنا.
ملاحظات تقنية
تُطبَّع ترويسات الأعمدة إلى معرّفات: يزيل تفكيك NFKD علامات التشكيل اللاتينية، ويُفصل camelCase، ويصير ما هو خارج [A-Za-z0-9_] شرطة سفلية، ويُسبق الرقم البادئ بـ _، ثم يُصغَّر الناتج ويُقطع عند 63 محرفاً (حدّ PostgreSQL). ولا يُقتبس المعرّف تلقائياً إلا إذا خالف ^[A-Za-z_][A-Za-z0-9_]*$ أو كان كلمة محجوزة — بعلامات backtick في MySQL، وبالأقواس المربعة في SQL Server، وبعلامات مزدوجة فيما عداهما، والأسماء المنقّطة جزءاً جزءاً. أما اسم الجدول فيُقتبس ولا يُعاد كتابته أبداً.
يدمج الاستنتاج لكل عمود الأنواع: تتّسع الرقمية integer → bigint → decimal، ويعطي date مع datetime نوع datetime، وتصير الخلائط الأخرى سلاسل. تبقى 007 سلسلة، وتُنسخ القيم الرقمية حرفياً (يحتفظ 1.50 بصفره)، وتتحول القيم الفارغة وnull وN/A و\N و- إلى NULL. ولا تظهر TRUE/FALSE إلا في PostgreSQL و1/0 فيما عداها. وتُضاعف علامة الاقتباس المفردة؛ ويضاعف MySQL الشرطة المائلة العكسية، ويسبق SQL Server النص غير ASCII بـ N، ويتلقى Oracle قيم DATE '…' وTIMESTAMP '…'.
المراجع
- PostgreSQL Documentation: SQL Syntaxالبنية المعجمية لـ SQL في PostgreSQL: المعرّفات والاقتباس والثوابت النصية والتهريب.
- SQL As Understood By SQLiteقواعد SQL التي يقبلها SQLite، عبارة تلو الأخرى، مع مخططات نحوية.
- SQL Injectionكيف يعمل حقن SQL ولماذا الاستعلامات المُعامَلة، لا بناء النصوص، هي الدفاع.