MySQL: الدليل الشامل لتعديل هياكل جداول MySQL

آخر تحديث: 2026-08-26

هياكل الجداول ليست ثابتة — فعندما تتغير احتياجات العمل، يكون ALTER TABLE هو المنقذ الذي تحتاجه.

يقدم هذا الدرس شرحًا منهجيًّا لجميع العمليات المتعلقة بتعديل هياكل الجداول.

100%
graph TB
    A[ALTER TABLE Operation] --> B[ADD COLUMN<br/>Add Field]
    A --> C[DROP COLUMN<br/>Delete Field]
    A --> D[MODIFY<br/>Modification Type/Constraints]
    A --> E[CHANGE<br/>Rename Field]
    A --> F[RENAME<br/>Modify Table Name]
    A --> G[AUTO_INCREMENT<br/>Auto-increment Settings]
    A --> H[ADD/DROP CONSTRAINT<br/>Constraint Management]

1. ما ستتعلمه



2. قصة حقيقية عن تغيير في المتطلبات

(1) المشكلة: الاحتياجات المتغيرة

قال مدير المنتج:

"أضف حقلًا باسم 'رقم الهاتف المحمول' إلى جدول المستخدمين، وقم بتغيير طول اسم المستخدم من 50 إلى 100."

إذا كنت لا تعرف كيفية استخدام ALTER TABLE، فإن خيارك الوحيد هو حذف الجدول وإعادة إنشائه — مما سيؤدي إلى فقدان جميع البيانات.

(2) حلول لـ ALTER TABLE

SQL
-- Add a mobile phone number field
ALTER TABLE users ADD COLUMN phone VARCHAR(20);

-- Change the username length
ALTER TABLE users MODIFY COLUMN username VARCHAR(100) NOT NULL;

المزايا: لا يحدث أي فقدان للبيانات، وتتم العملية في ثوانٍ معدودة.



3. إضافة حقل

▶ مثال: إضافة عمود

SQL
-- Add a Single Field
ALTER TABLE users ADD COLUMN phone VARCHAR(20);

-- Add a field and specify its position
ALTER TABLE users ADD COLUMN avatar VARCHAR(255) AFTER username;

-- Add to the beginning of the table
ALTER TABLE users ADD COLUMN uuid CHAR(36) FIRST;

-- Add Multiple Fields
ALTER TABLE users 
ADD COLUMN address VARCHAR(200),
ADD COLUMN city VARCHAR(50),
ADD COLUMN country VARCHAR(50) DEFAULT 'China';
▶ جرّب الكود

الناتج:

TEXT 📖 للعرض فقط
Query OK, 0 rows affected (0.03 sec)
Records: 0  Duplicates: 0  Warnings: 0


4. حذف الحقول

▶ مثال: DROP COLUMN

SQL
-- Delete a Single Field
ALTER TABLE users DROP COLUMN phone;

-- Delete Multiple Fields
ALTER TABLE users DROP COLUMN address, DROP COLUMN city;
▶ جرّب الكود
⚠️ ملاحظة: سيؤدي حذف حقل ما إلى حذف البيانات الموجودة في ذلك العمود نهائيًا، ولن يمكن استعادتها!



5. تعديل الحقول

(1) «MODIFY» مقابل «CHANGE»

الأمر المحتوى القابل للتعديل الصيغة
تعديل النوع، القيد، الموقع MODIFY column new_type [constraints]
تغيير الاسم، النوع، القيود CHANGE old_name new_name new_type [constraints]

▶ مثال: MODIFY — تعديل النوع

SQL
-- Modify Field Type
ALTER TABLE users MODIFY COLUMN username VARCHAR(100) NOT NULL;

-- Change the field type and move it to the specified location
ALTER TABLE users MODIFY COLUMN email VARCHAR(150) FIRST;

-- Modify Field Default Values
ALTER TABLE users MODIFY COLUMN status VARCHAR(20) DEFAULT 'active';
▶ جرّب الكود

▶ مثال: CHANGE — إعادة تسمية حقل

SQL
-- Rename Field
ALTER TABLE users CHANGE COLUMN username user_name VARCHAR(100) NOT NULL;

-- Rename and Change Type
ALTER TABLE users CHANGE COLUMN phone mobile VARCHAR(30);
▶ جرّب الكود

6. إعادة تسمية جدول

▶ مثال: RENAME

SQL
-- Method 1: RENAME TO
ALTER TABLE users RENAME TO customers;

-- Method 2: RENAME TABLE
RENAME TABLE users TO customers;

-- Rename Multiple Tables at Once
RENAME TABLE 
    old_users TO users,
    old_orders TO orders;
▶ جرّب الكود

7. إعدادات AUTO_INCREMENT

▶ مثال: تكوين التزايد التلقائي

SQL
-- Create a table with an auto-increment column
CREATE TABLE products (
    id INT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(100)
);

-- Insert Data (id auto-generated)
INSERT INTO products (name) VALUES ('iPhone');
INSERT INTO products (name) VALUES ('MacBook');

-- View Current Accumulated Value
SHOW CREATE TABLE products\G

-- Modify the Auto-Increment Start Value
ALTER TABLE products AUTO_INCREMENT = 1000;

-- Insert New Data (id starts from 1000)
INSERT INTO products (name) VALUES ('iPad');
▶ جرّب الكود

الناتج:

TEXT 📖 للعرض فقط
+----+---------+
| id | name    |
+----+---------+
|  1 | iPhone  |
|  2 | MacBook |
| 1000| iPad   |
+----+---------+


8. إدارة القيم الافتراضية

▶ مثال: تغيير القيمة الافتراضية

SQL
-- Add a default value
ALTER TABLE users ALTER COLUMN status SET DEFAULT 'active';

-- Delete the default value
ALTER TABLE users ALTER COLUMN status DROP DEFAULT;

-- Edit the default value for created_at
ALTER TABLE orders ALTER COLUMN order_date SET DEFAULT (CURRENT_DATE);
▶ جرّب الكود

9. إضافة/إزالة القيود

▶ مثال: إدارة القيود

SQL
-- Add a Primary Key
ALTER TABLE users ADD PRIMARY KEY (id);

-- Delete Primary Key
ALTER TABLE users DROP PRIMARY KEY;

-- Add a unique constraint
ALTER TABLE users ADD UNIQUE (email);

-- Delete the unique constraint
ALTER TABLE users DROP INDEX email;

-- Add a Foreign Key
ALTER TABLE orders 
ADD CONSTRAINT fk_customer 
FOREIGN KEY (customer_id) REFERENCES customers(id);

-- Delete Foreign Key
ALTER TABLE orders DROP FOREIGN KEY fk_customer;

-- Add CHECK Constraints
ALTER TABLE employees ADD CONSTRAINT chk_age CHECK (age >= 18);

-- Delete CHECK Constraints
ALTER TABLE employees DROP CHECK chk_age;
▶ جرّب الكود

10. دليل عملي للتحرير الجماعي

▶ مثال: تطبيق تعديلات متعددة دفعة واحدة

SQL
ALTER TABLE users
ADD COLUMN phone VARCHAR(20) AFTER email,
ADD COLUMN avatar VARCHAR(255),
MODIFY COLUMN username VARCHAR(150) NOT NULL,
DROP COLUMN temp_field,
ADD UNIQUE (phone);
▶ جرّب الكود

❓ أسئلة شائعة

س هل تؤدي عملية ALTER TABLE إلى قفل الجدول؟
ج في MySQL 8.0، تدعم معظم عمليات ALTER TABLE لغة DDL أثناء التشغيل ولا تؤدي إلى قفل الجدول. ومع ذلك، قد تؤدي عمليات مثل تعديل المفتاح الأساسي أو أنواع الأعمدة إلى قفل الجدول.
س هل يؤدي تعديل حقل ما إلى فقدان البيانات؟
ج عند استخدام الأمر MODIFY أو CHANGE لتغيير نوع بيانات عمود ما، إذا كان نوع البيانات الجديد لا يسمح بتخزين البيانات الأصلية، فسيتم اقتطاع البيانات أو سيظهر خطأ. أما إعادة تسمية العمود فلا تؤدي إلى فقدان البيانات.
س هل يمكن التراجع عن أمر ALTER TABLE؟
ج لا. إن أمر ALTER TABLE هو عملية DDL يتم تثبيتها تلقائيًا عند التنفيذ ولا يمكن التراجع عنها. يُنصح بعمل نسخة احتياطية من البيانات قبل تنفيذ هذه العملية.
س كيف يمكنني تعديل جدول كبير جدًّا؟
ج قد تكون عملية ALTER TABLE على جدول كبير (يحتوي على عشرات الملايين من الصفوف) بطيئة جدًّا. نوصي باستخدام أدوات مثل pt-online-schema-change أو gh-ost لتعديل الجدول عبر الإنترنت.

📖 ملخص


📝 تمارين

  1. سؤال أساسي (مستوى الصعوبة ⭐): أضف الحقل phone (VARCHAR(20)) إلى الجدول users، مع وضعه بعد الحقل email.

  2. تمرين متقدم (مستوى الصعوبة ⭐⭐): بعد إنشاء الجدول orders، قم بتغيير نوع بيانات الحقل amount من INT إلى DECIMAL(10,2)، وأضف الحقل status بقيمة افتراضية هي 'pending'.

  3. سؤال التحدي (الصعوبة: ⭐⭐⭐): صمم خطة لتطوير بنية الجدول: للانتقال من الإصدار v1 إلى الإصدار v2، عليك إضافة 3 أعمدة، وحذف عمود واحد، وتغيير أنواع بيانات عمودين. اكتب عبارات ALTER TABLE الكاملة.

Web-Tutorial.com

فريق Web-Tutorial التقني

منصة دروس برمجية يديرها عدة مطورين. كل درس يتم كتابته ومراجعته بواسطة مطورين متخصصين في المجال. نعمل على ضمان دقة وموثوقية المحتوى — إذا لاحظت أي مشكلة، فيرجى إخبارنا.

100%