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

تعديل جدول (جملة ALTER TABLE)

في هذا الدرس، ستعلم كيفية تعديل أو تعديل جدول موجود باستخدام SQL.

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

بعد إنشاء الجدول، من المحتمل أن تجد أنك نسيت إنشاء العمود أو القيود الذي تحتاجه، أو أنك قد قمت بتسمية العمود بشكل غير صحيح.

في هذه الحالة، يمكنك استخدام جملة ALTER TABLE لتغيير أو تعديل جدول موجود عن طريق إضافة، تعديل أو حذف أعمدة.

نأخذ في الاعتبارshippersفي قاعدة البيانات لدينا هناك جدول، وبنية هذا الجدول هي كالتالي:

+--------------+-------------+------+-----+---------+----------------+
| Field        | Type        | Null | Key | Default | Extra          |
+--------------+-------------+------+-----+---------+----------------+
| shipper_id   | int         | NO   | PRI | NULL    | auto_increment |
| shipper_name | varchar(60) | NO   |     | NULL    |                |
| phone          | varchar(60) | NO   |     | NULL    |                |
+--------------+-------------+------+-----+---------+----------------+

سنستخدم جدول shippers في جميع جمل ALTER TABLE.

الآن لنفترض أننا نريد توسيع جدول shippers الحالي بإضافة عمود جديد. ولكن، السؤال هو كيف يمكننا القيام بذلك باستخدام جملة SQL؟ دعونا نرى.

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

 القواعد الأساسية لإضافة عمود جديد إلى جدول موجود:

ALTER TABLE table_name ADD column_name data_type constraints;					

تضيف الجملة التالية عمودًا جديدًا fax إلى جدول shippers.

ALTER TABLE shippers ADD fax VARCHAR(20);

الآن، بعد تنفيذ الجملة أعلاه، إذا كنت تستخدم الأمر DESCRIBE shippers لرؤية بنية الجدول؛ في سطر الأوامر MySQL، مثلما يلي:

+--------------+-------------+------+-----+---------+----------------+
| Field        | Type        | Null | Key | Default | Extra          |
+--------------+-------------+------+-----+---------+----------------+
| shipper_id   | int         | NO   | PRI | NULL    | auto_increment |
| shipper_name | varchar(60) | NO   |     | NULL    |                |
| phone          | varchar(60) | NO   |     | NULL    |                |
| fax            | varchar(20) | YES  |     | NULL    |                |
+--------------+-------------+------+-----+---------+----------------+

ملاحظة:إذا كنت ترغب في إضافة عمود NOT NULL إلى الجدول الحالي، فإنه يجب عليك تحديدالقيمة الافتراضيةهذا القيمة الافتراضية تستخدم لتعبئة عمود جديد لكل سطر موجود مسبقًا في الجدول.

提示:نصيحة:

عند إضافة حقل جديد إلى الجدول، إذا لم يتم تحديد NULL أو NOT NULL، فإن الحقل يتم تعريفه كNULL.

MySQL يضيف الحقول الجديدة بشكل افتراضي في النهاية. ولكن، إذا كنت ترغب في إضافة حقل جديد بعد حقل معين، يمكنك استخدام جملة AFTER التالية:					

mysql> ALTER TABLE shippers ADD fax VARCHAR(20) AFTER shipper_name;shippersيضيف MySQL مبدئيًا جملة أخرى يمكنك استخدامها لإضافة حقل جديد في بداية الجدول. ما عليك سوى استبدال جملة AFTER في المثال السابق بـ FIRST لضبط الحقل في

تغيير موقع الحقل

في MySQL، إذا قمت بإنشاء جدول لكنك غير راضٍ عن موقع الحقول الموجودة في الجدول، يمكنك تعديلها في أي وقت باستخدام الجملة التالية:

ALTER TABLE table_name
  MODIFY column_name column_definition AFTER column_name;			

الجملة التالية ستضيف الحقلfaxوضعهاshippersفي الجدولshipper_nameبعد الحقل.

mysql> ALTER TABLE shippers MODIFY fax VARCHAR(20) AFTER shipper_name;					

إضافة القيود

يوجد مشكلة رئيسية في جدول shippers الحالي لدينا. حتى لو قمت بإدراج سجلات تحتوي على أرقام هاتف مكررة، فإنه لن يمنعك من القيام بذلك، وهو أمر سيء، يجب أن تكون أرقام الهواتف فريدة.

يمكنك من خلالphoneإضافة القيود UNIQUE إلى الحقل لحل هذه المشكلة. يمكن إضافة القيود إلى الحقول الموجودة في الجداول الحالية باستخدام الجملة الأساسية التالية:

ALTER TABLE table_name ADD UNIQUE (column_name,...);					

تُستخدم الجملة UNIQUE لتowardsphoneإضافة القيود إلى الحقل.

mysql> ALTER TABLE shippers ADD UNIQUE (phone);					

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

بالمثل، إذا لم يكن هناك PRIMARY KEY في الجدول الذي أنشأته، يمكنك استخدام ما يلي:

ALTER TABLE table_name ADD PRIMARY KEY (column_name,...);					

إذا لم يتم تعريفها، فإن الجملة التالية ستكونPRIMARY KEY القيود المضافة إلىshipper_id列。

mysql> ALTER TABLE shippers ADD PRIMARY KEY (shipper_id);					

删除列

从现有表中删除列的基本语法:

ALTER TABLE table_name DROP COLUMN column_name;					

以下语句从shippers表中删除我们新添加的fax列。

mysql> ALTER TABLE shippers DROP COLUMN fax;					

现在,执行上面的语句后,如果您看到表结构,则如下所示:

+--------------+-------------+------+-----+---------+----------------+
| Field        | Type        | Null | Key | Default | Extra          |
+--------------+-------------+------+-----+---------+----------------+
| shipper_id   | int         | NO   | PRI | NULL    | auto_increment |
| shipper_name | varchar(60) | NO   |     | NULL    |                |
| phone        | varchar(20) | NO   | UNI | NULL    |                |
+--------------+-------------+------+-----+---------+----------------+

تغيير نوع البيانات للأعمدة

يمكنك استخدام جملة ALTER التالية لتغيير نوع البيانات للأعمدة في SQL Server:

ALTER TABLE table_name ALTER COLUMN column_name new_data_type;					

لكن لا يدعم خادم قاعدة بيانات MySQL جملة ALTER COLUMN. يدعم بدلاً من ذلك جملة MODIFY التي يمكن استخدامها لتغيير الأعمدة، كما يلي:

ALTER TABLE table_name MODIFY column_name new_data_type;					

الجملة التالية ستقوم بـshippersفي الجدولphoneنوع البيانات الحالي للأعمدة من VARCHAR إلى CHAR، طولها من 20 إلى 15.

mysql> ALTER TABLE shippers MODIFY phone CHAR(15);					

مثل ذلك، يمكنك استخدام جملة MODIFY لتغيير ما إذا كانت الأعمدة في جدول MySQL تسمح بالقيم الفارغة، عن طريق إعادة تعريف تعريف الأعمدة الحالية، وإضافة شرط null أو not null في النهاية، كما يلي:

mysql> ALTER TABLE shippers MODIFY shipper_name CHAR(15) NOT NULL;					

تسمية الجدول

نموذج الأساس لتحديد جدول موجود في MySQL:

ALTER TABLE current_table_name RENAME new_column_name;					

الجملة التالية ستعيد تسميةshippersتم إعادة تسمية الجدولshipper

mysql> ALTER TABLE shippers RENAME shipper;					

يمكنك أيضًا استخدام جملة RENAME TABLE التالية لتحقيق نفس الغرض في MySQL:

mysql> RENAME TABLE shippers TO shipper;