في المقالة دي، هنشرح كل استخدامات 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