في هذا الدرس 6تصفّح المواضيع
يمثل المفتاح الأساسي PRIMARY KEY الهوية الفريدة لكل سجل داخل الجدول العلائقي. وهو يجمع بين صرامة قيد NOT NULL وقيد التفرد UNIQUE، مع قاعدة معمارية حاسمة: لا يمكن للجدول أن يملك أكثر من مفتاح أساسي واحد فقط:
- منع القيم الفارغة تلقائياً: حتى لو لم تكتب
NOT NULLصراحةً، يفرض MySQL تلقائياً خاصيةNOT NULLعلى جميع أعمدة المفتاح الأساسي. - الفهرس العنقودي في InnoDB: يرتب محرك InnoDB صفحات بيانات الجدول فعلياً على القرص الصلب وفق تسلسل المفتاح الأساسي (Clustered Index).
CREATE TABLE departments (
dept_id INT UNSIGNED NOT NULL,
dept_name VARCHAR(80) NOT NULL,
CONSTRAINT pk_departments PRIMARY KEY (dept_id),
CONSTRAINT uq_departments_name UNIQUE (dept_name)
);
توجّه خاصية AUTO_INCREMENT خادم MySQL إلى توليد أرقام صحيحة متسلسلة تلقائياً (1, 2, 3, ...) لعمود المفتاح الأساسي مع كل سجل جديد يُضاف دون تحديد رقمه يدوياً. ويُنصح دائماً بدمجها مع UNSIGNED لمضاعفة المدى الموجب للأرقام:
CREATE TABLE invoices (
invoice_id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
customer_email VARCHAR(150) NOT NULL,
total_amount DECIMAL(10, 2) NOT NULL DEFAULT 0.00,
PRIMARY KEY (invoice_id)
) AUTO_INCREMENT = 1000;
بعد أن يولّد خادم MySQL رقماً تلقائياً جديداً عبر AUTO_INCREMENT، يحتاج التطبيق غالباً إلى معرفة هذا الرقم فوراً لربط السجلات الفرعية به. وتُرجع الدالة المدمجة LAST_INSERT_ID() آخر معرّف تلقائي تم توليده داخل جلسة اتصالك الحالية حصراً:
- معزولة وآمنة تماماً عند التزامن: تُحفظ القيمة لكل اتصال على حدة، فلا تتأثر بإدخالات الزوار الآخرين في نفس اللحظة.
- التكامل المباشر مع لغات البرمجة: تقرأ مكتبات الاتصال هذه القيمة مباشرةً من بروتوكول MySQL (مثل دالة
$pdo->lastInsertId()في PDO والخاصية$conn->insert_idأوmysqli_insert_id($conn)في MySQLi).
SELECT LAST_INSERT_ID();
رغم أن الجدول لا يملك إلا مفتاحاً أساسياً واحداً، يمكن لهذا المفتاح أن يتألف من عمودين أو أكثر معاً فيما يُعرف باسم المفتاح الأساسي المركّب (Composite Primary Key). ويُعد هذا النمط مثالياً لجداول الربط وتفاصيل الطلبات:
CREATE TABLE course_enrollments (
student_id BIGINT UNSIGNED NOT NULL,
course_id INT UNSIGNED NOT NULL,
enrolled_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT pk_course_enrollments
PRIMARY KEY (student_id, course_id)
);
يمكنك إضافة مفتاح أساسي لجدول قائم أو رفع نقطة انطلاق عداد AUTO_INCREMENT عبر أمر ALTER TABLE. وتذكّر أنه لا يمكن حذف المفتاح الأساسي (DROP PRIMARY KEY) إذا كان العمود يحمل خاصية AUTO_INCREMENT إلا بعد إزالة الترقيم التلقائي أولاً بأمر MODIFY COLUMN:
ALTER TABLE invoices
AUTO_INCREMENT = 5000;
ALTER TABLE departments
DROP PRIMARY KEY,
ADD CONSTRAINT pk_departments PRIMARY KEY (dept_id);
يوضح الجدول المرجعي التالي الفروق الجوهرية بين المفتاح الأساسي PRIMARY KEY وقيد التفرد UNIQUE في محرك InnoDB:
| وجه المقارنة | المفتاح الأساسي PRIMARY KEY | قيد التفرد UNIQUE |
|---|---|---|
| العدد المسموح في الجدول | مفتاح أساسي واحد فقط للجدول | يمكن تعدد قيود UNIQUE في الجدول |
السماح بقيم NULL | ممنوع تماماً (يفرض NOT NULL تلقائياً) | مسموح ما لم يُضف قيد NOT NULL |
| نوع الفهرس في InnoDB | فهرس عنقودي يرتب صفوف الجدول فعلياً | فهرس ثانوي فريد يشير للمفتاح الأساسي |
الاقتران بـ AUTO_INCREMENT | النمط القياسي لتوليد المعرّفات | نادر الاستخدام مقارنة بالمفتاح الأساسي |
ملخص الدرس: تعلمت في هذا الدرس كيفية تعريف المفتاح الأساسي PRIMARY KEY المفرد والمركّب ودوره كفهرس عنقودي في InnoDB، وتوليد المعرّفات المتسلسلة عبر AUTO_INCREMENT، واسترجاع آخر معرّف خاص بالجلسة عبر LAST_INSERT_ID().
الخطوة التالية والدرس القادم: انتقل إلى الدرس التالي لتعلّم قيد التحقق الشرطي CHECK لفرض الشروط المنطقية على قيم الصفوف في MySQL 8.
ملخص الدرس
حصاد الدرسمراجعة مركّزة لأهم المفاهيم والقواعد الهندسية التي أتقنتها في هذا الدرس قبل التطبيق العملي
ماذا تعلّمت في هذا الدرس؟
يُوصى دائماً بتزويد كل جدول InnoDB بمفتاح أساسي رقمي موجب متسلسل مع استخدام LAST_INSERT_ID() لاسترجاع المعرّف بأمان. الخطوة التالية: انتقل الآن إلى درس «قيد التحقق الشرطي CHECK على قيم الصفوف في MySQL».
سجّل الدخول لحفظ تقدمك
تابع إنجاز المواضيع والمصطلحات والمهام، وكمّل من آخر خطوة على أي جهاز.
المصطلحات5
راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.
- 01 Primary Key المفتاح الأساسي
- تعلّم قيد المفتاح الأساسي PRIMARY KEY والترقيم التلقائي بأسلوب MySQL 8 الحديث مع أمثلة استعلامات SQL وتطبيقات تفاعلية.
- للمراجعة
- 02 Defining Table PRIMARY KEY تعريف المفتاح الأساسي للجدول
- المفهوم الهندسي والصياغة العملية الخاصة بقسم تعريف المفتاح الأساسي للجدول في MySQL 8.
- للمراجعة
- 03 Sequential AUTO INCREMENT Keys الترقيم التلقائي AUTO_INCREMENT
- المفهوم الهندسي والصياغة العملية الخاصة بقسم الترقيم التلقائي AUTO_INCREMENT في MySQL 8.
- للمراجعة
- 04 Using LAST INSERT ID استرجاع المعرّف بـ LAST_INSERT_ID
- المفهوم الهندسي والصياغة العملية الخاصة بقسم استرجاع المعرّف بـ LAST_INSERT_ID في MySQL 8.
- للمراجعة
- 05 Composite PRIMARY KEY Design المفتاح الأساسي المركّب للجدول
- المفهوم الهندسي والصياغة العملية الخاصة بقسم المفتاح الأساسي المركّب للجدول في MySQL 8.
- للمراجعة
لا توجد بطاقات تطابق البحث والتصفية.
اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.
الاختصارات4
راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.
- 01 PK PK
- Primary Key
- المفتاح الأساسي الفريد غير القابل للفراغ والذي يشكّل الفهرس العنقودي لجدول InnoDB.
- للمراجعة
- 02 AI AI
- AUTO_INCREMENT Column Attribute
- خاصية العمود في MySQL المسؤولة عن توليد أرقام متسلسلة تلقائياً للسجلات الجديدة.
- للمراجعة
- 03 PDO PDO
- PHP Data Objects
- واجهة اتصال قواعد البيانات في PHP التي تقرأ آخر معرّف مولّد عبر الدالة lastInsertId().
- للمراجعة
- 04 ID ID
- Identifier (Surrogate Row Key)
- عمود المعرّف الرقمي الذي يميز كل سجل بشكل فريد داخل الجدول.
- للمراجعة
لا توجد بطاقات تطابق البحث والتصفية.
اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.
مهامك قبل الاختبار
خطوة صغيرة كل مرة. وإنجاز تقدر ترجع له.
-
نفّذ أمثلة SQL المشروحة في قسم تعريف المفتاح الأساسي للجدول داخل قاعدة بياناتك المحلية وتحقق من النتيجة.
-
بدّل بين الحالات التفاعلية في قسم الترقيم التلقائي AUTO_INCREMENT وقارن كيف يعالج محرك MySQL 8 كل أمر.
تأشير المهمة إقرار منك بإتمامها، وليس تصحيحًا آليًا للكود. يُحفظ تقدمك في حسابك.
اختبر فهمك.
ووصلها للإتقان.
كل سؤال خطوة لقدّام. اختار، اكتب كود، وشوف نتيجتك فورًا.
أكمل المهام، واجمع كل الإجابات الصحيحة. أقل من 100%؟ راجع وأعد المحاولة.
الأسئلة متاحة للاطلاع. سجّل الدخول للتفاعل وحفظ تقدمك.
لمحة عن التحدي5 أسئلة تنتظرك +
كم مفتاحاً أساسياً (PRIMARY KEY) يمكن أن يملكه جدول واحد في MySQL؟
لا يمكن للجدول أن يملك أكثر من مفتاح أساسي واحد فقط (سواء كان مفرداً أو مركّباً من عدة أعمدة).
يمكن لعمود المفتاح الأساسي PRIMARY KEY في MySQL أن يقبل تخزين القيمة NULL إذا لم تكتب NOT NULL صراحةً.
خطأ؛ يفرض خادم MySQL تلقائياً قيد NOT NULL على جميع أعمدة المفتاح الأساسي دون استثناء.
أي خيار جدول يضبط نقطة البداية الأولية لعمود الترقيم التلقائي AUTO_INCREMENT عند الرقم 1000؟
كتابة الخيار AUTO_INCREMENT = 1000 في نهاية CREATE TABLE أو عبر ALTER TABLE تضبط بداية العداد عند 1000.
ما اسم الدالة المدمجة في MySQL التي تُرجع آخر قيمة AUTO_INCREMENT تم توليدها داخل جلسة الاتصال الحالية؟
تُرجع الدالة LAST_INSERT_ID() آخر رقم تلقائي ولّدته جلسة الاتصال الحالية بأمان تام.
تعمل دالة LAST_INSERT_ID() بمعزل لكل اتصال، فلا تؤثر إدخالات المستخدمين الآخرين المتزامنة على الرقم الذي تعيده لجلستك.
صواب؛ يحتفظ خادم MySQL بقيمة LAST_INSERT_ID() بشكل مستقل لكل جلسة اتصال.