الجداول هي الهياكل التنظيمية الأساسية في قواعد بيانات SQL. وهي تتكون من عدد من الأعمدة التي تعكس السمات الفردية لكل صف أو سجل في الجدول. ولعلّ من المهم لكل من يعمل مع قواعد البيانات العلاقية أن يفهم كيفية إنشاء وتغيير وحذف الجداول حسب الحاجة كونها جزءًا أساسيًا من آلية تنظيم البيانات.
سنتناول في هذا المقال كيفية إنشاء الجداول في SQL، بالإضافة إلى كيفية تعديل وحذف الجداول الموجودة أصلًا في قاعدة البيانات.
مستلزمات العمل
لمتابعة الخطوات في هذا المقال، ستحتاج إلى جهاز كمبيوتر يُشغّل أحد أنواع أنظمة إدارة قواعد البيانات العلاقية RDBMS التي تستخدم SQL. وقد اختبرنا الأوامر البرمجية والأمثلة في هذا المقال مستخدمين البيئة التالية:
- خادم عامل على توزيعة أوبنتو، مع مستخدم ذو صلاحيات مسؤول مختلف عن المستخدم الجذر، وجدار حماية مكوّن باستخدام UFW، كما هو موضح في مقال كيفية تثبيت توزيعة أوبنتو من لينكس بأبسط طريقة.
- نظام إدارة قواعد البيانات MySQL مثبت على الخادم، كما هو موضح في المقال كيفية تثبيت MySQL على أوبونتو. وقد نفذنا خطوات هذا المقال باستخدام مستخدم MySQL مختلف عن المستخدم الجذر، مُنشأ وفق الطريقة الموضحة في الخطوة 3 من هذا المقال.
ملاحظة: تجدر الإشارة إلى أنّ الكثير من أنظمة إدارة قواعد البيانات العلاقية لها تقديماتها الفريدة من لغة SQL. فبالرغم من كون الأوامر المُقدمة في هذا المقال ستعمل مع معظم هذه الأنظمة، ولكن قد تجد بعض الاختلافات الطفيفة في الصيغة أو الناتج عند تنفيذها على أنظمة مختلفة عن MySQL.
وبالعودة إلى مستلزمات العمل، ستحتاج أيضًا إلى قاعدة بيانات وجدول مُحمّل ببعض البيانات التجريبية النموذجية لتتمكن من التدرب على استخدام محارف البدل. وإذا لم تكن متوفرة لديك، يمكنك مراجعة الفقرة التالية الاتصال بـ MySQL وإعداد قاعدة بيانات تجريبية نموذجية للمزيد من التفاصيل حول كيفية إعداد قاعدة بيانات وجدول لاستخدامهما في الأمثلة خلال هذا المقال.
الاتصال بـ MySQL وإعداد قاعدة بيانات تجريبية نموذجية
إذا كان نظام قاعدة بيانات SQL الخاص بك يعمل على خادم بعيد، فاتصل بالخادم مُستخدمًا بروتوكول SSH من جهازك المحلي على النحو التالي:
$ ssh user@your_server_ip
ثم افتح واجهة سطر الأوامر في خادم MySQL، مُستبدلًا user
باسم حساب مستخدم MySQL الخاص بك:
$ mysql -u user -p
الآن أنشئ قاعدة بيانات باسم tablesDB
:
mysql> CREATE DATABASE tablesDB;
وبمجرّد إنشاء قاعدة البيانات بنجاح ستحصل على خرجٍ كالتالي:
الخرج Query OK, 1 row affected (0.01 sec)
ولاختيار قاعدة البيانات tablesDB
، نفّذ تعليمة USE
التالية:
mysql> USE tablesDB;
الخرج Database changed
وبذلك تغدو جاهزًا لتجربة الخطوات التالية من مقالنا هذا لتنطلق في تعلّم كيفية إنشاء وإدارة الجداول في SQL.
إنشاء الجداول
لإنشاء جدول في SQL، استخدم الأمر CREATE TABLE
متبوعًا بالاسم الذي ترغب بتسمية الجدول به:
mysql> CREATE TABLE table_name;
وكما هو الحال مع كل تعليمات SQL، انتبه إلى وجوب انتهاء تعليمات CREATE TABLE
برمز الفاصلة المنقوطة ;
.
تُنشئ الصيغة في المثال السابق جدولًا فارغًا بدون أي أعمدة. أمّا لإنشاء جدول يتضمّن أعمدة محددة، فيجب أن نُتبع اسم الجدول بقائمة تتضمن أسماء الأعمدة وأنماط البيانات الموافقة لكل منها والقيود المتعلقة بها، محصورةً بين أقواس هلالية ومفصولة برمز الفاصلة، على النحو التالي:
mysql> CREATE TABLE table_name ( mysql> column1_name column1_data_type, mysql> column2_name column2_data_type, mysql> . . . mysql> columnN_name columnN_data_type mysql> );
كمثال، لنفترض أنك ترغب بإنشاء جدول لتسجيل بعض المعلومات حول المنتزهات التي تفضلها في مدينة نيويورك. فبعد اتخاذ قرار بشأن السمات التي تود تسجيلها حول كل منتزه، ستحدّد أسماء الأعمدة لكل من تلك السمات وكذلك نمط البيانات المناسب لكل منها:
-
parkName
: اسم كل منتزه. ونظرًا لوجود تباين واسع في أطوال أسماء المنتزهات، سيكون استخدام نمط البياناتvarchar
بطول أعظمي يبلغ30
محرفًا مناسبًا. -
yearBuilt
: السنة التي بُني فيها المنتزه. على الرغم من أنّ MySQL تتضمّن نمط بيانات يُسمّىyear
(لتخزين السنوات الميلادية)، إلّا أنّه يسمح فقط بقيم تتراوح بين1901
و2155
. ولأن هناك عدة منتزهات في مدينة نيويورك بُنيت قبل عام 1901، لذلك من الأفضل استخدام نمط بيانات الأعداد الصحيحةint
كبديل. -
firstVisit
: تاريخ أول زيارة لك لكل منتزه. تتضمّن MySQL نمط بياناتdate
لتخزين التواريخ، ومن المناسب استخدامه لهذا العمود، إذ يُخزّن البيانات بالتنسيقYYYY-MM-DD
(اليوم بخانتين-الشهر بخانتين-السنة بأربع خانات). -
lastVisit
: تاريخ زيارتك الأخيرة لكل منتزه. ويمكنك هنا استخدام نمط البياناتdate
مجددًا.
ولإنشاء جدول باسم faveParks
يحتوي على أعمدة بهذه الأسماء وأنماط البيانات، نفّذ الأمر التالي:
mysql> CREATE TABLE faveParks ( mysql> parkName varchar(30), mysql> yearBuilt int, mysql> firstVisit date, mysql> lastVisit date mysql> );
الخرج Query OK, 0 rows affected (0.01 sec)
ومن الجدير بالملاحظة أن الأمر أعلاه يُنشئ هيكلية الجدول فقط، إذ أنّك لم تُضف أي بيانات إلى الجدول بعد.
كما يمكنك إنشاء جداول جديدة استنادًا إلى جداول موجودة أصلًا باستخدام الصيغة CREATE TABLE AS
على النحو التالي:
mysql> CREATE TABLE new_table_name AS ( mysql> SELECT column1, column2, . . . columnN mysql> FROM old_table_name mysql> );
فبدلًا من إلحاق اسم الجدول الجديد (new_table_name) بقائمة من أسماء الأعمدة وأنماط البيانات الموافقة، نُتبعه بتعليمه AS
ومن ثم تعليمة SELECT
بين قوسين هلاليين والتي تُرجع الأعمدة والبيانات التي نرغب في نسخها من الجدول الأصلي (old_table_name) إلى الجدول الجديد.
ومن الجدير بالملاحظة أنّه إذا كانت أعمدة الجدول الأصلي تتضمّن أي بيانات، فسيتم نسخ تلك البيانات إلى الجدول الجديد أيضًا. وللتوضيح، تشمل صيغة المثال أعلاه استعلام باستخدام SELECT
والذي يحتوي فقط على بنية FROM
المطلوبة. ولكن أي تعليمة صحيحة من تعليمات SELECT
ستعمل على نحوٍ سليم في هذا المكان.
ولمزيد من التوضيح، يُنشئ الأمر التالي جدولًا باسم parkInfo
من خلال استخدام عمودين من الجدول faveParks
المُنشأ سابقًا:
mysql> CREATE TABLE parkInfo AS ( mysql> SELECT parkName, yearBuilt mysql> FROM faveParks mysql> );
الخرج Query OK, 0 rows affected (0.02 sec) Records: 0 Duplicates: 0 Warnings: 0
فإذا كان الجدول faveParks
يحتوي على أي بيانات، فستنسخ البيانات الموجودة في أعمدة parkName
وyearBuilt
إلى جدول parkInfo
أيضًا. ولكن في حالتنا، كلا الجدولين سيكون فارغًا.
أمّا إذا حاولت إنشاء جدول مُستخدمًا اسم جدول موجود مُسبقًا من خلال التعليمات التالية:
mysql> CREATE TABLE parkInfo ( mysql> name varchar(30), mysql> squareFootage int, mysql> designer varchar(30) mysql> );
الخرج ERROR 1050 (42S01): Table 'parkInfo' already exists
فسيؤدي ذلك إلى وقوع خطأ يشير إلى أنّ الاسم parkinfo
موجود أصلًا.
ولتجنب هذا الخطأ، يمكنك إضافة الخيار IF NOT EXISTS
ضمن أمر CREATE TABLE
الخاص بك. إذ سيُخبر هذا الخيار قاعدة البيانات بالتحقق من وجود جدول موجود مسبقًا بنفس الاسم المحدد، ففي حال كان موجودًا، سيظهر تحذير بدلًا من رسالة الخطأ.
mysql> CREATE TABLE IF NOT EXISTS parkInfo ( mysql> name varchar(30), mysql> squareFootage int, mysql> designer varchar(30) mysql> );
الخرج Query OK, 0 rows affected, 1 warning (0.00 sec)
سيفشل هذا الأمر في إنشاء جدول جديد، إذ أنّ الجدول بالاسم parkInfo
ما زال موجودًا أصلًا. ولكن نلاحظ أن الخرج يشير إلى كون تعليمة CREATE TABLE
أدت إلى ظهور تحذير. ولعرض رسالة التحذير، نفّذ الأمر التشخيصي SHOW WARNINGS
كالتالي:
mysql> SHOW WARNINGS;
الخرج | Level | Code | Message | +-------+------+---------------------------------+ | Note | 1050 | Table 'parkInfo' already exists | +-------+------+---------------------------------+ 1 row in set (0.00 sec)
وكما يشير هذا الخرج، فقد سُجّل نفس الخطأ الذي تلقيته سابقًا على أنه تحذير، ذلك لأنك قد ضمّنت الخيار IF NOT EXISTS
. وهذا الأمر قد يكون مفيدًا في بعض الحالات، كما هو الحال عند تنفيذ المعاملات Transactions التي تمثل سلسلة من عمليات SQL تُجرى على قاعدة بيانات وتعامل كما لو كانت عملية واحدة، بحيث إما أن تُنفَّذ جميعها أو لا تنفذ بأكملها، في حين يشير التحذير إلى فشل التعليمة الذي تسببت به فقط.
تعديل الجداول
قد تضطر في بعض الحالات إلى تغيير تعريف جدول معين وهذا الأمر مختلف عن تحديث البيانات ضمن الجدول فهو يعني تغيير هيكلية الجدول نفسه. وللقيام بذلك، يمكنك استخدام الصيغة ALTER TABLE
على النحو التالي:
mysql> ALTER TABLE table_name ALTER_OPTION sub_options . . . ;
وبعد تضمين تعليمة ALTER TABLE
، حدّد اسم الجدول الذي تود تعديله. ومن ثم مرّر الخيارات المتاحة بناءً على نظام إدارة قواعد البيانات الخاص بك لإجراء التعديل المطلوب.
على سبيل المثال، قد ترغب في تغيير اسم الجدول أو إضافة عمود جديد أو حذف عمود قديم أو تغيير تعريف أحد الأعمدة.
لنطبق بعض الأمثلة على جدول المنتزهات المُفضّلة faveParks
الذي أنشأناه سابقًا في قسم إنشاء الجداول لمزيد من التدريب على كتابة تعليمات التعامل مع الجداول.
لتغيير اسم الجدول faveParks
، يمكنك استخدام صيغة RENAME TO
. يغير المثال التالي اسم جدول faveParks
إلى faveNYCParks
:
تحذير: كن حذرًا عند تغيير اسم جدول. فالقيام بذلك قد يسبب مشكلات في حال كان هناك تطبيق يستخدم الجدول أو إذا كانت هناك جداول أخرى في قاعدة البيانات تشير إليه.
mysql> ALTER TABLE faveParks RENAME TO faveNYCParks;
الخرج Query OK, 0 rows affected (0.01 sec)
لإضافة عمود جديد للجدول، استخدم الخيار ADD COLUMN
. يضيف المثال التالي عمود بالاسم borough
، والذي يُخزّن بيانات من النمط varchar
، ولكن بطول أقصى يبلغ 20
محرفًا إلى الجدول faveNYCParks
:
mysql> ALTER TABLE faveNYCParks ADD COLUMN borough varchar(20);
الخرج Query OK, 0 rows affected (0.01 sec) Records: 0 Duplicates: 0 Warnings: 0
لحذف عمود من جدول مع أي بيانات يحتوي عليها، يمكنك استخدام الصيغة DROP TABLE
. يحذف الأمر في المثال التالي العمود borough
:
mysql> ALTER TABLE faveNYCParks DROP COLUMN borough;
تسمح العديد من تقديمات SQL بتغيير تعريف العمود باستخدام الصيغة ALTER TABLE
. ويستخدم المثال التالي بنية MODIFY COLUMN
في MySQL، إذ يقوم بتغيير العمود yearBuilt
لاستخدام بيانات من النمط smallint
بدلًا من النمط int
الأصلي:
mysql> ALTER TABLE faveNYCParks MODIFY COLUMN yearBuilt smallint;
ومما يجب أخذه في الحسبان أنّ كل نظام إدارة قواعد بيانات يتضمّن خيارات مختلفة بخصوص ما يمكنك تغييره باستخدام تعليمة ALTER TABLE
. ولتحقيق فهمٍ كامل حول ما يمكنك تنفيذه باستخدام ALTER TABLE
, راجع التوثيق الرسمي لنظام إدارة قواعد البيانات الذي تستخدمه لمعرفة الخيارات المتاحة للتعليمة.
إليك التوثيق الرسمي حول هذا الموضوع لبعضٍ من أشهر قواعد البيانات مفتوحة المصدر:
حذف الجداول
لحذف جدول وجميع البيانات الموجودة فيه، استخدم الصيغة DROP TABLE
:
تحذير: كن حذرًا عند تنفيذ الأمر DROP TABLE
، إذ سيقوم بحذف الجدول وجميع بياناته نهائيًا.
mysql> DROP TABLE table_name;
كما يمكنك حذف عدة جداول باستخدام تعليمة DROP
واحدة وذلك بفصل أسماء الجداول برمز فاصلة ومحرف مسافة، كما في المثال التالي:
mysql> DROP TABLE table1, table2, table3;
للتوضيح، سيحذف الأمر التالي كل من جدولي faveNYCParks
و parkInfo
المُنشأين سابقًا في هذا المقال:
mysql> DROP TABLE IF EXISTS faveNYCParks, parkInfo;
لاحظ أن هذا المثال يتضمن الخيار IF EXISTS
، والذي يؤدي الوظيفة المعاكسة لخيار IF NOT EXISTS
المتاح لأمر إنشاء الجداول CREATE TABLE
. إذ سيجعل خيار IF EXISTS
تعليمة DROP TABLE
تعيد تحذيرًا بدلًا من رسالة خطأ في حال لم يكن أحد الجداول المُحدّدة موجودًا.
الخلاصة
تعلمت في هذا المقال كيفية إنشاء وتغيير وحذف الجداول في قواعد البيانات المبنية على SQL. ومن الجدير بالذكر أن الأوامر التي شرحناها هنا يجب أن تعمل على أي نظام لإدارة قواعد البيانات يستخدم SQL. لكن عليك مراعاة أن كل قاعدة بيانات SQL تستخدم تقديمًا فريدًا للّغة، لذلك يُفضّل الرجوع إلى التوثيقات الرسمية لنظام إدارة قواعد البيانات الخاص بك للحصول على توصيف أدق لكل أمر والخيارات المتاحة.
للمزيد حول كيفية التعامل مع SQL، ننصحك بالاطلاع على سلسلة تعلم SQL في أكاديمية حسوب.
ترجمة -وبتصرف- للمقال How To Create and Manage Tables in SQL لصاحبه Mark Drake.
أفضل التعليقات
لا توجد أية تعليقات بعد
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.