Also Like

📁 last Posts

MySQL ALTER Statement Explained

في المقالة دي، هنشرح كل استخدامات ALTER في MySQL بالتفصيل مع أمثلة عملية وتحذيرات مهمة.


1. تغيير اسم الجدول

عشان تغيّر اسم جدول في MySQL:

ALTER TABLE Table1 RENAME TO Table2;

الشرح:

  • الكود دا بيغيّر اسم الجدول من Table1 لـ Table2.

تحذير:

  • لو الجدول مستخدم في قيود (زي Foreign Key) من جداول تانية، لازم تتأكد إنك بتعمل تعديل على الروابط دي.
  • اتأكد إن الاسم الجديد (Table2) مش موجود بالفعل في قاعدة البيانات عشان تتجنب خطأ "Table already exists".

2. إضافة عمود جديد

عشان تضيف عمود جديد لجدول:

ALTER TABLE Table1 ADD lastname VARCHAR(50);

الشرح:

  • الكود دا بيضيف عمود جديد اسمه lastname للجدول Table1، ونوعه VARCHAR(50) (يعني نص بحد أقصى 50 حرف).
  • في MySQL، كلمة COLUMN اختيارية، يعني ممكن تكتب:
ALTER TABLE Table1 ADD COLUMN lastname VARCHAR(50);

الاتنين نفس النتيجة.

إضافة قيد مع العمود:

لو عايز تضيف قيد زي UNIQUE:

ALTER TABLE Table1 ADD lastname VARCHAR(50) UNIQUE;

تحذير:

  • لو الجدول فيه بيانات بالفعل، العمود الجديد هيتراكم بقيم NULL (إلا لو حددت قيمة افتراضية).
  • لو حطيت قيد NOT NULL وفيه بيانات موجودة، هيطلعلك خطأ إلا لو ضفت قيمة افتراضية:
ALTER TABLE Table1 ADD lastname VARCHAR(50) NOT NULL DEFAULT '';

3. حذف عمود معين

عشان تحذف عمود من جدول:

ALTER TABLE Customers DROP COLUMN Email;

الشرح:

  • الكود دا بيشيل عمود اسمه Email من جدول Customers.

تحذير:

  • لو العمود مستخدم في قيود (زي Foreign Key أو Primary Key)، لازم تشيل القيود دي الأول وإلا هيطلعلك خطأ.
  • البيانات الموجودة في العمود هتتمسح نهائيًا، فاتأكد إنك مش محتاجها.

4. تغيير اسم عمود

عشان تغيّر اسم عمود في MySQL:

ALTER TABLE Table1 RENAME COLUMN column_name TO new_name;

الشرح:

  • الكود دا بيغيّر اسم العمود من column_name لـ new_name في الجدول Table1.

5. تغيير نوع البيانات أو القيود

عشان تغيّر الـ Data Type أو القيود لعمود:

ALTER TABLE Table1 MODIFY COLUMN lastname VARCHAR(100);

الشرح:

  • الكود دا بيغيّر نوع العمود lastname من VARCHAR(50) (مثلاً) لـ VARCHAR(100).

إضافة قيد:

لو عايز تضيف قيد زي NOT NULL:

ALTER TABLE Table1 MODIFY COLUMN lastname VARCHAR(100) NOT NULL;

تحذير:

  • لو غيّرت الـ Data Type (مثلاً من VARCHAR لـ INT) والبيانات الموجودة مش متوافقة مع النوع الجديد، هيطلعلك خطأ أو ممكن البيانات تتحوّل بشكل غير متوقع.
  • لو العمود فيه بيانات وأضفت قيد NOT NULL، لازم تتأكد إن مفيش قيم NULL وإلا هيطلعلك خطأ.

6. إضافة Primary Key

عشان تضيف Primary Key:

ALTER TABLE Table1 ADD CONSTRAINT pk_table1 PRIMARY KEY (id);

الشرح:

  • الكود دا بيضيف Primary Key على العمود id في الجدول Table1.

تحذير:

  • العمود لازم يكون خالي من التكرار والقيم الفاضية (NULL) وإلا هيطلعلك خطأ.

7. حذف Primary Key

عشان تحذف Primary Key:

ALTER TABLE Table1 DROP PRIMARY KEY;

تحذير:

  • لو فيه قيود Foreign Key مرتبطة بالـ Primary Key دا، لازم تشيل الـ Foreign Key الأول.
  • في MySQL، لو فيه AUTO_INCREMENT على العمود، مش هيتحذف تلقائيًا، لازم تشيله بنفسك لو عايز:
ALTER TABLE Table1 MODIFY COLUMN id INT;

8. إضافة Foreign Key

عشان تضيف Foreign Key:

ALTER TABLE Orders ADD CONSTRAINT fk_customer FOREIGN KEY (customer_id) REFERENCES Customers(id);

الشرح:

  • الكود دا بيضيف Foreign Key على العمود customer_id في جدول Orders ويربطه بالعمود id في جدول Customers.

تحذير:

  • العمود customer_id لازم يكون قيمته موجودة في العمود id في جدول Customers وإلا هيطلعلك خطأ.
  • العمود المرجعي (id في Customers) لازم يكون Primary Key أو عليه قيد UNIQUE.

9. حذف Foreign Key

عشان تحذف Foreign Key:

ALTER TABLE Orders DROP FOREIGN KEY fk_customer;

10. إضافة قيد Unique

عشان تضيف قيد UNIQUE:

ALTER TABLE Table1 ADD CONSTRAINT unique_email UNIQUE (email);

تحذير:

  • لو فيه تكرار في العمود email بالفعل، هيطلعلك خطأ "Duplicate entry".

11. حذف قيد Unique

عشان تحذف قيد UNIQUE:

ALTER TABLE Table1 DROP INDEX unique_email;

OR

ALTER TABLE Table1 DROP CONSTRAINT unique_email;

12. إضافة قيد Check

عشان تضيف قيد CHECK:

ALTER TABLE Table1 ADD CONSTRAINT check_age CHECK (age >= 18);

تحذير:

  • لو فيه بيانات موجودة مش بتطابق الشرط (مثلاً age < 18)، هيطلعلك خطأ.

13. حذف قيد Check

عشان تحذف قيد CHECK:

ALTER TABLE Table1 DROP CHECK check_age;

OR

ALTER TABLE Table1 DROP CONSTRAINT check_age;

14. إضافة قيد Default

عشان تضيف قيمة افتراضية:

ALTER TABLE Table1 MODIFY COLUMN status VARCHAR(20) DEFAULT 'active';

تحذير:

  • القيمة الافتراضية هتتطبق على السجلات الجديدة فقط، مش هتغيّر البيانات القديمة.

15. حذف قيد Default

عشان تشيل قيمة افتراضية:

ALTER TABLE Table1 ALTER COLUMN status DROP DEFAULT;

OR

ALTER TABLE Table1 MODIFY COLUMN status VARCHAR(20) ;
Comments