English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

أمر ALTER لـ MySQL

عندما نحتاج إلى تعديل اسم جدول البيانات أو تعديل حقل جدول البيانات، نحتاج إلى استخدام الأمر ALTER في MySQL.

قبل بدء هذا الفصل من الدروس، دعونا أولاً ننشئ جدولاً، أسمه: testalter_tbl.

root@host# mysql -u root -p password;
ادخل كلمة المرور:*******
mysql> use w3codebox;
تم تغيير قاعدة البيانات
mysql> create table testalter_tbl
    -> (
    -> i INT,
    -> c CHAR(1)
    -> ;
Query OK, 0 rows affected (0.05 sec)
mysql> SHOW COLUMNS FROM testalter_tbl;
+-------+---------+------+-----+---------+-------+
| Field | Type    | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| i     | int(11) | YES  |     | NULL    |       |
| c     | char(1) | YES  |     | NULL    |       |
+-------+---------+------+-----+---------+-------+
2 سطر في المجموعة (0.00 ثانية)

حذف، إضافة أو تعديل حقل الجدول

استخدام الأمر ALTER و جملة DROP لإزالة حقل i الذي تم إنشاءه في الجدول أعلاه:

mysql> ALTER TABLE testalter_tbl  DROP i;

لا يمكنك استخدام DROP لإزالة الحقل إذا كان هناك حقل واحد فقط في جدول البيانات.

في MySQL، يتم استخدام جملة ADD لضيف عمودًا إلى جدول البيانات، مثل المثال التالي الذي يضيف حقل i إلى جدول testalter_tbl مع تحديد نوع البيانات:

mysql> ALTER TABLE testalter_tbl ADD i INT;

بعد تنفيذ هذا الأمر، سيتم إضافة حقل i تلقائيًا إلى نهاية حقول جدول البيانات.

mysql> SHOW COLUMNS FROM testalter_tbl;
+-------+---------+------+-----+---------+-------+
| Field | Type    | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| c     | char(1) | YES  |     | NULL    |       |
| i     | int(11) | YES  |     | NULL    |       |
+-------+---------+------+-----+---------+-------+
2 سطر في المجموعة (0.00 ثانية)

إذا كنت بحاجة إلى تحديد موقع الحقل الجديد، يمكنك استخدام الكلمات المفتاحية التي يقدمها MySQL FIRST (تعيين الموقع كالمسلسل الأول) وAFTER اسم الحقل (تعيين الموقع بعد حقل معين).

حاول جملة ALTER TABLE التالية، بعد تنفيذها بنجاح، استخدم SHOW COLUMNS لرؤية تغيير بنية الجدول:

ALTER TABLE testalter_tbl DROP i;
ALTER TABLE testalter_tbl ADD i INT FIRST;
ALTER TABLE testalter_tbl DROP i;
ALTER TABLE testalter_tbl ADD i INT AFTER c;

كلمات المفتاح FIRST وAFTER يمكن استخدامها في جمل ADD وMODIFY، لذا إذا كنت ترغب في إعادة تعيين موقع حقل جدول البيانات، يجب عليك أولاً استخدام DROP لإزالة الحقل ثم استخدام ADD لإضافة الحقل وإعداد الموقع.

تعديل نوع الحقل واسمه

إذا كنت بحاجة إلى تعديل نوع الحقل واسمه، يمكنك استخدام جملة MODIFY أو CHANGE في الأمر ALTER.

على سبيل المثال، لتغيير نوع الحقل c من CHAR(1) إلى CHAR(10)، يمكنك تنفيذ الأمر التالي:

mysql> ALTER TABLE testalter_tbl MODIFY c CHAR(10);

استخدام جملة CHANGE، هناك اختلاف كبير في النحو. بعد كلمة المفتاح CHANGE، يتبعها اسم الحقل الذي تريد تعديله، ثم يتم تحديد اسم الحقل الجديد والنوع. حاول هذا المثال:

mysql> ALTER TABLE testalter_tbl CHANGE i j BIGINT;

إذا كنت الآن تريد تغيير الحقل j من BIGINT إلى INT، فالجملة SQL التالية هي:

mysql> ALTER TABLE testalter_tbl CHANGE j j INT;

تأثير ALTER TABLE على القيم الصفرية والافتراضية

عندما تقوم بتغيير الحقل، يمكنك تحديد ما إذا كان يجب تضمين القيمة أو تعيين القيمة الافتراضية.

以下示例,指定字段 j 为 NOT NULL 且默认值为100 。

mysql> ALTER TABLE testalter_tbl 
    -> MODIFY j BIGINT NOT NULL DEFAULT 100;

如果你不设置默认值,MySQL会自动设置该字段默认为 NULL。

修改字段默认值

你可以使用 ALTER 来修改字段的默认值,尝试以下示例:

mysql> ALTER TABLE testalter_tbl ALTER i SET DEFAULT 1000;
mysql> SHOW COLUMNS FROM testalter_tbl;
+-------+---------+------+-----+---------+-------+
| Field | Type    | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| c     | char(1) | YES  |     | NULL    |       |
| i     | int(11) | YES  |     | 1000    |       |
+-------+---------+------+-----+---------+-------+
2 سطر في المجموعة (0.00 ثانية)

你也可以使用 ALTER 命令及 DROP子句来删除字段的默认值,如下示例:

mysql> ALTER TABLE testalter_tbl ALTER i DROP DEFAULT;
mysql> SHOW COLUMNS FROM testalter_tbl;
+-------+---------+------+-----+---------+-------+
| Field | Type    | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| c     | char(1) | YES  |     | NULL    |       |
| i     | int(11) | YES  |     | NULL    |       |
+-------+---------+------+-----+---------+-------+
2 سطر في المجموعة (0.00 ثانية)
تغيير نوع الجدول:

يمكنك استخدام أمر ALTER والفاصلة التابعة لقسم TYPE لتحديد نوع الجدول. لنحاول في هذا المثال، سنقوم بتحديد نوع جدول testalter_tbl كـ MYISAM:

ملاحظة:يمكنك استخدام جملة SHOW TABLE STATUS لمعرفة نوع الجدول.

mysql> ALTER TABLE testalter_tbl ENGINE = MYISAM;
mysql> SHOW TABLE STATUS LIKE 'testalter_tbl'\G
*************************** 1. سطر ****************
           الاسم: testalter_tbl
           نوع: MyISAM
     Row_format: Fixed
           Rows: 0
 Avg_row_length: 0
    Data_length: 0
Max_data_length: 25769803775
   Index_length: 1024
      Data_free: 0
 Auto_increment: NULL
    Create_time: 2007-06-03 08:04:36
    Update_time: 2007-06-03 08:04:36
     Check_time: NULL
 Create_options:
        تعليق:
1 row in set (0.00 sec)

تعديل اسم الجدول

إذا كنت بحاجة إلى تعديل اسم جدول البيانات، يمكنك استخدام جملة RENAME في جملة ALTER TABLE لتحقيق ذلك.

حاول تطبيق المثال التالي لتغيير اسم جدول بيانات testalter_tbl إلى alter_tbl:

mysql> ALTER TABLE testalter_tbl RENAME TO alter_tbl;

أمر ALTER يمكن أيضًا استخدامه لإنشاء وإزالة فهرس جدول بيانات MySQL، وسنقوم بشرح هذه الميزة في الفصول القادمة.