MySQL: الدليل الشامل لتعديل هياكل جداول MySQL
آخر تحديث: 2026-08-26
هياكل الجداول ليست ثابتة — فعندما تتغير احتياجات العمل، يكون ALTER TABLE هو المنقذ الذي تحتاجه.
يقدم هذا الدرس شرحًا منهجيًّا لجميع العمليات المتعلقة بتعديل هياكل الجداول.
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. ما ستتعلمه
- ALTER TABLE: إضافة أعمدة أو حذفها أو تعديلها
- تعديل أسماء الجداول والأعمدة
- تعديل أنواع الحقول والقيود
- AUTO_INCREMENT إعدادات التزايد التلقائي
- DEFAULT إدارة القيم الافتراضية
2. قصة حقيقية عن تغيير في المتطلبات
(1) المشكلة: الاحتياجات المتغيرة
قال مدير المنتج:
"أضف حقلًا باسم 'رقم الهاتف المحمول' إلى جدول المستخدمين، وقم بتغيير طول اسم المستخدم من 50 إلى 100."
إذا كنت لا تعرف كيفية استخدام ALTER TABLE، فإن خيارك الوحيد هو حذف الجدول وإعادة إنشائه — مما سيؤدي إلى فقدان جميع البيانات.
(2) حلول لـ ALTER TABLE
-- 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. إضافة حقل
▶ مثال: إضافة عمود
-- 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';
الناتج:
Query OK, 0 rows affected (0.03 sec)
Records: 0 Duplicates: 0 Warnings: 0
4. حذف الحقول
▶ مثال: DROP COLUMN
-- 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 — تعديل النوع
-- 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 — إعادة تسمية حقل
-- 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
-- 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
▶ مثال: تكوين التزايد التلقائي
-- 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');
الناتج:
+----+---------+
| id | name |
+----+---------+
| 1 | iPhone |
| 2 | MacBook |
| 1000| iPad |
+----+---------+
8. إدارة القيم الافتراضية
▶ مثال: تغيير القيمة الافتراضية
-- 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. إضافة/إزالة القيود
▶ مثال: إدارة القيود
-- 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. دليل عملي للتحرير الجماعي
▶ مثال: تطبيق تعديلات متعددة دفعة واحدة
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 إلى قفل الجدول؟ALTER TABLE لغة DDL أثناء التشغيل ولا تؤدي إلى قفل الجدول. ومع ذلك، قد تؤدي عمليات مثل تعديل المفتاح الأساسي أو أنواع الأعمدة إلى قفل الجدول.ALTER TABLE على جدول كبير (يحتوي على عشرات الملايين من الصفوف) بطيئة جدًّا. نوصي باستخدام أدوات مثل pt-online-schema-change أو gh-ost لتعديل الجدول عبر الإنترنت.📖 ملخص
- إضافة عمود: إضافة حقل؛ يمكنك تحديد موضعه (أول/بعد)
- DROP COLUMN يحذف عمودًا؛ وتُفقد البيانات نهائيًا.
- MODIFY يغير نوع الحقل والقيود؛ CHANGE يتيح لك أيضًا إعادة تسمية الحقل
- إعادة تسمية الجدول إعادة تسمية جدول
- AUTO_INCREMENT يتحكم في القيمة الأولية للتزايد التلقائي
- ALTER COLUMN SET/DROP DEFAULT إدارة القيم الافتراضية
- قيود الإضافة/الحذف إدارة قيود المفتاح الأساسي والمفتاح الخارجي والتفرد وCHECK
📝 تمارين
-
سؤال أساسي (مستوى الصعوبة ⭐): أضف الحقل
phone(VARCHAR(20)) إلى الجدولusers، مع وضعه بعد الحقلemail. -
تمرين متقدم (مستوى الصعوبة ⭐⭐): بعد إنشاء الجدول
orders، قم بتغيير نوع بيانات الحقلamountمن INT إلى DECIMAL(10,2)، وأضف الحقلstatusبقيمة افتراضية هي 'pending'. -
سؤال التحدي (الصعوبة: ⭐⭐⭐): صمم خطة لتطوير بنية الجدول: للانتقال من الإصدار v1 إلى الإصدار v2، عليك إضافة 3 أعمدة، وحذف عمود واحد، وتغيير أنواع بيانات عمودين. اكتب عبارات
ALTER TABLEالكاملة.