انتقل إلى محتوى الدرس
الدرس 18
دورة MySQL

قيد المفتاح الأساسي PRIMARY KEY والترقيم التلقائيMySQL PRIMARY KEY and AUTO INCREMENT

تعلّم قيد المفتاح الأساسي PRIMARY KEY والترقيم التلقائي بأسلوب MySQL 8 الحديث مع أمثلة استعلامات SQL وتطبيقات تفاعلية.
أقسام الدرس
6
الأمثلة
5
اللغة
العربية
تاريخ النشر
غير محدد
المشاهدات
8
محتوى الدرس
في هذا الدرس 6تصفّح المواضيع

يمثل المفتاح الأساسي PRIMARY KEY الهوية الفريدة لكل سجل داخل الجدول العلائقي. وهو يجمع بين صرامة قيد NOT NULL وقيد التفرد UNIQUE، مع قاعدة معمارية حاسمة: لا يمكن للجدول أن يملك أكثر من مفتاح أساسي واحد فقط:

  • منع القيم الفارغة تلقائياً: حتى لو لم تكتب NOT NULL صراحةً، يفرض MySQL تلقائياً خاصية NOT NULL على جميع أعمدة المفتاح الأساسي.
  • الفهرس العنقودي في InnoDB: يرتب محرك InnoDB صفحات بيانات الجدول فعلياً على القرص الصلب وفق تسلسل المفتاح الأساسي (Clustered Index).
مخطط يوضح المفتاح الأساسي PRIMARY KEY والترقيم التلقائي AUTO_INCREMENT واسترجاع آخر معرّف عبر LAST_INSERT_ID()
SQL
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 لمضاعفة المدى الموجب للأرقام:

SQL
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).
SQL
SELECT LAST_INSERT_ID();

رغم أن الجدول لا يملك إلا مفتاحاً أساسياً واحداً، يمكن لهذا المفتاح أن يتألف من عمودين أو أكثر معاً فيما يُعرف باسم المفتاح الأساسي المركّب (Composite Primary Key). ويُعد هذا النمط مثالياً لجداول الربط وتفاصيل الطلبات:

SQL
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:

SQL
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

راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.

0 / 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

راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.

0 / 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)
عمود المعرّف الرقمي الذي يميز كل سجل بشكل فريد داخل الجدول.
للمراجعة

اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.

من الفهم للتطبيق

مهامك قبل الاختبار

خطوة صغيرة كل مرة. وإنجاز تقدر ترجع له.

0/2مهام منجزة
  1. نفّذ أمثلة SQL المشروحة في قسم تعريف المفتاح الأساسي للجدول داخل قاعدة بياناتك المحلية وتحقق من النتيجة.

  2. بدّل بين الحالات التفاعلية في قسم الترقيم التلقائي AUTO_INCREMENT وقارن كيف يعالج محرك MySQL 8 كل أمر.

تأشير المهمة إقرار منك بإتمامها، وليس تصحيحًا آليًا للكود. يُحفظ تقدمك في حسابك.

مساحة التحدي

اختبر فهمك.
ووصلها للإتقان.

كل سؤال خطوة لقدّام. اختار، اكتب كود، وشوف نتيجتك فورًا.

5أسئلة 2أنواع تحديات 100%هدف الإتقان
تصحيح تلقائي. فرص بلا حدود.

أكمل المهام، واجمع كل الإجابات الصحيحة. أقل من 100%؟ راجع وأعد المحاولة.

الأسئلة متاحة للاطلاع. سجّل الدخول للتفاعل وحفظ تقدمك.

لمحة عن التحدي5 أسئلة تنتظرك
01

كم مفتاحاً أساسياً (PRIMARY KEY) يمكن أن يملكه جدول واحد في MySQL؟

لا يمكن للجدول أن يملك أكثر من مفتاح أساسي واحد فقط (سواء كان مفرداً أو مركّباً من عدة أعمدة).

02

يمكن لعمود المفتاح الأساسي PRIMARY KEY في MySQL أن يقبل تخزين القيمة NULL إذا لم تكتب NOT NULL صراحةً.

خطأ؛ يفرض خادم MySQL تلقائياً قيد NOT NULL على جميع أعمدة المفتاح الأساسي دون استثناء.

03

أي خيار جدول يضبط نقطة البداية الأولية لعمود الترقيم التلقائي AUTO_INCREMENT عند الرقم 1000؟

كتابة الخيار AUTO_INCREMENT = 1000 في نهاية CREATE TABLE أو عبر ALTER TABLE تضبط بداية العداد عند 1000.

04

ما اسم الدالة المدمجة في MySQL التي تُرجع آخر قيمة AUTO_INCREMENT تم توليدها داخل جلسة الاتصال الحالية؟

تُرجع الدالة LAST_INSERT_ID() آخر رقم تلقائي ولّدته جلسة الاتصال الحالية بأمان تام.

05

تعمل دالة LAST_INSERT_ID() بمعزل لكل اتصال، فلا تؤثر إدخالات المستخدمين الآخرين المتزامنة على الرقم الذي تعيده لجلستك.

صواب؛ يحتفظ خادم MySQL بقيمة LAST_INSERT_ID() بشكل مستقل لكل جلسة اتصال.