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 و تعيينه كمفتاح رئيسي في الجدول.
الإستعلام
المثال الثاني
في المثال التالي, عند إنشاء جدول جديد قمنا بإنشاء عمود نوعه VARCHAR و تعيينه كمفتاح رئيسي في الجدول.
الإستعلام
تعيين أكثر من عمود كمفتاح رئيسي عند إنشاء الجدول
لتعيين أكثر من عمود كمفتاح رئيسي في الجدول, يجب إضافة قيد ( CONSTRAINT ) على الجدول نحدد فيه كل الأعمدة التي نريدها أن تكون بمثابة مفتاح رئيسي.
إنتبه لنقطة مهمة جداً, و هي أنه عند تعيين عامودين كمفتاح رئيسي, فإن كل عمود منهم يعتبر عمود عادي جداً و لكنهما مع بعض يشكلان مفتاح واحد.
الشكل العام لإضافة قيد خاص بتعيين المفتاح الرئيسي
لإضافة CONSTRAINT خاص بتحديد الأعمدة التي نريد تعيينها بمثابة PRIMARY KEY واحد يجب كتابتة الإستعلام كالتالي.
مثال
في المثال التالي, عند إنشاء جدول جديد قمنا بإنشاء عمود نوعه INT و عمود نوعه VARCHAR و تعيينهما كمفتاح رئيسي في الجدول.
لتعيين هذين العمودين كمفتاح واحد فعلنا التالي:
- العمود
id
قمنا بتعريفهINT NOT NULL
لأننا نريد إدخال قيمة رقمية و أن لا يسمح بترك الحقل فارغاً. - العمود
username
قمنا بتعريفهVARCHAR(50) NOT NULL
لأننا نريد إدخال قيم نصية لا يتعدى طولها 50 حرف و أن لا يسمح بترك الحقل فارغاً. - قمنا بإضافة CONSTRAINT نوعه PRIMARY KEY بإسم
pk_users
ليكون مشابهاً لإسم الجدول فقط. - ذكرنا فيه إسم العمودين اللذين نريد وضعهما كمفتاح رئيسي في الجدول بين أقواس القيد PRIMARY KEY.
الإستعلام
الآن, لاحظ أن العمود 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 لتعيينه كالتالي.
في حال كنت تنوي تعيين أكثر من عمود واحد كمفتاح رئيسي, يجب إضافة CONSTRAINT لتعيينه كالتالي.
المثال الأول
الإستعلام التالي يقوم بتعيين العمود id
الموجود في الجدول users
كمفتاح رئيسي.
الإستعلام
المثال الثاني
الإستعلام التالي يقوم بتعيين العمودين id
و username
الموجودين في الجدول users
كمفتاح رئيسي.
الإستعلام
حذف المفتاح الرئيسي
في حال أردت إلغاء المفتاح الرئيسي الذي قمت بتعيينه سابقاً. يمكنك تعديل العمود بواسطة الأمر ALTER مع الإشارة إلى أن طريقة فعل ذلك تختلف من قاعدة بيانات لأخرى.
في قواعد بيانات MySQL
الإستعلام التالي يقوم بإلغاء تعيين المفتاح الرئيسي الموضوع في الجدول users
.
هنا لا داعي لذكر إسم المفتاح الرئيسي الذي تنوي إلغاؤه.
مثال
في قواعد بيانات SQL Server / Oracle / Access
الإستعلام التالي يقوم بحذف القيد pk_users
الذي تم وضعه سابقاً لتعيين المفتاح الرئيسي في الجدول users
.
هنا يجب ذكر إسم القيد الذي يمثل المفتاح الرئيسي الذي تنوي إلغاؤه.