تعيين العمود كمفتاح رئيسي
- مفهوم المفتاح الرئيسي
- تجهيز قاعدة البيانات التي سنطبق عليها
- تعيين العمود كمفتاح رئيسي عند إنشاء الجدول
- تعيين أكثر من عمود كمفتاح رئيسي عند إنشاء الجدول
- تعيين المفتاح الرئيسي بعد إنشاء الجدول
- حذف المفتاح الرئيسي
مفهوم المفتاح الرئيسي
المفتاح الرئيسي ( 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 كمفتاح رئيسي في أي جدول ننشئه و لكن في بعض الحالات قد تجد أنك بحاجة إلى تكوين مفتاح رئيسي في الجدول من عمودين أو أكثر و ليس من عمود واحد فقط.
تجهيز قاعدة البيانات التي سنطبق عليها
قم بتنفيذ الإستعلام التالي حتى تنشئ قاعدة بيانات جديدة إسمها harmash.
تعيين العمود كمفتاح رئيسي عند إنشاء الجدول
إذا كنت تنوي تعيين عمود كمفتاح رئيسي في الجدول، يمكنك إضافة الخاصية PRIMARY KEY إلى تعريف العمود فقط.
عندها سيصبح العمود لا يقبل أن تخزن فيه قيم مكررة و سيجبرك على إدخال قيم بنفسك له.
الإستعلام التالي ينشئ جدول جديد إسمه users فيه 3 أعمدة مع تعيين عمود نوعه INT كمفتاح رئيسي فيه.
الإستعلام التالي ينشئ جدول جديد إسمه users فيه 3 أعمدة مع تعيين عمود نوعه VARCHAR كمفتاح رئيسي فيه.
تعيين أكثر من عمود كمفتاح رئيسي عند إنشاء الجدول
لتعيين أكثر من عمود كمفتاح رئيسي في الجدول يجب إضافة قيد ( Constraint ) للجدول نحدد فيه كل الأعمدة التي نريدها أن تكون بمثابة مفتاح رئيسي فيه.
عند تعيين عمودين كمفتاح رئيسي، فإن كل عمود منهم يعتبر عمود عادي و لكنهما مع بعض يشكلان مفتاح واحد.
طريقة إضافة قيد لتعيين المفتاح الرئيسي
لإضافة قيد خاص بتحديد الأعمدة التي نريد تعيينها بمثابة PRIMARY KEY واحد يجب كتابتة الإستعلام كما يلي.
- مكان الكلمة
pk_table_name نضع الإسم الذي سيتم إعطاؤه للمفتاح.
- مكان الكلمة
column1 و column2 نضع إسم العمود أو الأعمدة التي ستمثل المفتاح.
الإستعلام التالي ينشئ جدول جديد إسمه users وضعنا فيه مفتاح رئيسي يتكون من عمودين كما يلي:
- العمود الأول إسمه
id و نوعه INT لأننا نريد وضع قيم عددية فيه.
- العمود الثاني إسمه
username و نوعه VARCHAR لأننا نريد وضع قيم نصية فيه.
لتعيين هذين العمودين كمفتاح واحد قمنا بإضافة قيد نوعه PRIMARY KEY بإسم pk_users ليكون مشابهاً لإسم الجدول فقط. و بين أقواسه وضعنا إسم العمودين اللذين نريد وضعهما كمفتاح رئيسي في الجدول.
كيفية التعامل مع الجدول users
لاحظ أن العمودين id و username يمكن أن يحتويا على قيم مكررة كما يلي.
| id | username | first_name | last_name |
| 1 | ahmad | Ahmad | Eid |
| 2 | ahmad | Ahmad | Rashad |
| 2 | hassan | Hassan | Mortada |
| 3 | saad | Saad | Alkassem |
سبب قدرتنا على وضع قيم مكررة في العمودين id و username هو أن كل عمود منهما لا يشكل مفتاح رئيسي بحد ذاته، بل قيمتهما مع بعضهما هي ما تشكل المفتاح الرئيسي في كل سطر على النحو التالي:
1ahmad هو مفتاح السطر الأول.
2ahmad هو مفتاح السطر الثاني.
2hassan هو مفتاح السطر الثالث.
3saad هو مفتاح السطر الرابع.
إذاً في حال كان المفتاح الرئيسي يتألف من أكثر من عمود، يمكننا جعل الأعمدة تقبل أن يكون فيها قيم مكررة و لكن لا يمكننا تكرار نفس قيم الأعمدة الموجودة على نفس السطر في سطر آخر.
في الجدول السابق ممنوع تكرار نفس الـ id و الـ username في أكثر من سطر كم يلي.
| id | username | first_name | last_name |
| 1 | ahmad | Ahmad | Eid |
| 1 | ahmad | Ahmad | Rashad |
تعيين المفتاح الرئيسي بعد إنشاء الجدول
بدايةً، إذا كنت تنوي تعيين المفتاح الرئيسي بعد إنشاء الجدول يجب أن تتأكد أولاً أن العمود أو الأعمدة التي تنوي وضعها كمفتاح رئيسي لا تحتوي على حقول فارغة.
في حال كنت تنوي تعيين عمود واحد كمفتاح رئيسي يمكنك استخدام الأمر ALTER لتعيينه كما يلي.
في حال كنت تنوي تعيين أكثر من عمود واحد كمفتاح رئيسي يجب إضافة قيد لتعيينه كما يلي.
الإستعلام التالي يقوم بتعيين العمود id الموجود في الجدول users كمفتاح رئيسي.
الإستعلام التالي يقوم بتعيين العمودين id و username الموجودين في الجدول users كمفتاح رئيسي.
حذف المفتاح الرئيسي
طريقة حذف المفتاح الرئيسي الذي قمت بإضافته سابقاً كقيد في الجدول تختلف ما بين قاعدة بيانات و أخرى.
في قواعد بيانات SQL Server و Oracle و Access يمكنك استخدام الأمر ALTER كما يلي لحذف القيد الرئيسي في الجدول.
- مكان الكلمة
table_name نضع إسم الجدول الذي يحتوي على القيد.
- مكان الكلمة
constraint_name نضع إسم القيد الذي نريد حذفه.
الإستعلام التالي يقوم بحذف القيد pk_users الذي تم وضعه سابقاً لتعيين المفتاح الرئيسي في الجدول users.
في قواعد بيانات MySQL يمكنك استخدام الأمر ALTER كما يلي لحذف القيد الرئيسي أو المفتاح الرئيسي في الجدول.
الإستعلام التالي يقوم بحذف أي مفتاح رئيسي موضوع في الجدول users.
في حال كان العمود الرئيسي يستعمل تعداد تلقائي - أي يستخدم الخاصية AUTO_INCREMENT - فإنه يجب إزالة هذه الخاصية منه أيضاً لأنه مسموح استعمالها فقط مع العمود الرئيسي.
الإستعلام التالي يقوم بإلغاء تعيين المفتاح الرئيسي الموضوع في الجدول users بالإضافة إلى أنه يقوم بإلغاء خاصية التعداد التلقائي منه.
قواعد بيانات SQLite لا تدعم إمكانية إزالة قيد العمود الرئيسي و لهذا سيكون عليك إنشاء جدول جديد و نقل بيانات الجدول القديم إليه في حال أردت إزالت القيد عن العمود الرئيسي. بمعنى تنشئ جدول جديد بلا قيد رئيسي و تنقل بيانات الجدول القديم إليه.