وثائق SQLite
مرجع موجز ومدعّم بأمثلة للغة SQLite. اقرأ المفهوم، شاهد الكود، ثم تدرّب عليه في رحلة Coddy.
ابدأ رحلة موجَّهة في SQLiteالبداية
- ما هو SQLiteSQLite قاعدة بيانات SQL مدمجة بدون خادم، تعمل داخل تطبيقك وتُخزّن كل شيء في ملف واحد. تعرّف على ما هي فعلاً، وكيف تختلف عن خوادم قواعد البيانات، ومتى تكون الخيار الأمثل.
- SQLite أم MySQLمقارنة عملية بين SQLite و MySQL: البنية، الأداء، التزامن، وأنواع البيانات، ومتى يكون كل واحد منهما الخيار الأنسب لمشروعك.
- SQLite أم Postgresمقارنة عملية بين SQLite و PostgreSQL من حيث البنية والتزامن وأنواع البيانات، ومتى يكون كل منهما الخيار الأنسب لمشروعك.
- متى تستخدم SQLiteدليل عملي يوضح متى يكون SQLite الخيار الأمثل لقاعدة بياناتك، ومتى يكون الأفضل اللجوء إلى Postgres أو MySQL بدلًا منه.
- تثبيت SQLiteطريقة تثبيت SQLite على أنظمة Windows وmacOS وLinux: تنزيل أداة سطر الأوامر، وإضافة sqlite3 إلى متغير PATH، والتأكد من نجاح التثبيت.
- واجهة SQLiteتعلّم كيف تستخدم واجهة الأوامر sqlite3 لفتح قواعد البيانات وتنفيذ الاستعلامات والأوامر النقطية واستيراد وتصدير البيانات مباشرة من الطرفية.
- أدوات التصفحجولة عملية على أبرز أدوات الواجهة الرسومية لفتح ملفات SQLite وتصفحها وتعديلها: DB Browser for SQLite و SQLiteStudio إضافة إلى عارضات الويب.
- إنشاء قاعدة بياناتطريقة إنشاء قاعدة بيانات SQLite عمليًا: فهم نموذج الملف الواحد، استخدام أداة `sqlite3`، ولماذا لا يوجد أمر `CREATE DATABASE` أصلًا.
- قاعدة بيانات في الذاكرةكيف تعمل قاعدة بيانات SQLite في الذاكرة، ومتى تستخدم `:memory:`، وما الفرق بينها وبين قاعدة بيانات محفوظة في ملف على القرص.
الجداول والأنواع
- CREATE TABLEتعلّم كيفية إنشاء الجداول في SQLite: تعريف الأعمدة، القيود، IF NOT EXISTS، الجداول المؤقتة، وإنشاء جدول من نتيجة استعلام SELECT.
- أنواع البياناتكيف تخزّن SQLite القيم فعليًا؟ شرح فئات التخزين الخمس، ولماذا تُعتبر الكتابة في SQLite ديناميكية، وأهم المفاجآت التي تواجه القادمين من MySQL أو Postgres.
- Type Affinityكيف يتعامل SQLite مع أنواع الأعمدة فعلياً؟ شرح مبسّط لنظام Type Affinity وأنواعه الخمسة، وقواعد اختياره، وسبب قبول عمود INTEGER لقيمة نصية.
- جداول STRICTتعرّف على جداول STRICT في SQLite وكيف تُلغي مرونة التخزين وترفض القيم غير المطابقة لتمنحك التحقق الصارم من الأنواع الذي كنت تتوقعه.
- المفاتيح الأساسيةكيف تعمل المفاتيح الأساسية في SQLite: المفتاح الخاص INTEGER PRIMARY KEY، والمفاتيح المركّبة، وAUTOINCREMENT، والفخاخ التي يقع فيها المبتدئون.
- ROWIDتعرّف على ما هو ROWID فعلياً في SQLite، ومتى يصبح INTEGER PRIMARY KEY مجرد اسم بديل له، ولماذا توجد جداول WITHOUT ROWID أصلاً.
- NOT NULL و DEFAULTشرح عملي لقيدَي `NOT NULL` و `DEFAULT` في SQLite: ما الذي يفرضانه فعلياً، حيلة `CURRENT_TIMESTAMP`، ومشاكل إضافتهما إلى جدول موجود مسبقاً.
- قيود CHECKتعلّم استخدام قيود CHECK في SQLite لفرض قواعد التحقق على قيم الأعمدة: قيود العمود الواحد، القيود متعددة الأعمدة، التسمية، والأخطاء الشائعة.
- قيود UNIQUEشرح عملي لقيود UNIQUE في SQLite: على مستوى العمود والجدول، المفاتيح المركبة، الفرق مع PRIMARY KEY، تعامل NULL، وكيف تحل خطأ التكرار.
- DROP و ALTER TABLEتعرّف على كيفية حذف الجداول وإعادة تسميتها وتعديلها في SQLite، وما الذي يدعمه ALTER TABLE وما لا يدعمه، مع حيلة إعادة بناء الجدول للتعديلات غير المدعومة.
إدراج البيانات وتعديلها
- INSERTتعرّف على كيفية عمل أمر INSERT في SQLite: إدراج صف واحد، إدراج صفوف متعددة دفعة واحدة، INSERT...SELECT، والتعامل مع التعارضات عبر OR IGNORE و OR REPLACE.
- UPDATEتعرّف على كيفية تعديل الصفوف الموجودة في SQLite باستخدام UPDATE، مع شرح جملة WHERE التي تحميك من الكوارث، وتحديث عدة أعمدة دفعة واحدة، واستخدام UPDATE ... FROM للتعديل بين الجداول.
- DELETEتعرّف على طريقة عمل DELETE في SQLite: كتابة شرط WHERE بأمان، حذف كل الصفوف، تمرير الحذف للجداول المرتبطة عبر CASCADE، واسترجاع الصفوف المحذوفة باستخدام RETURNING.
- UPSERTشرح عملي لـ UPSERT في SQLite: جملة ON CONFLICT، الجدول الوهمي excluded، الفرق بين DO NOTHING و DO UPDATE، ولماذا هي أفضل من INSERT OR REPLACE.
- جملة RETURNINGتعرّف على طريقة عمل جملة RETURNING في SQLite لاسترجاع الصفوف الناتجة عن INSERT أو UPDATE أو DELETE مباشرةً دون الحاجة إلى استعلام إضافي.
- استيراد CSVطريقة استيراد ملفات CSV إلى SQLite باستخدام أمر .import: التعامل مع رؤوس الأعمدة، الجداول الموجودة، الفواصل المخصصة، وأشهر الأخطاء وحلولها.
- تصدير البياناتطرق تصدير البيانات من SQLite: ملفات CSV مع العناوين، JSON، نسخ SQL كاملة، ونسخ احتياطي لجدول واحد عبر سطر أوامر sqlite3.
الاستعلام عن البيانات
- أساسيات SELECTكيف تعمل جملة SELECT في SQLite — اختيار الأعمدة، حساب التعابير، تسمية النتائج بـ AS، والمنطق الذي تقوم عليه كل استعلام تكتبه.
- جملة WHEREتعرّف على كيفية استخدام جملة WHERE في SQLite لتصفية الصفوف: عوامل المقارنة، AND/OR، LIKE، IN، BETWEEN، وفخ NULL الشهير الذي يقع فيه الجميع.
- العوامل وNULLكيف تتصرف عوامل المقارنة مع قيم NULL في SQLite، ولماذا لا يعمل `=` و`<>` كما تتوقع، ومتى تستخدم IS NULL وIS NOT NULL وCOALESCE وIFNULL.
- ORDER BYشرح عملي لجملة ORDER BY في SQLite: الترتيب التصاعدي والتنازلي، الترتيب بأكثر من عمود، التحكم بمواقع NULL، والترتيب دون التمييز بين حالة الأحرف.
- LIMIT و OFFSETشرح عملي لـ LIMIT و OFFSET في SQLite: تحديد عدد الصفوف، تخطّيها، ترقيم الصفحات بشكل آمن، والفخ الذي يبطئ الاستعلامات على الجداول الكبيرة.
- DISTINCTشرح SELECT DISTINCT في SQLite: التعامل مع عمود واحد أو عدة أعمدة، قيم NULL، استخدام COUNT(DISTINCT)، ومتى يكون GROUP BY هو الخيار الأنسب.
- تعبير CASEشرح تعبير CASE في SQLite بصيغتيه المبسطة والبحثية، وكيفية استخدامه داخل SELECT وORDER BY وWHERE، ومتى يكون IIF خيارًا أفضل.
الدوال والتجميع
- دوال النصوصشرح عملي لأهم دوال النصوص في SQLite: الدمج، SUBSTR، INSTR، REPLACE، TRIM، وأساليب تنظيف النصوص وإعادة تشكيلها داخل الاستعلامات.
- دوال الأرقامكيف تجري العمليات الحسابية في SQLite عبر ROUND وABS وCEIL وFLOOR وMOD وPOWER وSQRT وRANDOM، مع شرح فخ القسمة الصحيحة الذي يقع فيه الجميع.
- التواريخ والأوقاتكيف يخزّن SQLite التواريخ ويتعامل معها — دوال التاريخ الخمس، صيغ التنسيق، المُعدِّلات، والخيارات التي تُبقي استعلاماتك سريعة.
- دوال التجميعتعرّف على كيفية عمل دوال التجميع في SQLite لاختصار صفوف كثيرة في قيمة واحدة: COUNT وSUM وAVG وMIN وMAX وGROUP_CONCAT، مع شرح DISTINCT وFILTER وكيف تتعامل مع NULL.
- GROUP BY و HAVINGكيف تقوم GROUP BY بتجميع الصفوف داخل مجموعات في SQLite، وكيف تُستخدم HAVING لتصفية هذه المجموعات بعد التجميع، مع توضيح عملي للفرق بين WHERE و HAVING.
العلاقات وعمليات JOIN
- المفاتيح الأجنبيةتعرّف على آلية عمل المفاتيح الأجنبية في SQLite: كيفية تعريفها بـ REFERENCES، تفعيلها عبر PRAGMA، واختيار سلوك ON DELETE المناسب لجداولك.
- INNER JOINتعرّف على آلية عمل INNER JOIN في SQLite: الفكرة الذهنية وراءه، جملة ON، ربط ثلاثة جداول، واختصار USING.
- LEFT JOINتعرّف على طريقة عمل LEFT JOIN في SQLite: كيف يحتفظ بكل صفوف الجدول الأيسر، ويتعامل مع NULL، ويُستخدم بأمان مع WHERE وجداول متعددة.
- Self Joinتعرّف على كيفية عمل Self Join في SQLite لمطابقة الصفوف داخل نفس الجدول باستخدام الـ aliases، مع أمثلة عملية على علاقة الموظف بالمدير والبيانات الهرمية.
- الاستعلامات الفرعيةتعرّف على كيفية تضمين استعلام SELECT داخل آخر في SQLite: الاستعلامات الفرعية القياسية، IN وEXISTS، الجداول المشتقة، والاستعلامات المرتبطة، ومتى يكون JOIN خياراً أوضح.
- CTEكيف تعمل تعابير CTE في SQLite، وكيف تستخدم WITH لتسمية الاستعلامات الفرعية وربط أكثر من CTE معاً لكتابة استعلامات أوضح وأسهل في القراءة.
- CTE التكراريشرح عملي للـ CTE التكراري في SQLite: بنية الجزء الأساسي والجزء التكراري، التنقل في الأشجار الهرمية، توليد سلاسل الأرقام، وتجنّب الحلقات اللانهائية.
الفهارس والأداء
- الفهارسكيف تعمل الفهارس في SQLite، ومتى تفيدك ومتى تكون عبئاً، وكيف تتأكد أن مُخطِّط الاستعلامات يستخدمها فعلاً.
- الفهارس المركبةكيف تعمل الفهارس متعددة الأعمدة في SQLite، ولماذا يُحدث ترتيب الأعمدة فرقًا كبيرًا، ومتى يفيدك الفهرس المركب فعلًا ومتى يكون مجرد إهدار للمساحة.
- الفهارس الجزئيةشرح طريقة عمل الفهارس الجزئية في SQLite، وكيف تفهرس الصفوف التي تستعلم عنها فعلياً فقط، مع أنماط شائعة كالحذف الناعم والتفرّد الجزئي والمجموعات الساخنة.
- EXPLAIN QUERY PLANتعرّف على كيفية استخدام EXPLAIN QUERY PLAN في SQLite لمعرفة هل يستخدم استعلامك فهرسًا أم لا، والفرق بين SCAN و SEARCH، وكيف تقرأ خطط الـ JOIN.
- ANALYZE و VACUUMكيف يحافظ أمرا `ANALYZE` و`VACUUM` على قاعدة بيانات SQLite سريعة وخفيفة، وما الذي يفعله كل منهما فعلياً، ومتى تشغّلهما، وأهم الخيارات التي يجدر بك معرفتها.
ميزات متقدمة
- المعاملاتكيف تعمل المعاملات (Transactions) في SQLite: شرح BEGIN وCOMMIT وROLLBACK ووضع autocommit، والفرق بين DEFERRED وIMMEDIATE وEXCLUSIVE وتوقيت أخذ الأقفال.
- نقاط الحفظتعرّف على نقاط الحفظ (Savepoints) في SQLite: علامات مُسمّاة داخل المعاملة تتيح لك التراجع عن جزء منها فقط دون إلغاء المعاملة بأكملها.
- العروض (Views)كيف تعمل العروض في SQLite: حفظ الاستعلامات كجداول افتراضية، ومتى تستخدم العروض المؤقتة، ولماذا تكون للقراءة فقط افتراضيًا.
- المحفزات (Triggers)شرح عملي لمحفزات SQLite: الفرق بين BEFORE و AFTER، استخدام INSTEAD OF مع العروض (Views)، والإشارة إلى الصفوف عبر OLD و NEW، ومتى تكون المحفزات هي الحل المناسب فعلاً.
- دعم JSONكيف تخزّن SQLite بيانات JSON وتستعلم عنها: استخراج الحقول، تحديث القيم، توسيع المصفوفات بـ json_each، وفهرسة مسارات JSON لرفع الأداء.
- البحث النصي FTS5تعرّف على كيفية إضافة البحث النصي الكامل إلى SQLite عبر FTS5: إنشاء الجداول الافتراضية، استخدام عامل MATCH، ترتيب النتائج بـ BM25، ومزامنة الفهرس مع بياناتك.
- دوال النوافذتعرّف على طريقة عمل دوال النوافذ في SQLite: شرح OVER وPARTITION BY ودوال الترتيب وLAG/LEAD وإطارات النوافذ لحساب المجاميع التراكمية.
- الأعمدة المُولَّدةشرح عملي للأعمدة المُولَّدة في SQLite: كيفية تعريفها، الفرق بين VIRTUAL وSTORED، وفهرستها لتسريع الاستعلامات.
- ATTACH DATABASEتعرّف على كيفية استخدام ATTACH DATABASE لفتح أكثر من ملف SQLite في اتصال واحد، وتنفيذ استعلامات عبرها باستخدام بادئات المخطط، ثم فصلها عند الانتهاء.
الأمان وتكامل التطبيقات
- Prepared Statementsتعرّف على Prepared Statements في SQLite، ولماذا توجد، ودورة الحياة prepare/bind/step/finalize التي تعتمد عليها كل المكتبات.
- ربط المعاملاتكيف يعمل ربط المعاملات في SQLite — العناصر النائبة بالموضع، والمعاملات المسماة، والقواعد الصحيحة لتمرير القيم من تطبيقك بأمان.
- حقن SQLلماذا يُعدّ دمج النصوص خطرًا حقيقيًا، وكيف تحدث هجمات حقن SQL فعليًا، وكيف تُغلق الاستعلامات المُعاملية في SQLite هذا الباب نهائيًا.
- الاتصال بالتطبيقاتكيف تفتح التطبيقات قاعدة بيانات SQLite وتستخدمها: مسارات الملفات، سلاسل الاتصال، التعريفات في كل لغة، والإعدادات التي يجب ضبطها من اليوم الأول.
- ترحيل المخططكيف تطوّر مخطط قاعدة بيانات SQLite بأمان عبر الزمن باستخدام PRAGMA user_version، وسكربتات ترحيل مرتّبة، ومعاملات قابلة للتراجع.
- وضع WAL والتزامنكيف يغيّر وضع WAL في SQLite قواعد التزامن؟ القرّاء والكتّاب لا يعطّل بعضهم بعضًا، وما هي وظيفة ملفي -wal و -shm فعليًا.
الإنتاج والتشغيل
- النسخ والاستعادةكيف تأخذ نسخة احتياطية لقاعدة بيانات SQLite وتستعيدها بأمان: أمر .backup، و VACUUM INTO، وواجهة النسخ المباشر، ولماذا نسخ الملف يدوياً فكرة سيئة.
- إعدادات PRAGMAتعرّف على أهم أوامر PRAGMA في SQLite التي تستحق الضبط فعلاً: journal_mode وsynchronous وforeign_keys وbusy_timeout وcache_size، مع القيم الموصى بها للإنتاج.
- الأخطاء الشائعةأبرز أخطاء SQLite التي ستصادفك فعلياً في بيئة الإنتاج — من قفل قاعدة البيانات إلى تلف الملف وفشل القيود — مع طريقة معالجة كل واحد منها.