SQLite إنشاء وتعديل وإسقاط الجدول مع الأمثلة

⚡ ملخص ذكي

SQLite تعتمد إدارة الجداول على ثلاثة أوامر تعريف البيانات، وهي CREATE TABLE لتعريف جدول، وALTER TABLE لإعادة تسميته أو إضافة وتغيير الأعمدة، وDROP TABLE لإزالته تمامًا من قاعدة البيانات.

  • 📐 إنشاء الجداول: تحدد عبارة CREATE TABLE اسم الجدول وأعمدته، ويحتاج كل عمود إلى اسم ونوع بيانات.
  • 🛡️ تجنب الأخطاء: إضافة IF NOT EXISTS إلى CREATE TABLE، أو IF EXISTS إلى DROP TABLE، يمنع حدوث حالات الفشل عندما يكون الجدول موجودًا بالفعل أو مفقودًا.
  • ✏️ تعديل الجداول: يُستخدم الأمر ALTER TABLE لإعادة تسمية جدول، وإضافة عمود، وفي العصر الحديث SQLite يقوم بإعادة تسمية عمود واحد أو حذفه.
  • 🗑️ حذف الجداول: يقوم أمر DROP TABLE بإزالة الجدول بشكل دائم وكل صف وفهرس ينتمي إليه.
  • 📑 نسخ الجداول: يقوم الأمر CREATE TABLE AS SELECT بإنشاء جدول جديد من الأعمدة والصفوف التي تم إرجاعها بواسطة استعلام.
  • 🤖 مساعدة الذكاء الاصطناعي: تقوم برامج المساعدة التي تعمل بالذكاء الاصطناعي لتحويل النصوص إلى SQL و GitHub Copilot بإنشاء عبارات CREATE و ALTER و DROP من مطالبات باللغة الإنجليزية البسيطة.

SQLite إنشاء جدول منسدل معدل

توضح الأقسام التالية كيفية إنشاء الجداول وتعديل بنيتها وحذفها في SQLite3 مع أمثلة، تغطي أوامر CREATE TABLE و ALTER TABLE و DROP TABLE.

SQLite إنشاء الجدول

بناء الجملة

يوجد أدناه بناء جملة عبارة CREATE TABLE.

CREATE TABLE table_name(
column1 datatype,
column1 datatype
);

لإنشاء جدول، يجب عليك استخدام استعلام "CREATE TABLE" كما يلي:

CREATE TABLE guru99 (
  Id Int,
  Name Varchar
);

داخل القوسين بعد اسم الجدول، تقوم بتحديد أعمدة الجدول، ويجب أن يحتوي كل عمود على الخصائص التالية:

  • الاسم، اسم العمود يجب أن يكون فريدًا بين أعمدة الجدول.
  • نوع البيانات - نوع بيانات العمود.
  • قيود الأعمدة الاختيارية كما سنشرح في الأقسام اللاحقة من هذا البرنامج التعليمي.

SQLite إنشاء الجدول إذا لم يكن موجودًا

عندما يتم تشغيل البرنامج النصي أكثر من مرة، فإن عبارة CREATE TABLE البسيطة تفشل إذا كان الجدول موجودًا بالفعل وتتوقف مع ظهور خطأ. SQLite يحل هذا الأمر باستخدام عبارة IF NOT EXISTS الاختيارية، والتي تقوم بإنشاء الجدول فقط عندما يكون مفقودًا ولا تفعل شيئًا عندما يكون موجودًا بالفعل.

CREATE TABLE IF NOT EXISTS guru99 (
  Id Int,
  Name Varchar
);

العبارة المذكورة أعلاه لا تثير خطأ "الجدول موجود بالفعل"، مما يجعل من الآمن الاحتفاظ بها في أعلى برنامج الإعداد أو برنامج الترحيل.

ينطبق المبدأ نفسه في الاتجاه المعاكس عند حذف جدول. إضافة عبارة IF EXISTS إلى أمر DROP TABLE يمنع حدوث خطأ عند حذف الجدول بالفعل.

DROP TABLE IF EXISTS guru99;

كلا البندين شائعان في البرامج النصية الآلية، لأنهما يسمحان بتشغيل نفس الملف بشكل متكرر دون الحاجة إلى تنظيف يدوي بين عمليات التشغيل.

إسقاط الجدول

لحذف جدول، استخدم الأمر "DROP TABLE" متبوعًا باسم الجدول كما يلي:

DROP TABLE guru99;

تغيير الجدول

يمكنك استخدام أمر "ALTER TABLE" لإعادة تسمية جدول على النحو التالي:

ALTER TABLE guru99 RENAME TO guru100;

للتأكد من تغيير اسم الجدول، يمكنك استخدام الأمر ".tables" لعرض قائمة الجداول، ويجب أن يكون اسم الجدول قد تغير الآن كما يلي:

SQLite يُظهر ناتج الأمر .tables تغيير اسم الجدول من guru99 إلى guru100

كما ترون، تم تغيير اسم الجدول "guru99" إلى "guru100" بعد تنفيذ أمر "alter table".

SQLite إضافة أعمدة - باستخدام أمر ALTER TABLE

يمكنك أيضًا استخدام أمر "ALTER TABLE" لإضافة أعمدة:

ALTER TABLE guru100 ADD COLUMN Age INT;

سيؤدي هذا إلى تغيير الجدول "guru100" وإضافة عمود جديد باسم "العمر" إليه.

إذا لم تظهر أي نتائج، فهذا يعني أن العملية تمت بنجاح، وتمت إضافة العمود. عدم ظهور أي نتائج يعني أن المؤشر سيُوضع بعد عبارة "sqlite>" بدون أي نص بعدها، كما يلي:

SQLite لا يُظهر سطر الأوامر أي مخرجات بعد تنفيذ أمر ALTER TABLE ADD COLUMN بنجاح.

مع ذلك، وللتأكد من إضافة العمود، يمكننا استخدام الأمر ".schema guru100". سيعرض لك هذا تعريف الجدول، وسترى العمود الجديد الذي أضفناه للتو.

SQLite يُظهر مُخرج .schema guru100 عمود العمر الجديد المُضاف إلى الجدول

SQLite ALTER TABLE: إعادة تسمية عمود وحذفه

بالإضافة إلى إضافة عمود، فإن الإصدارات الحديثة من SQLite يمكنك أيضًا إعادة تسمية عمود واحد وحذف عمود آخر. تتوفر ميزة إعادة تسمية الأعمدة منذ SQLite 3.25، ويقوم بتحديث الاسم داخل تعريف الجدول وكذلك في كل فهرس ومشغل وعرض يشير إلى العمود.

ALTER TABLE guru100 RENAME COLUMN Name TO FullName;

لإزالة عمود، SQLite يدعم الإصدار 3.35 والإصدارات اللاحقة عبارة DROP COLUMN مباشرة:

ALTER TABLE guru100 DROP COLUMN Age;

لا يمكن حذف عمود عندما يكون جزءًا من مفتاح أساسي أو قيد فريد أو فهرس. في الإصدارات القديمة SQLite في الإصدارات التي تفتقر إلى أمر DROP COLUMN، يتمثل الحل الكلاسيكي في إنشاء جدول جديد بالأعمدة التي تريدها، ونسخ الصفوف، وحذف الجدول القديم، وأخيرًا إعادة تسمية الجدول الجديد.

كيفية نسخ جدول في SQLite باستخدام الأمر CREATE TABLE AS SELECT

في بعض الأحيان تحتاج إلى نسخة من جدول، إما كنسخة احتياطية قبل إجراء تغيير محفوف بالمخاطر أو كنقطة بداية لجدول جديد. SQLite يقوم هذا ببناء هذا في خطوة واحدة باستخدام CREATE TABLE AS SELECT، والذي يقوم بإنشاء جدول جديد تأتي أعمدته من استعلام ويملأه بالصفوف التي يعيدها هذا الاستعلام.

CREATE TABLE guru100_backup AS SELECT * FROM guru100;

يستقبل الجدول الجديد "guru100_backup" نفس الأعمدة وجميع الصفوف من الجدول "guru100". لنسخ بعض الصفوف فقط، أضف شرط WHERE إلى استعلام SELECT.

CREATE TABLE known_ages AS SELECT * FROM guru100 WHERE Age IS NOT NULL;

من المهم تذكر أن أمر CREATE TABLE AS SELECT ينسخ أسماء الأعمدة وأنواعها وبياناتها، ولكنه لا ينسخ المفاتيح الأساسية أو القيود الأخرى أو الفهارس. لذا، عليك إضافة هذه العناصر إلى الجدول الجديد بنفسك إذا كان يجب أن يلتزم الجدول الجديد بنفس قواعد الجدول الأصلي.

SQLite إدراج قيمة في جدول

لإدراج القيم في جدول، نستخدم عبارة "INSERT INTO" كما يلي:

INSERT INTO Tablename(colname1, colname2, ….) VALUES(valu1, value2, ….);

يمكنك حذف أسماء الأعمدة بعد اسم الجدول وكتابتها على النحو التالي:

INSERT INTO Tablename VALUES(value1, value2, ….);

في هذه الحالة، حيث تقوم بحذف أسماء الأعمدة من الجداول، يجب أن يكون عدد القيم المدرجة مساويًا تمامًا لعدد أعمدة الجدول. ثم سيتم إدراج كل قيمة في العمود المقابل. على سبيل المثال، بالنسبة لبيان الإدراج التالي:

INSERT INTO guru100 VALUES(1, 'Mike', 25);

وستكون نتيجة هذا البيان على النحو التالي:

SQLite عبارة INSERT INTO لإضافة صف من القيم إلى جدول guru100

  • سيتم إدخال القيمة 1 في عمود "id".
  • سيتم إدراج القيمة "مايك" في عمود "الاسم"، و
  • سيتم إدخال القيمة 25 في عمود "العمر".

إدراج ... بيان القيم الافتراضية

يمكنك ملء الجدول بالقيم الافتراضية للأعمدة مرة واحدة كما يلي:

INSERT INTO Tablename DEFAULT VALUES;

إذا كان أحد الأعمدة لا يسمح بقيمة فارغة أو قيمة افتراضية، فستتلقى خطأً يفيد بفشل قيد "NOT NULL" لهذا العمود. كما يلي:

SQLite حدث خطأ في قيد NOT NULL أثناء عملية إدراج القيم الافتراضية.

الأسئلة الشائعة

رقم SQLite لا يوجد أمر TRUNCATE TABLE. لتفريغ جدول، نفّذ الأمر DELETE FROM table_name بدون شرط WHERE، ثم استخدم الأمر VACUUM لاستعادة مساحة القرص المُحرَّرة. يبقى هيكل الجدول وأعمدته كما هي.

يحذف الأمر DELETE صفوفًا من جدول مع الإبقاء على الجدول وأعمدته وبنيته جاهزة لاستقبال بيانات جديدة. أما الأمر DROP TABLE فيحذف الجدول بأكمله، بما في ذلك تعريفه وفهارسه ومحفزاته، بحيث لا يعود الجدول موجودًا في قاعدة البيانات.

في SQLite في سطر الأوامر، يطبع الأمر ‎.tables.dot أسماء جميع الجداول. من خلال لغة SQL، يمكنك الاستعلام عن جدول المخطط المدمج باستخدام الأمر SELECT name FROM sqlite_master WHERE type = 'table'; والذي يعمل أيضًا من أي تطبيق متصل بقاعدة البيانات.

يتم إنشاء جدول مؤقت باستخدام الأمر CREATE TEMP TABLE أو CREATE TEMPORARY TABLE. وهو مرئي فقط لاتصال قاعدة البيانات الذي أنشأه، ويتم حذفه تلقائيًا عند إغلاق هذا الاتصال، مما يجعله مفيدًا لحفظ نتائج الاستعلامات المؤقتة.

نعم. المفتاح الأساسي اختياري في SQLiteعندما تحذف واحداً، SQLite لا يزال يحتفظ بمعرف صف مخفي مكون من 64 بت يُحدد كل صف. قيود الأعمدة مثل المفتاح الأساسي، والفريد، وغير الفارغ، كلها اختيارية عند تعريف جدول.

لا، افتراضياً. SQLite يستخدم النوع الديناميكيping مع خاصية تقارب الأنواع، يقبل العمود قيمًا من أي نوع تقريبًا بغض النظر عن نوعه المُعلن. ولفرض فحص دقيق، أنشئ الجدول كجدول STRICT، وأضفه في SQLite 3.37.

نعم. تقوم برامج الذكاء الاصطناعي لتحويل النصوص إلى لغة SQL بتحويل وصف بسيط لبياناتك إلى عبارات CREATE TABLE تتضمن الأعمدة وأنواع البيانات والمفاتيح. وتتحسن الدقة عند تزويد النموذج بمخطط قاعدة البيانات الحالي، حيث يعيد استخدام أسماء الجداول والأعمدة الحقيقية.

نعم. مساعد الطيار جيثب يقترح استخدام أوامر ALTER TABLE وDROP TABLE وغيرها SQLite البيانات المضمنة في برامج التحرير مثل VS Codeيقوم بقراءة ملفات الترحيل والاستعلامات الموجودة لديك، لذا فإن عمليات الإكمال تتطابق مع أسماء الجداول والأعمدة الحقيقية.

تلخيص هذه التدوينة بـ: