سؤال

أنا إنشاء قاعدة البيانات باستخدام phpMyAdmin.لدي جدولين (foo و bar), مفهرسة على المفاتيح الأساسية.أنا أحاول إنشاء جدول العلائقية (foo_bar) بين لهم باستخدام المفاتيح الأساسية مثل المفاتيح الخارجية.

أنا خلقت هذه الجداول كما MyISAM, ولكن منذ ذلك الحين تغير كل ثلاثة إلى ك InnoDB, لأنني قرأت أن MyISAM لا يدعم مفاتيح خارجية.كل id الحقول INT(11).

عندما اخترت foo_bar الجدول ، انقر على "علاقة عرض" الرابط, و محاولة تعيين FK الأعمدة أن تكون database.foo.id و database.bar.id, يقول "لا يوجد مؤشر المعرفة!" بجانب كل عمود.

ما أنا في عداد المفقودين ؟

توضيح/تحديث

من أجل البساطة ، أريد الاستمرار في استخدام بريس.أنا حاليا باستخدام XAMPP ، والتي من السهل بما فيه الكفاية للسماح لي التركيز على PHP/CSS/جافا سكريبت ، كما أنه يأتي مع بريس.

أيضا, على الرغم من أنني لم أكن قادرا على إعداد صريحة المفاتيح الخارجية بعد, لدي جدول العلائقية و يمكن أن تؤدي ينضم مثل هذا:

SELECT * 
FROM foo 
INNER JOIN foo_bar 
ON foo.id = foo_bar.foo_id 
INNER JOIN bar
ON foo_bar.bar_id = bar.id;

هو فقط يجعلني غير مريح لا FKs بوضوح في قاعدة البيانات.

هل كانت مفيدة؟

المحلول

إذا كنت ترغب في استخدام بريس لاقامة العلاقات عليك أن تفعل الأشياء 2.أولا وقبل كل شيء عليك أن تحدد فهرس على عمود المفتاح في اشارة الجدول (حتى foo_bar.foo_id في حالتك).ثم انتقل إلى علاقة عرض (في اشارة الجدول) وحدد أشار العمود (حتى في حالة فو.معرف) و تحديث و حذف الإجراءات.

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

تحرير:تأكد من أن كلا من الجداول ك InnoDB المحرك المحدد.

نصائح أخرى

بريس يتيح لك تحديد مفاتيح خارجية باستخدام "العلاقات" عرض.ولكن منذ, MySQL فقط يدعم الخارجية القيود على "ابتكارات DB" الجداول ، فإن الخطوة الأولى هي التأكد من الجداول التي تستخدم هذا النوع.

لإعداد الأجنبية الرئيسية بحيث PID عمود في جدول يسمى الطفل المراجع الهوية عمود في جدول يسمى الوالدين ، يمكنك القيام بما يلي:

  1. لكل من الجداول ، انتقل إلى علامة التبويب العمليات وتغيير نوع "ابتكارات ديسيبل"
  2. تأكد من الهوية هو المفتاح الأساسي (أو على الأقل عمود مفهرس) من الجدول الأصل.
  3. في الجدول الطفل, تعريف فهرس على عمود PID.
  4. أثناء عرض هيكل التبويب الطفل الجدول ، انقر على "علاقة عرض" الموجود فوق "إضافة الحقول" المقطع.
  5. سوف تحصل على الجدول حيث كل صف يمثل عمود مفهرس في العميل الخاص بك الجدول.أول المنسدلة في كل صف يتيح لك اختيار الجدول->العمود عمود مفهرس المراجع.في صف PID اختيار الأم->معرف من القائمة المنسدلة ثم انقر فوق انتقال.

عن طريق القيام التصدير على الطفل الجدول, يجب أن تشاهد قيد المفتاح الخارجي تم إنشاء عمود PID.

هذا ملخص مقالة في ويكيبيديا.وهي تحدد أنواع مختلفة من العلاقات التي يمكن أن تنص في PHPmyadmin.أضعها هنا لأنها ذات الصلة @ناثان التعليق على وضع المفاتيح الخارجية الخيارات "على تحديث/حذف" ولكن هو كبير جدا بالنسبة تعليق - آمل أن يساعد.

تتالي

كلما الصفوف في الماجستير (المشار إليه) الجدول يتم حذف (resp.محدث), كل الصفوف الطفل (الرجوع) الجدول مع مطابقة الخارجية عمود المفتاح سيتم حذفها (resp.تحديث) كذلك.وهذا ما يسمى تتالي حذف (resp.تحديث[2]).

تقييد

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

لا العمل

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

تعيين NULL

المفتاح الخارجي القيم في الرجوع إلى صف يتم تعيين إلى NULL عندما المشار إليها صف يتم تحديثها أو حذفها.هذا ممكن فقط إذا كان كل الأعمدة في الرجوع إلى الجدول nullable.بسبب دلالات فارغة ، الرجوع إلى صف مع بالقيم الخالية في الخارجية الأعمدة الرئيسية لا تتطلب الرجوع إليها التوالي.

تعيين الافتراضي

على غرار تعيين NULL الخارجية القيم الرئيسية في الرجوع إلى صف يتم تعيين العمود الافتراضي عندما المشار إليها صف يتم تحديثها أو حذفها.

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

enter image description here

يمكنك تعيين تزوير الرئيسية من قائمة مربع قرب طريق المفتاح الأساسي.(انظر الصورة أدناه).وحفظ

enter image description here

المقابلة استعلام SQL تلقائيا و تنفيذها.

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

قبل أي شيء آخر ، نلقي نظرة على هذا.

  1. تأكد من أن لديك P_ID (الأم معرف على كل من الأم والطفل الجدول).
  2. بالطبع سوف تكون مليئة بالفعل في الأصل.ليس بالضرورة في الطفل في صحيح النهائي الطريق.هكذا على سبيل المثال P_ID #3 (ربما عدة مرات في الطفل الجدول سيتم مشيرا إلى الأصلي P_ID في الجدول الأصل).
  3. انتقل إلى التبويب SQL (أنا باستخدام بريس ، يجب أن تكون مماثلة في البعض منها) وهل هذا الأمر:

    ALTER TABLE child_table_name    
    ADD FOREIGN KEY (P_ID)   
    REFERENCES parent_table_name (P_ID)
    
  4. انقر على الجدول من هيكل أخيرا على العلائقية الرأي.الانتهاء من DB التخطيط هناك.كان هناك لطيفة الجواب قبل هذا عن شلال, تقييد, الخ.بالطبع يمكن القيام به عن طريق الأوامر...

المفتاح الخارجي يعني عدم الوزراء سمة من الجدول referes رئيس الوزراء سمة أخرى *في phpMyAdmin* أول مجموعة العمود الذي تريد تعيين مفتاح الأجانب وذلك في مؤشر

ثم انقر على علاقة عرض

هناك ش يمكن العثور على خيارات لضبط الأجنبية الرئيسية

ك InnoDB يسمح لك لإضافة جديد قيد المفتاح الخارجي إلى جدول باستخدام ALTER TABLE:

ALTER TABLE tbl_name
    ADD [CONSTRAINT [symbol]] FOREIGN KEY
    [index_name] (index_col_name, ...)
    REFERENCES tbl_name (index_col_name,...)
    [ON DELETE reference_option]
    [ON UPDATE reference_option]

من ناحية أخرى, إذا MyISAM مزايا أكثر InnoDB في السياق الخاص بك لماذا كنت ترغب في إنشاء قيود المفاتيح الخارجية على الإطلاق.يمكنك التعامل مع هذا النموذج مستوى التطبيق الخاص بك.فقط تأكد من الأعمدة التي تريد استخدامها كمفاتيح خارجية يتم فهرستها!

لا ننسى أن اثنين من الأعمدة يجب أن يكون نفس نوع البيانات.

على سبيل المثال إذا كان أحد عمود من نوع INT و أخرى من نوع tinyint سوف تحصل على الخطأ التالي:

خطأ في إنشاء المفتاح الخارجي على [PID عمود] (التحقق من أنواع البيانات)

الخطوة 1:لديك لإضافة خط:الافتراضي-تخزين محرك = ك InnoDB تحت [mysqld] القسم الخاص بك الخلية config (بلدي.cnf أو بلدي.ini اعتمادا على نظام التشغيل الخاص بك) وإعادة تشغيل mysqld الخدمة.enter image description here

الخطوة 2:الآن عند إنشاء الجدول سترى نوع الجدول:ك InnoDB

enter image description here

الخطوة 3:خلق كل من الأم والطفل الجدول.الآن فتح الطفل الجدول و حدد العمود U مثل أن يكون المفتاح الخارجي:حدد مفتاح المؤشر من العمل التسمية كما هو مبين أدناه.

enter image description here

الخطوة 4:الآن فتح علاقة عرض في نفس الطفل من الجدول السفلي بالقرب من طريقة عرض الطباعة كما هو مبين أدناه.

enter image description here الخطوة 5:حدد العمود U مثل أن يكون المفتاح الخارجي كما حدد الوالد عمود من القائمة المنسدلة.dbName.TableName.ColumnName

تحديد القيم المناسبة للحصول على حذف و تحديث enter image description here

من المسؤول الخلية الوثائق في https://dev.mysql.com/doc/refman/8.0/en/create-table-foreign-keys.html:

الخلية يتطلب مؤشرات على مفاتيح خارجية و المشار إليه مفاتيح بحيث المفاتيح الخارجية الشيكات يمكن أن تكون سريع و لا يتطلب مسح الطاولة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top