یک روز کاری پر انرژی رو شروع می کنی و می خواهی یک ارتباط ساده بین دو جدول در پایگاه داده MySQL ایجاد کنی؛ اصلا فکرش رو هم نمی کردی که دستور ساده زیر پیام خطایی رو بده که کل روزت رو صرف debug اون بکنی:
ALTER TABLE `BlogPosts` ADD CONSTRAINT `FK_myKey` FOREIGN KEY (`BlogID`) REFERENCES `Blogs` (`ID`) ON DELETE CASCADE ON UPDATE CASCADE
دستور رو اجرا می کنی و دااانگ... با پیام خطای کاملا بیربط زیر روبرو می شی:
MySQL Error Number 1005 Can’t create table ‘.\mydb\#sql-328_45.frm’ (errno: 150)
خوب این فایل sql-328_45.frm چه ربطی به کلید خارجی ما
داره؟ آیا مشکلی در ایجاد اون به علت سطوح دسترسی سیستم عامل به وجود آمده؟
نه!
این طور نیست. جواب معما را در جایی دیگر و دقیقا در جدول ها و فیلد هایی که در
دستور بالا استفاده کردیم هست اش. یکی از حالت های زیر یا ترکیبی از آنها میتواند
عامل این اتفاق باشد.
اگه موارد بالا نتوانست مشکل شما رو حل بکند میتوانید برای مشاهده آخرین error مربوط به کلیدهای خارجی دستور زیر رو در MySql اجرا کنید:
SHOW ENGINE INNODB STATUS
و سپس در خروجی این دستور به دنبال بخش LATEST FOREIGN KEY ERROR بگردید. این بخش می تواند اطلاعات کافی ای در اختیار شما قرار دهد تا بتوانید به راحتی مشکل مربوط به کلید های خارجی و ارتباط جدول ها را حل کنید.
I'm Arash Milani, hacker & happiness ninja.
@narmand is our teams's lab to experiment awesome things in it.
I write and talk about hacking, developing web apps, teamwork and designing for better user experience.
You can always contact me via me[at]arashmilani.com email address.
Comments
فکرشو نکرده بودم
Any thoughts? Please leave a reply