SQL أمر تعديل بنية الجدول
الأمر ALTER
الأمر ALTER
يستخدم عند الحاجة لإجراء تعديل على بنية الجدول مثل تغيير إسم الجدول, تغيير إسم العمود, تغيير نوع العمود, حذف العمود, إضافة عمود جديد, إضافة خصائص على العمود, و إزالة خصائص من العمود.
تنبيه: كن حذراً عند إجراء أي تعديل على الجدول لأنك لا تستطيع التراجع عن أي تعديل أجريته على جدول.
الشكل العام لإستخدامه
ALTER TABLE table_name operation;
- مكان الكلمة
table_name
نضع إسم الجدول الذي نريد إجراء تعديلات عليه. - مكان الكلمة
operation
نحدد ما نريد تعديله, حذفه, أو إضافته.
تجهيز قاعدة البيانات التي سنطبق عليها
قم بتنفيذ الإستعلام التالي حتى تنشئ قاعدة بيانات جديدة إسمها harmash
و تنشئ فيها جدول إسمه users
يحتوي على بيانات 5 مستخدمين.
الإستعلام
-- سيتم حذفها harmash في حال كان يوجد بالأساس قاعدة بيانات إسمها DROP DATABASE IF EXISTS harmash; -- harmash هنا قمنا بإنشاء قاعدة بيانات جديدة إسمها CREATE DATABASE harmash; -- harmash هنا قمنا بتحديد أن أي إستعلام جديد سيتم تنفيذه على قاعدة البيانات USE harmash; -- يتألف من 4 أعمدة users هنا قمنا بإنشاء جدول جديد إسمه -- لأننا قمنا بتحديدها قبل إستدعاء هذا الأمر harmash سيتم إنشاء هذا الجدول بداخل قاعدة البيانات CREATE TABLE users ( id INT NOT NULL PRIMARY KEY AUTO_INCREMENT, first_name VARCHAR(50), last_name VARCHAR(50), country VARCHAR(50) ); -- هنا قمنا بإضافة 5 أسطر في الجدول, أي أضفنا معلومات 5 مستخدمين -- لاحظ أننا لم نحدد أسماء الأعمدة التي سنضع فيها البيانات لأننا قمنا بملئ جميع المعلومات -- في البداية هو حتى يكون عدد القيم الموضوعة يساوي عدد أعمدة الجدول null سبب وضع الكلمة -- ستقوم قاعدة البيانات بوضع رقم تعرفة مختلف لكل سطر null مكان الكلمة INSERT INTO users VALUES (null, "Rami", "Masri", "Lebanon"); INSERT INTO users VALUES (null, "Ahmad", "Naji", "Syria"); INSERT INTO users VALUES (null, "Hanan", "Mostafa", "KSA"); INSERT INTO users VALUES (null, "Abdullah", "Helmi", "Egypt"); INSERT INTO users VALUES (null, "Majed", "Alali", "Yaman");
بعد تنفيذ الإستعلام السابق في phpMyAdmin سيتم إنشاء قاعدة البيانات harmash
و إنشاء الجدول users
بداخلها.
قم بالنقر على إسم قاعدة البيانات harmash
من القائمة اليسرى حتى تبدأ بالتعامل معها و تطبيق ما ستتعلمه في هذا الدرس.
البيانات التي قمنا بإضافتها بشكل إفتراضي في الجدول users
.
id | first_name | last_name | country |
---|---|---|---|
1 | Rami | Masri | Lebanon |
2 | Ahmad | Naji | Syria |
3 | Hanan | Mostafa | KSA |
4 | Abdullah | Helmi | Egypt |
5 | Majed | Alali | Yaman |
طريقة حذف عمود من الجدول
لحذف عمود من الجدول, نكتب DROP COLUMN
و من بعدها نحدد إسم العمود الذي نريد حذفه كالتالي.
ALTER TABLE table_name DROP COLUMN column_name;
مثال
الإستعلام التالي يقوم بحذف العمود country
من الجدول users
.
بعدها يعرض جميع البيانات الموجودة في الجدول.
الإستعلام
ALTER TABLE users -- users هنا قمنا بتحديد أننا نريد إجراء تعديل على بنية الجدول DROP COLUMN country; -- منه country هنا قمنا بتحديد أننا نريد حذف العامود SELECT * FROM users; -- لمعرفة التغيرات الجديدة users هنا قمنا بعرض جميع البيانات الموجودة في الجدول
سنحصل على النتيجة التالية عند تنفيذ الإستعلام.
نلاحظ أن العمود country
تم حذفه بشكل نهائي من الجدول.
id | first_name | last_name |
---|---|---|
1 | Rami | Masri |
2 | Ahmad | Naji |
3 | Hanan | Mostafa |
4 | Abdullah | Helmi |
5 | Majed | Alali |
طريقة إضافة عمود جديد في الجدول
لإضافة عمود جديد في الجدول, نكتب ADD
و من بعدها نحدد إسم و نوع العمود الذي نريد إضافته كالتالي.
ALTER TABLE table_name ADD column_name datatype;
مثال
الإستعلام التالي يقوم بإضافة عمود إسمه salary
و نوعه DOUBLE
في الجدول users
.
بعدها يعرض جميع البيانات الموجودة في الجدول.
الإستعلام
ALTER TABLE users -- users هنا قمنا بتحديد أننا نريد إجراء تعديل على بنية الجدول ADD salary DOUBLE; -- DOUBLE و نوعه salary هنا قمنا بتحديد أننا نريد إضافة عمود جديد إسمه SELECT * FROM users; -- لمعرفة التغيرات الجديدة users هنا قمنا بعرض جميع البيانات الموجودة في الجدول
سنحصل على النتيجة التالية عند تنفيذ الإستعلام.
نلاحظ أنه تم إضافة عمود جديد إسمه salary
في آخر الجدول و جميع حقوله فارغة.
id | first_name | last_name | salary |
---|---|---|---|
1 | Rami | Masri | NULL |
2 | Ahmad | Naji | NULL |
3 | Hanan | Mostafa | NULL |
4 | Abdullah | Helmi | NULL |
5 | Majed | Alali | NULL |
طريقة تغيير نوع القيم التي يمكن تخزينها في العامود
في البداية, عند تحويل نوع بيانات الجدول, عليك الإنتباه جيداً للأنواع التي تحول إليها لأنك قد تخسر القيم الموضوعة فيها أو قد تخسر جزء منها و إليك بعض الأمثلة.
- إذا كان الجدول نوعه
VARCHAR
و قمت بتحويله للنوعINT
سيتم تحويل كل القيم السابقة إلىNull
لأنه بالمنطق لا يمكنك تحويل النص إلى رقم. - إذا كان الجدول نوعه
DECIMAL
أوDOUBLE
أوFLOAT
و قمت بتحويله للنوعINT
ستخسر أي رقم موضوع بعد الفاصلة فقط لأن النوعINT
لا يقبل أي رقم بعد الفاصلة.
الآن, عليك معرفة أن الكلمة التي تضعها لتغيير نوع القيم التي يمكن تخزينها في العمود تختلف من قاعدة بيانات لأخرى و لكن شكل الإستعلام هو نفسه تماماً.
في قواعد بيانات MySQL
لتغيير نوع القيم التي يمكن تخزينها في العمود نكتب MODIFY COLUMN
و من بعدها نحدد إسم و نوع العمود الذي نريد تعديل نوعه كالتالي.
ملاحظة: في المثال التالي, سنكتب الإستعلام باستخدام أسلوب قواعد بيانات MySQL لأنها القاعدة التي نتعامل معها منذ بداية الدورة.
ALTER TABLE table_name MODIFY COLUMN column_name datatype;
في قواعد بيانات Access و SQL Server
لتغيير نوع القيم التي يمكن تخزينها في العمود نكتب ALTER
مرة ثانية و من بعدها نحدد إسم و نوع العمود الذي نريد تعديل نوعه كالتالي.
ALTER TABLE table_name ALTER column_name datatype;
في قواعد بيانات Oracle قبل الإصدار 10G
لتغيير نوع القيم التي يمكن تخزينها في العمود نكتب MODIFY COLUMN
و من بعدها نحدد إسم و نوع العمود الذي نريد تعديل نوعه كالتالي.
ALTER TABLE table_name MODIFY COLUMN column_name datatype;
في قواعد بيانات Oracle الإصدار 10G و الإصدارات الأحدث
لتغيير نوع القيم التي يمكن تخزينها في العمود, نكتب MODIFY
فقط و من بعدها نحدد إسم و نوع العمود الذي نريد تعديل نوعه كالتالي.
ALTER TABLE table_name MODIFY column_name datatype;
مثال
الإستعلام التالي يقوم بتغيير نوع القيم التي يمكن تخزينها في العمود salary
إلى DECIMAL
.
بعدها يعرض جميع البيانات الموجودة في الجدول.
الإستعلام
ALTER TABLE users -- users هنا قمنا بتحديد أننا نريد إجراء تعديل على بنية الجدول MODIFY COLUMN salary DECIMAL(7,2); -- DECIMAL إلى النوع salary هنا قمنا بتحديد أننا نريد تغيير نوع العامود SELECT * FROM users; -- لمعرفة التغيرات الجديدة users هنا قمنا بعرض جميع البيانات الموجودة في الجدول
سنحصل على النتيجة التالية عند تنفيذ الإستعلام.
id | first_name | last_name | salary |
---|---|---|---|
1 | Rami | Masri | NULL |
2 | Ahmad | Naji | NULL |
3 | Hanan | Mostafa | NULL |
4 | Abdullah | Helmi | NULL |
5 | Majed | Alali | NULL |
طريقة تغيير إسم الجدول
لتغيير إسم الجدول, نكتب RENAME TO
و من بعدها نضع الإسم الجديد الذي نريد إعطاؤه للجدول كالتالي.
ALTER TABLE table_name RENAME TO new_table_name;
مثال
الإستعلام التالي يقوم بتغيير إسم الجدول إلى employees
.
الإستعلام
ALTER TABLE users -- users هنا قمنا بتحديد أننا نريد إجراء تعديل على بنية الجدول RENAME TO employees; -- employees هنا قمنا بتحديد أننا نريد تغيير إسم الجدول إلى
طريقة تغيير إسم العامود
طريقة تغيير إسم العمود تختلف بشكل كلي من قاعدة بيانات لأخرى, و الآن سنضع لك الطريقة الخاصة بقواعد بيانات MySQL لأننا نطبق الشرح باستخدامها.
لتغيير إسم الجدول نكتب CHANGE
و من بعدها نحدد إسم العمود الذي نريد تغييره, ثم مسافة فارغة, ثم نضع الإسم الجديد للعامود, ثم نكتب نوع القيم التي يمكن تخزينها في العمود كالتالي.
ALTER TABLE tableName CHANGE old_column_name new_column_name datatype(length);
مثال
الإستعلام التالي يقوم بتغيير إسم العمود salary
إلى income
.
بعدها يعرض جميع البيانات الموجودة في الجدول.
الإستعلام
ALTER TABLE employees -- employees هنا قمنا بتحديد أننا نريد إجراء تعديل على بنية الجدول CHANGE salary income DECIMAL(7,2); -- income إلى salary هنا قمنا بتحديد أننا نريد تغيير إسم العامود SELECT * FROM users; -- لمعرفة التغيرات الجديدة employees هنا قمنا بعرض جميع البيانات الموجودة في الجدول
سنحصل على النتيجة التالية عند تنفيذ الإستعلام.
id | first_name | last_name | income |
---|---|---|---|
1 | Rami | Masri | NULL |
2 | Ahmad | Naji | NULL |
3 | Hanan | Mostafa | NULL |
4 | Abdullah | Helmi | NULL |
5 | Majed | Alali | NULL |