ما هي واجهة الأوامر sqlite؟
sqlite3 هي الصدفة الرسمية لسطر الأوامر التي تأتي مع SQLite. تفتح ملف قاعدة البيانات، وتعطيك موجّه إدخال، وتتيح لك تنفيذ استعلامات SQL عليه مباشرة. لا يوجد خادم، ولا تسجيل دخول، ولا ملفات إعدادات — مجرد ملف تنفيذي وملف قاعدة بيانات.
ستستخدم sqlite cli للفحص السريع، والاستعلامات العابرة، واستخراج المخططات، واستيراد البيانات. إنها أسرع طريقة للتعامل مع قاعدة بيانات دون الحاجة لكتابة كود تطبيق كامل.
$ sqlite3 mydata.db
SQLite version 3.45.0
Enter ".help" for usage hints.
sqlite>
إذا كان الملف mydata.db غير موجود أصلاً، فسينشئه SQLite تلقائياً بمجرد أن تُجري أول تعديل. وإن شغّلت sqlite3 دون تمرير اسم ملف، ستحصل على قاعدة بيانات مؤقتة في الذاكرة تختفي بمجرد إغلاق الجلسة.
تنفيذ أوامر SQL داخل واجهة sqlite
بمجرد دخولك إلى الـ shell، اكتب جملة SQL وأنهِها دائماً بفاصلة منقوطة. فالـ shell ينتظر هذه الفاصلة المنقوطة تحديداً، وإن ضغطت Enter بدونها، سيكتفي بعرض موجّه متابعة لتُكمل كتابة الجملة.
الفاصلة المنقوطة هي الإشارة التي تقول للصدفة: "خلصت، نفّذ." لو نسيتها، راح تلقى الصدفة واقفة عند مؤشر ...> تنتظرك. اكتب ; في سطر جديد لكي تكمّل التنفيذ.
الأوامر النقطية ليست SQL
أي شيء يبدأ بنقطة . هو أمر نقطي — يعني تعليمة موجّهة لصدفة sqlite نفسها، مو لمحرّك SQL. هذي الأوامر ما تحتاج فاصلة منقوطة، وما تشتغل إلا داخل صدفة sqlite3.
sqlite> .tables
books
sqlite> .schema books
CREATE TABLE books (
id INTEGER PRIMARY KEY,
title TEXT NOT NULL,
year INTEGER
);
sqlite> .help
الأوامر التي راح تستخدمها يومياً:
.tables— يعرض كل الجداول الموجودة في قاعدة البيانات الحالية..schema [table]— يطبع جملةCREATE TABLEلجدول معيّن أو لكل الجداول..databases— يعرض ملفات قواعد البيانات المرفقة..mode <format>— يغيّر طريقة عرض نتائج الاستعلامات..headers on— يُظهر أسماء الأعمدة فوق النتائج..read file.sql— لتشغيل ملف SQL..exitأو.quit— للخروج من الـ shell.
الأمر .help يعرض القائمة الكاملة. عددها كبير، لكن عملياً ما راح تحتاج إلا عشرة منها تقريباً.
كيف تجعل المخرجات أوضح للقراءة
الإخراج الافتراضي يفصل بين القيم بعلامة | وبدون عناوين للأعمدة — مناسب للسكربتات، لكنه مزعج بصرياً. أمران نقطيان يحلّان المشكلة:
sqlite> .headers on
sqlite> .mode column
sqlite> SELECT * FROM books;
id title year
-- ----------- ----
1 Dune 1965
2 Neuromancer 1984
أوضاع أخرى مفيدة:
.mode box— يرسم جدولاً بحدود يونيكود. شكله جميل للقطات الشاشة..mode csv— قيم مفصولة بفواصل، مناسب لتمرير المخرجات إلى أدوات أخرى..mode json— مخرجات JSON، كائن لكل صف..mode line— عمود واحد في كل سطر، مفيد عندما تكون الصفوف عريضة.
تُعاد هذه الإعدادات إلى وضعها الافتراضي في كل مرة تُشغّل فيها الـ shell. لجعلها دائمة، ضعها في ملف ~/.sqliterc وسيقوم sqlite3 بتحميله تلقائياً عند بدء التشغيل.
استيراد csv إلى sqlite وتصديره
تدعم واجهة الأوامر sqlite صيغة CSV بشكل مدمج. فقط بدّل إلى وضع CSV، ثم استخدم .import لاستيراد الملف إلى جدول:
sqlite> .mode csv
sqlite> .import authors.csv authors
sqlite> SELECT * FROM authors LIMIT 3;
إذا لم يكن الجدول موجودًا، فإن .import ينشئ واحدًا ويعتبر الصف الأول أسماءً للأعمدة. أما إذا كان الجدول موجودًا مسبقًا، فسيُعامَل الصف الأول كبيانات، إلا إذا أضفت الخيار --skip 1.
وفي الاتجاه المعاكس، يمكنك تحويل المخرجات إلى ملف:
sqlite> .headers on
sqlite> .mode csv
sqlite> .output books.csv
sqlite> SELECT * FROM books;
sqlite> .output stdout
.output filename يحوّل نتائج كل الاستعلامات اللاحقة إلى ذلك الملف حتى ترجع إلى الإخراج الافتراضي عبر .output stdout. الآلية نفسها سواء كنت تُصدّر CSV أو JSON أو حتى مخطط قاعدة البيانات الخام.
تشغيل ملفات SQL في sqlite
إذا كان لديك أكثر من بضع تعليمات، فالأفضل أن تضعها في ملف وتُشغّله مباشرة. من داخل الـ shell:
sqlite> .read setup.sql
أو يمكنك تنفيذها مباشرة من الطرفية العادية دون الدخول إلى الـ shell أصلًا:
$ sqlite3 mydata.db < setup.sql
$ sqlite3 mydata.db "SELECT count(*) FROM books;"
الصيغة الثانية تنفّذ استعلامًا واحدًا ثم تخرج مباشرة، وهذا مثالي للسكربتات أو للفحص السريع. ولو احتجت إخراجًا منسّقًا، اجمعها مع إعدادات .mode عبر الخيار -cmd:
$ sqlite3 -header -column mydata.db "SELECT * FROM books;"
استكشاف قاعدة بيانات مجهولة
لما يجيك ملف .db وما عندك أي فكرة عن محتواه، هذي هي الخطوات التي تتبعها:
$ sqlite3 mystery.db
sqlite> .tables
sqlite> .schema
sqlite> .indexes
sqlite> SELECT count(*) FROM some_table;
الأمر .schema بدون أي وسيط يطبع لك كل تعليمات CREATE TABLE وCREATE INDEX وCREATE TRIGGER الموجودة في الملف. أما .indexes فيعرض الفهارس لكل جدول. خمس دقائق فقط داخل الـ shell ستكشف لك عن قاعدة البيانات أكثر مما يفعله أي ملف README عادةً.
وإذا أردت لقطة نصية كاملة يمكنك إعادة إنشاء قاعدة البيانات منها في مكان آخر، استخدم .dump:
sqlite> .output backup.sql
sqlite> .dump
sqlite> .output stdout
يكتب لك سكربت SQL كامل يعيد إنشاء قاعدة البيانات بالكامل — البنية والبيانات معًا — عند تمريره مرة أخرى عبر sqlite3.
الخروج من واجهة الأوامر
ثلاث طرق للخروج، وكلها تؤدي نفس الغرض:
sqlite> .exit
sqlite> .quit
أو اضغط Ctrl+D على macOS و Linux (أو Ctrl+Z ثم Enter على Windows). تغييراتك محفوظة بالفعل، فـ SQLite يثبّت كل عبارة بمجرد تنفيذها ما لم تكن قد بدأت معاملة (transaction) صراحةً.
الخطوة التالية: أدوات رسومية للتعامل مع SQLite
واجهة الأوامر sqlite سريعة وقابلة للأتمتة، لكن أحياناً تحتاج إلى التنقل بين الجداول بالنقر، وفرز الأعمدة، وتعديل الصفوف بصرياً. وهناك بضع أدوات رسومية ممتازة للتعامل مع SQLite، وهذا ما سنستعرضه في الصفحة التالية.
الأسئلة الشائعة
كيف أفتح قاعدة بيانات باستخدام واجهة SQLite CLI؟
نفّذ الأمر sqlite3 mydata.db من الطرفية. إذا لم يكن الملف موجودًا، فإن SQLite ينشئه تلقائيًا بمجرد إنشاء أول جدول. أما إذا شغّلت sqlite3 بدون اسم ملف، فستحصل على قاعدة بيانات مؤقتة في الذاكرة تختفي بمجرد الخروج.
كيف أخرج من واجهة sqlite3؟
اكتب .exit أو .quit ثم اضغط Enter — كلاهما يعمل بنفس الطريقة. وفي معظم الأنظمة يمكنك أيضًا استخدام Ctrl+D (أو Ctrl+Z ثم Enter في ويندوز) لإغلاق الواجهة.
ما هي الأوامر النقطية (Dot Commands) في SQLite؟
الأوامر النقطية هي أوامر مدمجة داخل الواجهة وتبدأ بنقطة . مثل .tables و.schema و.mode و.import. هي ليست أوامر SQL، بل تعليمات موجّهة لواجهة CLI نفسها، لذلك لا تحتاج إلى فاصلة منقوطة في النهاية، ولا تعمل إلا داخل واجهة sqlite3.
كيف أُشغّل ملف SQL داخل واجهة SQLite CLI؟
استخدم الأمر .read filename.sql من داخل الواجهة، أو مرّر الملف من الخارج عبر sqlite3 mydata.db < filename.sql. كلتا الطريقتين تنفّذان الأوامر بالترتيب على قاعدة البيانات المفتوحة.