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

SQL تعيين العمود كمفتاح رئيسي

  • مفهوم المفتاح الرئيسي ( Primary Key )
  • تعيين العمود كمفتاح رئيسي عند إنشاء الجدول
  • تعيين أكثر من عمود كمفتاح رئيسي عند إنشاء الجدول
  • تعيين المفتاح الرئيسي بعد إنشاء الجدول
  • حذف المفتاح الرئيسي

مفهوم المفتاح الرئيسي ( Primary Key )

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

كمثال بسيط, في الجدول التالي يمكننا الوصول لأي سطر من خلال رقم id السطر.

id first_name last_name
1 Ahmad Eid
2 Ramez Morad
3 Hassan Mortada
4 Saad Alkassem
5 Zaher Fahmi

معلومة تقنية

العمود الذي يتم تعيينه كمفتاح رئيسي لا يسمح بأن يتم تخزين قيم مكررة فيه.
بمعنى آخر, جميع قيم المفتاح الرئيسي تعتبر موحدة ( UNIQUE ) حتى و إن لم نعرفها كذلك.


تعيين المفتاح الرئيسي

في أغلب الأوقات, تحتاج وضع عمود واحد في الجدول ليكون بمثابة المفتاح الرئيسي للوصول لكل سطر فيه و هذا الأمر تطرقنا له كثيراً في الدروس السابقة حيث كنا نضع عمود واحد إسمه id كمفتاح رئيسي في أي جدول ننشئه, و لكن في بعض الحالات قد تجد أنك بحاجة إلى تكوين مفتاح رئيسي في الجدول من عامودين أو أكثر و ليس من عمود واحد فقط.

تعيين العمود كمفتاح رئيسي عند إنشاء الجدول

إذا كنت تنوي تعيين عمود كمفتاح رئيسي في الجدول, يمكنك إضافة الخاصية PRIMARY KEY إلى تعريف العمود فقط.
عندها سيصبح العمود لا يقبل أن تخزن فيه قيم مكررة و سيجبرك على إدخال قيم بنفسك له.


المثال الأول

في المثال التالي, عند إنشاء جدول جديد قمنا بإنشاء عمود نوعه INT و تعيينه كمفتاح رئيسي في الجدول.

الإستعلام

CREATE TABLE users (
id INT PRIMARY KEY, -- users كمفتاح رئيسي للجدول id هنا قمنا بتعريف العامود
first_name VARCHAR(50),
last_name VARCHAR(50)
);
CREATE TABLE users ( id INT PRIMARY KEY, -- users كمفتاح رئيسي للجدول id هنا قمنا بتعريف العامود first_name VARCHAR(50), last_name VARCHAR(50) );

المثال الثاني

في المثال التالي, عند إنشاء جدول جديد قمنا بإنشاء عمود نوعه VARCHAR و تعيينه كمفتاح رئيسي في الجدول.

الإستعلام

CREATE TABLE users (
username VARCHAR(50) PRIMARY KEY, -- users كمفتاح رئيسي للجدول username هنا قمنا بتعريف العامود
first_name VARCHAR(50),
last_name VARCHAR(50)
);
CREATE TABLE users ( username VARCHAR(50) PRIMARY KEY, -- users كمفتاح رئيسي للجدول username هنا قمنا بتعريف العامود first_name VARCHAR(50), last_name VARCHAR(50) );

تعيين أكثر من عمود كمفتاح رئيسي عند إنشاء الجدول

لتعيين أكثر من عمود كمفتاح رئيسي في الجدول, يجب إضافة قيد ( CONSTRAINT ) على الجدول نحدد فيه كل الأعمدة التي نريدها أن تكون بمثابة مفتاح رئيسي.
إنتبه لنقطة مهمة جداً, و هي أنه عند تعيين عامودين كمفتاح رئيسي, فإن كل عمود منهم يعتبر عمود عادي جداً و لكنهما مع بعض يشكلان مفتاح واحد.


الشكل العام لإضافة قيد خاص بتعيين المفتاح الرئيسي

لإضافة CONSTRAINT خاص بتحديد الأعمدة التي نريد تعيينها بمثابة PRIMARY KEY واحد يجب كتابتة الإستعلام كالتالي.

CREATE TABLE table_name (
column1 datatype NOT NULL,
column2 datatype NOT NULL,
...,
CONSTRAINT PK_table_name PRIMARY KEY (column1, column2)
);
CREATE TABLE table_name ( column1 datatype NOT NULL, column2 datatype NOT NULL, ..., CONSTRAINT PK_table_name PRIMARY KEY (column1, column2) );

مثال

في المثال التالي, عند إنشاء جدول جديد قمنا بإنشاء عمود نوعه INT و عمود نوعه VARCHAR و تعيينهما كمفتاح رئيسي في الجدول.

لتعيين هذين العمودين كمفتاح واحد فعلنا التالي:

  • العمود id قمنا بتعريفه INT NOT NULL لأننا نريد إدخال قيمة رقمية و أن لا يسمح بترك الحقل فارغاً.
  • العمود username قمنا بتعريفه VARCHAR(50) NOT NULL لأننا نريد إدخال قيم نصية لا يتعدى طولها 50 حرف و أن لا يسمح بترك الحقل فارغاً.
  • قمنا بإضافة CONSTRAINT نوعه PRIMARY KEY بإسم pk_users ليكون مشابهاً لإسم الجدول فقط.
  • ذكرنا فيه إسم العمودين اللذين نريد وضعهما كمفتاح رئيسي في الجدول بين أقواس القيد PRIMARY KEY.

الإستعلام

CREATE TABLE users (
id INT NOT NULL,
username VARCHAR(50) NOT NULL,
first_name VARCHAR(50),
last_name VARCHAR(50),
CONSTRAINT pk_users PRIMARY KEY (id, username)
);
CREATE TABLE users ( id INT NOT NULL, username VARCHAR(50) NOT NULL, first_name VARCHAR(50), last_name VARCHAR(50), CONSTRAINT pk_users PRIMARY KEY (id, username) );

الآن, لاحظ أن العمود username يمكنه أن يحتوي على قيم مكررة و العمود id كذلك أيضاً.
السببب الذي يجعل ذلك لا يشكل مشكلة هو أن كل عمود منهما لا يشكل مفتاح رئيسي لوحده, بل قيمتهما مع بعضهما هي ما تشكل المفتاح الرئيسي في كل سطر.

id username first_name last_name
1 ahmad Ahmad Eid
2 ahmad Ahmad Rashad
2 hassan Hassan Mortada
3 saad Saad Alkassem

  • 1ahmad هو مفتاح السطر الأول.
  • 2ahmad هو مفتاح السطر الثاني.
  • 2hassan هو مفتاح السطر الثالث.
  • 3saad هو مفتاح السطر الرابع.

إذاً في حال كان المفتاح الرئيسي يتألف من أكثر من عامود, يمكننا جعل الأعمدة تقبل أن يكون فيها قيم مكررة و لكن لا يمكننا تكرار نفس قيم الأعمدة الموجودة على نفس السطر في سطر آخر.

في الجدول السابق ممنوع تكرار نفس الـ id و الـ username في أكثر من سطر. أي ممنوع إدخال قيم مكررة كالتالي.

id username first_name last_name
1 ahmad Ahmad Eid
1 ahmad Ahmad Rashad

تعيين المفتاح الرئيسي بعد إنشاء الجدول

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


في حال كنت تنوي تعيين عمود واحد كمفتاح رئيسي, يمكنك استخدام الأمر ALTER لتعيينه كالتالي.

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

في حال كنت تنوي تعيين أكثر من عمود واحد كمفتاح رئيسي, يجب إضافة CONSTRAINT لتعيينه كالتالي.

ALTER TABLE table_name
ADD CONSTRAINT pk_constraint_name PRIMARY KEY (column1, column2, ..);
ALTER TABLE table_name ADD CONSTRAINT pk_constraint_name PRIMARY KEY (column1, column2, ..);


المثال الأول

الإستعلام التالي يقوم بتعيين العمود id الموجود في الجدول users كمفتاح رئيسي.

الإستعلام

ALTER TABLE users
ADD PRIMARY KEY (id);
ALTER TABLE users ADD PRIMARY KEY (id);

المثال الثاني

الإستعلام التالي يقوم بتعيين العمودين id و username الموجودين في الجدول users كمفتاح رئيسي.

الإستعلام

ALTER TABLE users
ADD CONSTRAINT pk_users PRIMARY KEY (id, username);
ALTER TABLE users ADD CONSTRAINT pk_users PRIMARY KEY (id, username);

حذف المفتاح الرئيسي

في حال أردت إلغاء المفتاح الرئيسي الذي قمت بتعيينه سابقاً. يمكنك تعديل العمود بواسطة الأمر ALTER مع الإشارة إلى أن طريقة فعل ذلك تختلف من قاعدة بيانات لأخرى.


في قواعد بيانات MySQL

ALTER TABLE table_name
DROP PRIMARY KEY;
ALTER TABLE table_name DROP PRIMARY KEY;

الإستعلام التالي يقوم بإلغاء تعيين المفتاح الرئيسي الموضوع في الجدول users.
هنا لا داعي لذكر إسم المفتاح الرئيسي الذي تنوي إلغاؤه.

مثال

ALTER TABLE users
DROP PRIMARY KEY;
ALTER TABLE users DROP PRIMARY KEY;


في قواعد بيانات SQL Server / Oracle / Access

ALTER TABLE table_name
DROP CONSTRAINT pk_constraint_name;
ALTER TABLE table_name DROP CONSTRAINT pk_constraint_name;

الإستعلام التالي يقوم بحذف القيد pk_users الذي تم وضعه سابقاً لتعيين المفتاح الرئيسي في الجدول users.
هنا يجب ذكر إسم القيد الذي يمثل المفتاح الرئيسي الذي تنوي إلغاؤه.

مثال

ALTER TABLE users
DROP CONSTRAINT pk_users;
ALTER TABLE users DROP CONSTRAINT pk_users;