Programming Basics SQL HTML CSS JavaScript React Python C++ Java JavaFX Swing Problem Solving English English Conversations Computer Fundamentals Linux Learn Typing

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

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

الأمر ALTER

الأمر ALTER يستخدم عند الحاجة لإجراء تعديل على بنية الجدول مثل تغيير إسم الجدول، تغيير إسم العمود، تغيير نوع العمود، حذف العمود، إضافة عمود جديد، إضافة خصائص على العمود، و إزالة خصائص من العمود.

كن حذراً عند إجراء أي تعديل على الجدول لأنك لا تستطيع التراجع عن أي تعديل أجريته على جدول.


طريقة استخدامه

ALTER TABLE table_name
operation;
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");
-- سيتم حذفها 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");

فيما يلي البيانات التي قمنا بإضافتها في الجدول 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;
ALTER TABLE table_name DROP COLUMN column_name;

الإستعلام التالي يقوم بحذف العمود country من الجدول users.
بعدها يعرض جميع البيانات الموجودة في الجدول.

مثال

ALTER TABLE users -- users هنا قمنا بتحديد أننا نريد إجراء تعديل على بنية الجدول
DROP COLUMN country; -- منه country هنا قمنا بتحديد أننا نريد حذف العامود
SELECT * FROM users; -- لمعرفة التغيرات الجديدة users هنا قمنا بعرض جميع البيانات الموجودة في الجدول
ALTER TABLE users -- users هنا قمنا بتحديد أننا نريد إجراء تعديل على بنية الجدول DROP COLUMN country; -- منه country هنا قمنا بتحديد أننا نريد حذف العامود SELECT * FROM users; -- لمعرفة التغيرات الجديدة users هنا قمنا بعرض جميع البيانات الموجودة في الجدول

النتيجة

id first_name last_name
1 Rami Masri
2 Ahmad Naji
3 Hanan Mostafa
4 Abdullah Helmi
5 Majed Alali

نلاحظ أن العمود country تم حذفه بشكل نهائي من الجدول.

طريقة إضافة عمود جديد في الجدول

لإضافة عمود جديد في الجدول نكتب ADD و من بعدها نحدد إسم و نوع العمود الذي نريد إضافته كما يلي.

ALTER TABLE table_name
ADD column_name datatype;
ALTER TABLE table_name ADD column_name datatype;

الإستعلام التالي يقوم بإضافة عمود جديد في الجدول users إسمه salary و نوعه DOUBLE.
بعدها يعرض جميع البيانات الموجودة في الجدول.

مثال

ALTER TABLE users -- users هنا قمنا بتحديد أننا نريد إجراء تعديل على بنية الجدول
ADD salary DOUBLE; -- DOUBLE و نوعه salary هنا قمنا بتحديد أننا نريد إضافة عمود جديد إسمه
SELECT * FROM users; -- لمعرفة التغيرات الجديدة users هنا قمنا بعرض جميع البيانات الموجودة في الجدول
ALTER TABLE users -- users هنا قمنا بتحديد أننا نريد إجراء تعديل على بنية الجدول ADD salary DOUBLE; -- DOUBLE و نوعه 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

نلاحظ أنه تم إضافة عمود جديد إسمه salary في آخر الجدول و جميع حقوله فارغة.

طريقة تغيير نوع القيم التي يمكن تخزينها في العمود

عند تحويل نوع بيانات أي عمود في الجدول عليك الإنتباه جيداً للأنواع التي تحول إليها لأنك قد تخسر القيم الموضوعة فيها أو قد تخسر جزء منها و إليك بعض الأمثلة:

  • إذا كان العمود نوعه VARCHAR و قمت بتحويله للنوع INT سيتم تحويل كل القيم السابقة إلى Null لأنه بالمنطق لا يمكنك تحويل النص إلى عدد.
  • إذا كان العمود نوعه DECIMAL أو DOUBLE أو FLOAT و قمت بتحويله للنوع INT ستخسر أي رقم موضوع بعد الفاصلة العشرية فقط لأن النوع INT يسمح بتخزين أعداد صحيحة فقط، أي لا يقبل أي رقم بعد الفاصلة.

الكلمة التي تضعها لتغيير نوع القيم التي يمكن تخزينها في العمود تختلف من قاعدة بيانات لأخرى و لكن شكل الإستعلام هو نفسه تماماً.


أسلوب قواعد بيانات Access و SQL Server

لتغيير نوع القيم التي يمكن تخزينها في العمود نكتب ALTER مرة ثانية و من بعدها نحدد إسم و نوع العمود الذي نريد تعديل نوعه كما يلي.

ALTER TABLE table_name
ALTER column_name datatype;
ALTER TABLE table_name ALTER column_name datatype;

أسلوب قواعد بيانات Oracle قبل الإصدار 10G

لتغيير نوع القيم التي يمكن تخزينها في العمود نكتب MODIFY COLUMN و من بعدها نحدد إسم و نوع العمود الذي نريد تعديل نوعه كما يلي.

ALTER TABLE table_name
MODIFY COLUMN column_name datatype;
ALTER TABLE table_name MODIFY COLUMN column_name datatype;

أسلوب قواعد بيانات Oracle الإصدار 10G و الإصدارات الأحدث

لتغيير نوع القيم التي يمكن تخزينها في العمود، نكتب MODIFY فقط و من بعدها نحدد إسم و نوع العمود الذي نريد تعديل نوعه كما يلي.

ALTER TABLE table_name
MODIFY column_name datatype;
ALTER TABLE table_name MODIFY column_name datatype;

أسلوب قواعد بيانات MySQL

لتغيير نوع القيم التي يمكن تخزينها في العمود نكتب MODIFY COLUMN و من بعدها نحدد إسم و نوع العمود الذي نريد تعديل نوعه كما يلي.

ALTER TABLE table_name
MODIFY COLUMN column_name datatype;
ALTER TABLE table_name MODIFY COLUMN column_name datatype;

في هذه الدورة سنعتمد أسلوب قواعد بيانات MySQL في تعديل أنواع أعمدة الجداول.


الإستعلام التالي يقوم بتغيير نوع القيم التي يمكن تخزينها في العمود salary إلى DECIMAL.
بعدها يعرض جميع البيانات الموجودة في الجدول.

مثال

ALTER TABLE users -- users هنا قمنا بتحديد أننا نريد إجراء تعديل على بنية الجدول
MODIFY COLUMN salary DECIMAL(7,2); -- DECIMAL إلى النوع salary هنا قمنا بتحديد أننا نريد تغيير نوع العامود
SELECT * FROM users; -- لمعرفة التغيرات الجديدة users هنا قمنا بعرض جميع البيانات الموجودة في الجدول
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;
ALTER TABLE table_name RENAME TO new_table_name;

الإستعلام التالي يقوم بتغيير إسم الجدول إلى employees.

مثال

ALTER TABLE users -- users هنا قمنا بتحديد أننا نريد إجراء تعديل على بنية الجدول
RENAME TO employees; -- employees هنا قمنا بتحديد أننا نريد تغيير إسم الجدول إلى
ALTER TABLE users -- users هنا قمنا بتحديد أننا نريد إجراء تعديل على بنية الجدول RENAME TO employees; -- employees هنا قمنا بتحديد أننا نريد تغيير إسم الجدول إلى

طريقة تغيير إسم العمود

طريقة تغيير إسم العمود تختلف بشكل كلي من قاعدة بيانات لأخرى كما يلي.


أسلوب قواعد بيانات SQLite و Oracle

لتغيير إسم العمود نكتب RENAME COLUMN و من بعدها نضع إسم العمود الذي نريد تغييره، يليه الكلمة TO، ثم نضع الإسم الجديد للعمود كما يلي.

ALTER TABLE table_name
RENAME COLUMN old_column_name TO new_column_name;
ALTER TABLE table_name RENAME COLUMN old_column_name TO new_column_name;

أسلوب قواعد بيانات SQL Server

لتغيير إسم العمود نستدعي الدالة sp_rename و من بعدها نمرر لها إسم العمود الذي نريد تغييره كأول باراميتر، ثم إسم العمود الجديد كثاني باراميتر، ثم نكتب الكلمة 'COLUMN' كثالث باراميتر كما يلي.

EXEC sp_rename 'table_name.old_column_name', 'new_column_name', 'COLUMN';
EXEC sp_rename 'table_name.old_column_name', 'new_column_name', 'COLUMN';

أسلوب قواعد بيانات Access

تغيير إسم العمود لا يمكن أن يتم من خلال تنفيذ إستعلام و لكن يمكن أن يتم بشكل مباشر من واجهة البرنامج.


أسلوب قواعد بيانات MySQL

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

ALTER TABLE tableName
CHANGE old_column_name new_column_name data_type(constraints);
ALTER TABLE tableName CHANGE old_column_name new_column_name data_type(constraints);

في هذه الدورة سنعتمد أسلوب قواعد بيانات MySQL في تغيير أسماء أعمدة الجداول.


الإستعلام التالي يقوم بتغيير إسم العمود salary إلى income.
بعدها يعرض جميع البيانات الموجودة في الجدول.

مثال

ALTER TABLE employees -- employees هنا قمنا بتحديد أننا نريد إجراء تعديل على بنية الجدول
CHANGE salary income DECIMAL(7,2); -- income إلى salary هنا قمنا بتحديد أننا نريد تغيير إسم العامود
SELECT * FROM users; -- لمعرفة التغيرات الجديدة employees هنا قمنا بعرض جميع البيانات الموجودة في الجدول
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