MYSQL – ALTER، DROP، RENAME، MODIFY
⚡ ملخص ذكي
ALTER وDROP وRENAME وMODIFY هي MySQL أوامر تُعيد تشكيل قاعدة البيانات بعد استخدامها. فهي تُضيف وتُزيل وتُعيد تسمية وتُعيد تعريف الكائنات مثل الجداول والأعمدة دون حذف الصفوف المخزنة مسبقًا.

ما هو أمر ALTER في MySQL?
استخدم ALTER يُستخدم هذا الأمر لتعديل قاعدة بيانات أو جدول أو عرض أو أي عنصر آخر في قاعدة البيانات يحتاج إلى تغيير خلال دورة حياة قاعدة البيانات. وهو الأمر الذي يسمح بتطوير مخطط قاعدة البيانات بعد إنشائه وتعبئته بالبيانات.
نادراً ما تبقى متطلبات العمل ثابتة، ولذا يجب أن يتطور تصميم قاعدة البيانات تبعاً لها. لنفترض أن تصميم قاعدة بيانات Myflix قد تم تنفيذه وبدأ المستخدمون بالعمل عليها، وعندها فقط يدرك الفريق أن معلومات حيوية قد فُقدت. لا أحد يرغب في فقدان البيانات الموجودة؛ بل يريدون ببساطة تسجيل المعلومات الجديدة بجانبها.
يُغطي أمر ALTER هذه الحالة تحديداً. فهو يُمكنه تغيير نوع بيانات حقل من سلسلة نصية إلى رقم، أو إعادة تسمية حقل، أو إضافة عمود جديد بالكامل إلى جدول، كل ذلك مع الحفاظ على البيانات المخزنة في الجدول سليمة.
بعد تحديد الغرض من الأمر، تتمثل الخطوة التالية في صياغة الصيغة التي تنفذه.
MySQL صيغة ALTER
يتم عرض الصيغة الأساسية المستخدمة لإضافة عمود إلى جدول موجود بالفعل أدناه.
ALTER TABLE `table_name` ADD COLUMN `column_name` `data_type`;
هنا
- ""تغيير الجدول `اسم_الجدول`" هو الأمر الذي يقول MySQL الخادم لتعديل الجدول المسمى "اسم_الجدول".
- "أضف عمودًا `اسم_العمود` `نوع_البيانات`" هو الأمر الذي يقول MySQL الخادم لإضافة عمود جديد باسم `column_name` بنوع البيانات `data_type`.
لنفترض أن Myflix قد أطلقت خدمة الفوترة والدفع الإلكتروني. لدعم هذه الخدمة، يجب إضافة حقل لرقم بطاقة الائتمان إلى جدول الأعضاء. قبل إجراء أي تعديل، من المفيد مراجعة بنية الجدول الحالية. يقوم البرنامج النصي الموضح أدناه بذلك.
SHOW COLUMNS FROM `members`;
| الحقل | النوع | فارغة | القفل | الترتيب | إكسترا |
|---|---|---|---|---|---|
| رقم العضوية | الباحث (11) | لا | PRI | اغية | زيادة تلقائية |
| الأسماء الكاملة | varchar(350) | لا | اغية | ||
| جنس | varchar(6) | نعم | اغية | ||
| تاريخ الميلاد | تاريخ | نعم | اغية | ||
| العنوان الفعلي | varchar(255) | نعم | اغية | ||
| العنوان البريدي | varchar(255) | نعم | اغية | ||
| رقم الاتصال | varchar(75) | نعم | اغية | ||
| البريد الإلكتروني | varchar(255) | نعم | اغية |
💡 ملاحظة حول int(11): الرقم الموجود بين قوسين هو مجرد عرض الشاشة. MySQL في الإصدار 8.0.17، تم إيقاف هذه الخاصية لأنواع الأعداد الصحيحة، لذا يقوم الخادم الحديث بالإبلاغ عن هذا العمود ببساطة على النحو التالي: مادباحجم التخزين لم يتغير.
يضيف النص البرمجي الموضح أدناه الحقل الجديد إلى جدول الأعضاء.
ALTER TABLE `members` ADD COLUMN `credit_card_number` VARCHAR(25);
يؤدي تنفيذ هذا البرنامج النصي على قاعدة بيانات myflixdb إلى إضافة عمود باسم credit_card_number إلى جدول الأعضاء، بنوع بيانات VARCHAR. ويعطي تشغيل البرنامج النصي SHOW COLUMNS مرة أخرى النتيجة التالية.
| الحقل | النوع | فارغة | القفل | الترتيب | إكسترا |
|---|---|---|---|---|---|
| رقم العضوية | الباحث (11) | لا | PRI | اغية | زيادة تلقائية |
| الأسماء الكاملة | varchar(350) | لا | اغية | ||
| جنس | varchar(6) | نعم | اغية | ||
| تاريخ الميلاد | تاريخ | نعم | اغية | ||
| العنوان الفعلي | varchar(255) | نعم | اغية | ||
| العنوان البريدي | varchar(255) | نعم | اغية | ||
| رقم الاتصال | varchar(75) | نعم | اغية | ||
| البريد الإلكتروني | varchar(255) | نعم | اغية | ||
| رقم البطاقة الائتمانية | varchar(25) | نعم | اغية |
يؤكد الصف المميز أنه تمت إضافة رقم بطاقة الائتمان إلى جدول الأعضاء، وأن البيانات الموجودة بالفعل في الأعمدة الأخرى لم تتأثر بهذه الإضافة.
إضافة عمود ليست سوى نصف الحكاية. يجب على المخطط أيضاً التخلص من العناصر التي لم يعد بحاجة إليها، وهذه هي مهمة أمر DROP.
ما هو أمر DROP في MySQL?
يحذف الأمر DROP عنصرًا بشكل دائم. ويُستخدم لـ
- حذف قاعدة بيانات من MySQL الخادم.
- حذف عنصر مثل جدول أو عمود من قاعدة البيانات.
⚠️ تحذير: عملية الحذف (DROP) غير قابلة للعكس. لا يمكن استعادة الكائن ولا الصفوف الموجودة بداخله بدون نسخة احتياطية، لذا قم بتشغيل استعلام SELECT على الهدف وتأكد من وجود نسخة احتياطية أولاً.
قطرةping عمود
في مثال ALTER أعلاه، تمت إضافة عمود باسم credit_card_number إلى جدول الأعضاء. لنفترض أن ميزة الفوترة الإلكترونية قد تم تأجيلها، ويجب إزالة هذا العمود مرة أخرى. يقوم البرنامج النصي التالي بذلك.
ALTER TABLE `members` DROP COLUMN `credit_card_number`;
يؤدي تنفيذ البرنامج النصي إلى حذف عمود "رقم بطاقة الائتمان" من جدول الأعضاء. وتؤكد إعادة عرض الأعمدة النتيجة.
SHOW COLUMNS FROM `members`;
| الحقل | النوع | فارغة | القفل | الترتيب | إكسترا |
|---|---|---|---|---|---|
| رقم العضوية | الباحث (11) | لا | PRI | اغية | زيادة تلقائية |
| الأسماء الكاملة | varchar(350) | لا | اغية | ||
| جنس | varchar(6) | نعم | اغية | ||
| تاريخ الميلاد | تاريخ | نعم | اغية | ||
| العنوان الفعلي | varchar(255) | نعم | اغية | ||
| العنوان البريدي | varchar(255) | نعم | اغية | ||
| رقم الاتصال | varchar(75) | نعم | اغية | ||
| البريد الإلكتروني | varchar(255) | نعم | اغية |
تم حذف رقم بطاقة الائتمان من قائمة الحقول.
انخفاض الجدول
صيغة حذف جدول كامل من قاعدة البيانات هي كما يلي.
DROP TABLE `sample_table`;
عند تطبيقها على كائن حقيقي، تبدو العبارة كالتالي.
DROP TABLE `categories_archive`;
يؤدي تنفيذه إلى حذف الجدول المسمى `categories_archive` وكل صف بداخله من قاعدة البيانات.
انخفاض قاعدة البيانات
تؤدي الكلمة المفتاحية نفسها إلى إزالة مخطط كامل. إضافة عبارة IF EXISTS تُخفي الخطأ الذي MySQL يتم رفعها عندما يكون الهدف قد اختفى بالفعل، وهو أمر مفيد داخل البرامج النصية التي يتم تشغيلها أكثر من مرة.
DROP DATABASE IF EXISTS `myflixdb_backup`;
حذف عنصر ما نهائي. أما إذا كان العنصر نفسه يجب أن يبقى، وكان اسمه فقط هو الخطأ، فإن أمر إعادة التسمية هو الأداة المناسبة.
ما هو أمر إعادة التسمية في MySQL?
يقوم الأمر RENAME بتغيير اسم كائن قاعدة بيانات موجود، مثل جدول أو عمود، إلى اسم جديد. لا يؤدي تغيير اسم الجدول إلى فقدان أي من البيانات الموجودة بداخله.
يحتوي الأمر على الصيغة الأساسية التالية.
RENAME TABLE `current_table_name` TO `new_table_name`;
لإعادة تسمية جدول movierentals إلى movie_rentals، يتم استخدام البرنامج النصي أدناه.
RENAME TABLE `movierentals` TO `movie_rentals`;
يؤدي تنفيذ هذا الأمر إلى إعادة تسمية الجدول `movierentals` إلى `movie_rentals`. ولأن إعادة التسمية هي مجرد تغيير في التسمية، فإن عكس نفس الأمر يعيد الاسم الأصلي.
RENAME TABLE `movie_rentals` TO `movierentals`;
يُستخدم الأمر RENAME TABLE لتغيير اسم الجدول. عمودوتغيير ما يحتويه هو عمل الكلمة المفتاحية "التغيير".
كلمة مفتاحية للتغيير
تتيح لك الكلمة المفتاحية CHANGE ما يلي:
- تغيير اسم عمود
- قم بتغيير نوع بيانات العمود
- قم بتغيير قيود الأعمدة
لنأخذ مثالاً. حقل full_names في جدول الأعضاء هو من نوع بيانات varchar بعرض 350، كما يؤكد البرنامج النصي أدناه.
SHOW COLUMNS FROM `members`;
| الحقل | النوع | فارغة | القفل | الترتيب | إكسترا |
|---|---|---|---|---|---|
| رقم العضوية | الباحث (11) | لا | PRI | اغية | زيادة تلقائية |
| الأسماء الكاملة | varchar(350) | لا | اغية | ||
| جنس | varchar(6) | نعم | اغية | ||
| تاريخ الميلاد | تاريخ | نعم | اغية | ||
| العنوان الفعلي | varchar(255) | نعم | اغية | ||
| العنوان البريدي | varchar(255) | نعم | اغية | ||
| رقم الاتصال | varchar(75) | نعم | اغية | ||
| البريد الإلكتروني | varchar(255) | نعم | اغية |
لنفترض أن المطلوب هو
- غيّر اسم الحقل من "full_names" إلى "fullname"
- قم بتغييره إلى نوع بيانات char بعرض 250
- أضف قيد NOT NULL
يتم تنفيذ التعديلات الثلاثة جميعها بواسطة عبارة تغيير واحدة.
ALTER TABLE `members` CHANGE COLUMN `full_names` `fullname` char(250) NOT NULL;
يؤدي تنفيذه على myflixdb ثم تشغيل برنامج SHOW COLUMNS النصي إلى النتيجة التالية.
| الحقل | النوع | فارغة | القفل | الترتيب | إكسترا |
|---|---|---|---|---|---|
| رقم العضوية | الباحث (11) | لا | PRI | اغية | زيادة تلقائية |
| الاسم الكامل | شار (250) | لا | اغية | ||
| جنس | varchar(6) | نعم | اغية | ||
| تاريخ الميلاد | تاريخ | نعم | اغية | ||
| العنوان الفعلي | varchar(255) | نعم | اغية | ||
| العنوان البريدي | varchar(255) | نعم | اغية | ||
| رقم الاتصال | varchar(75) | نعم | اغية | ||
| البريد الإلكتروني | varchar(255) | نعم | اغية |
يُطلق على العمود الآن اسم الاسم الكامل، ويحتوي على char(250)، ويرفض القيم الفارغة (NULL).
تعديل الكلمة الرئيسية
تتيح لك الكلمة المفتاحية MODIFY ما يلي:
- قم بتعديل نوع بيانات العمود
- قم بتعديل قيود العمود
في مثال التغيير أعلاه، كان يجب توفير اسم الحقل مرتين، على الرغم من أن إعادة التسمية كانت جزءًا فقط من الهدف. يؤدي حذف اسم الحقل من عبارة CHANGE إلى حدوث خطأ. عندما يكون نوع البيانات والقيود فقط هي التي تحتاج إلى تعديل، ويجب أن يبقى الاسم كما هو، فإن MODIFY يقوم بالمهمة بمجرد ذكر العمود.
يقوم النص البرمجي أدناه بتغيير عرض حقل "الاسم الكامل" من 250 إلى 50.
ALTER TABLE `members` MODIFY `fullname` char(50) NOT NULL;
يؤدي تنفيذه على myflixdb ثم تشغيل برنامج SHOW COLUMNS النصي إلى النتيجة الموضحة أدناه.
| الحقل | النوع | فارغة | القفل | الترتيب | إكسترا |
|---|---|---|---|---|---|
| رقم العضوية | الباحث (11) | لا | PRI | اغية | زيادة تلقائية |
| الاسم الكامل | شار (50) | لا | اغية | ||
| جنس | varchar(6) | نعم | اغية | ||
| تاريخ الميلاد | تاريخ | نعم | اغية | ||
| العنوان الفعلي | varchar(255) | نعم | اغية | ||
| العنوان البريدي | varchar(255) | نعم | اغية | ||
| رقم الاتصال | varchar(75) | نعم | اغية | ||
| البريد الإلكتروني | varchar(255) | نعم | اغية |
⚠️ تحذير: يؤدي تضييق عمود إلى اقتطاع البيانات التي لم تعد تتسع له. أي اسم يزيد طوله عن 50 حرفًا يتم اقتطاعه بواسطة هذه العبارة، لذا تحقق من أطول قيمة موجودة باستخدام اختر استعلم قبل تقليص حجم الحقل.
تغيير مقابل تعديل مقابل إعادة تسمية العمود
تتداخل الكلمات المفتاحية الثلاث، ويُعدّ اختيار الكلمة الخاطئة المصدر الأكثر شيوعًا للأخطاء في هذا المجال. يوضح الجدول أدناه كيفية عرضها جنبًا إلى جنب.
| البحث عن كلمة | إعادة تسمية العمود | يُغير النوع والقيود | الاسم القديم مطلوب | الاستخدام النموذجي |
|---|---|---|---|---|
| تغيير | نعم | نعم | نعم، بالإضافة إلى الاسم الجديد | إعادة التسمية وإعادة التعريف في عبارة واحدة |
| تعديل | لا | نعم | الاسم يُعطى مرة واحدة | قم بتوسيع أو تضييق أو إعادة كتابة عمود |
| إعادة تسمية العمود | نعم | لا | نعم، بالإضافة إلى الاسم الجديد | إعادة تسمية فقط، من MySQL 8.0 فصاعدا |
MySQL أضاف الإصدار 8.0 خيارًا رابعًا لأبسط الحالات، وهو إعادة التسمية بدون إعادة تعريف على الإطلاق.
ALTER TABLE `members` RENAME COLUMN `fullname` TO `full_name`;
تم تحديد النوع والاسم. السؤال المتبقي هو مكان العمود الجديد في الجدول، والذي تتحكم فيه الكلمة المفتاحية AFTER.
كلمة مفتاحية بعد
بشكل افتراضي، يُضاف العمود باستخدام أمر ALTER TABLE في نهاية الجدول. ولتحديد موضعه، يُستخدم أمر ALTER مع الكلمة المفتاحية AFTER.
يضيف النص البرمجي أدناه "date_of_registration" مباشرة بعد date_of_birth في جدول الأعضاء.
ALTER TABLE `members` ADD `date_of_registration` date NULL AFTER `date_of_birth`;
يؤدي تنفيذه على myflixdb ثم تشغيل برنامج SHOW COLUMNS النصي إلى النتيجة الموضحة أدناه.
| الحقل | النوع | فارغة | القفل | الترتيب | إكسترا |
|---|---|---|---|---|---|
| رقم العضوية | الباحث (11) | لا | PRI | اغية | زيادة تلقائية |
| الاسم الكامل | شار (50) | لا | اغية | ||
| جنس | varchar(6) | نعم | اغية | ||
| تاريخ الميلاد | تاريخ | نعم | اغية | ||
| تاريخ التسجيل | تاريخ | نعم | اغية | ||
| العنوان الفعلي | varchar(255) | نعم | اغية | ||
| العنوان البريدي | varchar(255) | نعم | اغية | ||
| رقم الاتصال | varchar(75) | نعم | اغية | ||
| البريد الإلكتروني | varchar(255) | نعم | اغية |
الصف المظلل هو العمود المضاف بعد عمود تاريخ الميلاد. تعمل الكلمة المفتاحية FIRST بنفس الطريقة، حيث تنقل العمود الجديد إلى بداية الجدول.
