MYSQL – ALTER، DROP، RENAME، MODIFY

⚡ ملخص ذكي

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

  • 🛠️ أمر ALTER: يقوم الأمر ALTER TABLE بإعادة تعريف كائن موجود بالفعل، بحيث يستوعب المخطط الحي المتطلبات الجديدة دون إعادة بناء.
  • ➕ إضافة عمود: يقوم الأمر ALTER TABLE ADD COLUMN بإضافة حقل، وتحتفظ الصفوف الموجودة بكل القيم التي كانت تحملها بالفعل.
  • 🗑️ أمر الإسقاط: يؤدي الأمر DROP إلى حذف قاعدة بيانات أو جدول أو عمود واحد بشكل دائم من خلال الأمر ALTER TABLE DROP COLUMN.
  • 🔁 أمر إعادة التسمية: لا يؤدي الأمر RENAME TABLE إلا إلى تغيير اسم الجدول فقط، ولا يتم فقدان أي بيانات بداخله.
  • ✏️ كلمة مفتاحية للتغيير: تقوم عبارة CHANGE بإعادة تسمية عمود وإعادة تعريف نوعه وقيوده في عبارة واحدة، لذلك يلزم ذكر اسمي العمودين.
  • 🧩 تعديل الكلمة المفتاحية: يُغيّر الأمر MODIFY النوع والقيود مع الحفاظ علىping الاسم، الخيار الأكثر أمانًا للتعديل النصي فقط.
  • 📍 كلمة مفتاحية بعد: تقوم الدالة AFTER بوضع العمود المضاف حديثًا في موضع محدد بدلاً من وضعه في نهاية الجدول.

MySQL ALTER، DROP، RENAME، وMODIFY

ما هو أمر 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 عنصرًا بشكل دائم. ويُستخدم لـ

  1. حذف قاعدة بيانات من MySQL الخادم.
  2. حذف عنصر مثل جدول أو عمود من قاعدة البيانات.

⚠️ تحذير: عملية الحذف (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 ما يلي:

  1. تغيير اسم عمود
  2. قم بتغيير نوع بيانات العمود
  3. قم بتغيير قيود الأعمدة

لنأخذ مثالاً. حقل full_names في جدول الأعضاء هو من نوع بيانات varchar بعرض 350، كما يؤكد البرنامج النصي أدناه.

SHOW COLUMNS FROM `members`;
الحقل النوع فارغة القفل الترتيب إكسترا
رقم العضوية الباحث (11) لا PRI اغية زيادة تلقائية
الأسماء الكاملة varchar(350) لا اغية
جنس varchar(6) نعم اغية
تاريخ الميلاد تاريخ نعم اغية
العنوان الفعلي varchar(255) نعم اغية
العنوان البريدي varchar(255) نعم اغية
رقم الاتصال varchar(75) نعم اغية
البريد الإلكتروني varchar(255) نعم اغية

لنفترض أن المطلوب هو

  1. غيّر اسم الحقل من "full_names" إلى "fullname"
  2. قم بتغييره إلى نوع بيانات char بعرض 250
  3. أضف قيد 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 ما يلي:

  1. قم بتعديل نوع بيانات العمود
  2. قم بتعديل قيود العمود

في مثال التغيير أعلاه، كان يجب توفير اسم الحقل مرتين، على الرغم من أن إعادة التسمية كانت جزءًا فقط من الهدف. يؤدي حذف اسم الحقل من عبارة 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 بنفس الطريقة، حيث تنقل العمود الجديد إلى بداية الجدول.

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

لا. عبارات DDL مثل ALTER وDROP وRENAME تُنفذ ضمنيًا في MySQLلذا، لا يمكن للمعاملات المفتوحة التراجع عنها. والاستعادة من نسخة احتياطية هي السبيل الوحيد للعودة.

يعتمد ذلك على نوع التغيير. تُنفَّذ العديد من تعديلات InnoDB عبر الإنترنت وتسمح بعمليات قراءة وكتابة متزامنة، بينما تقوم تعديلات أخرى بنسخ الجدول بأكمله ومنع عمليات الكتابة. أضف عبارات ALGORITHM وLOCK لتحديد ما ستقبله.

يقوم الأمر DROP بإزالة الكائن نفسه. أما الأمر TRUNCATE فيفرغ الجدول مع الحفاظ على بنيته. حذف يزيل الصفوف المحددة ويمكن تصفيتها باستخدام عبارة WHERE.

نعم، عادةً. مساعدو الذكاء الاصطناعي المدمجون في برامج مثل MySQL طاولة العمل قم بتحويل طلب مثل "إضافة عمود تاريخ قابل للتصفير بعد تاريخ الميلاد" إلى صيغة صحيحة. Revقم بمراجعة العبارة المُنشأة مقابل المخطط الفعلي قبل تشغيلها.

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

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