🚀 تخفیف ۳۵٪ + ۳.۵ میلیون هدیه! برنامه‌نویسی رو الان شروع کن - فقط امروز!
۰ ثانیه
۰ دقیقه
۰ ساعت
۷ هادی جیبر
پیغام خطا در هنگام حذف اولین رکورد پایگاه داده
جامعه پی اچ پی ایجاد شده در ۳۱ تیر ۱۴۰۲

سلام

در هنگان خذف اولین رکورد از پایگاه داده (اولین فولدر) پیغام خطای زیر نمایش داده میشه و رکورد حذف نمیشه.

لطفا در این خصوص کمی توضیح می‌دین.

Fatal error: Uncaught PDOException: SQLSTATE[23000]: Integrity constraint violation: 1451 Cannot delete or update a parent row: a foreign key constraint fails (`taskmanager`.`task`, CONSTRAINT `tfid_fk` FOREIGN KEY (`folder_id`) REFERENCES `folder` (`id`)) in C:\\xampp\\htdocs\\todo\\process\\lib-tasks.php:25 Stack trace: #0 C:\\xampp\\htdocs\\todo\\process\\lib-tasks.php(25): PDOStatement->execute() #1 C:\\xampp\\htdocs\\todo\\index.php(7): delfolder('1') #2 {main} thrown in C:\\xampp\\htdocs\\todo\\process\\lib-tasks.php on line 25

سلام هادی جان،

بین جداول در MySQL، رابطه خارجی با استفاده از کلیدهای خارجی (Foreign Key) برقرار میشه. این کلیدها ارتباط بین داده‌های دو جدول رو تعیین می‌کنن. بنابراین، اگر اعتبارسنجی رابطه خارجی در زمان ایجاد یا به روزرسانی داده‌ها یا حذف یه رکورد ناموفق باشه، خطای کلید خارجی رخ میده.

دلایل ممکن برای خطای کلید خارجی شامل:

  1. رکوردهای مرتبط در جدول مرجع وجود ندارن.
  2. کلید خارجی در جدول جداول دیگه رو نمیشه مطابقت داد.
  3. تلاش برای حذف یا به روزرسانی رکوردی که با رکوردهای دیگر در جدول‌های دیگر ارتباط دارن.
  4. نقض قوانین اعتبارسنجی رابطه خارجی مثل ON DELETE و ON UPDATE.
صادق برزگر ۳۱ تیر ۱۴۰۲، ۱۵:۴۵

راه کار برای حذف رکورد اول چیست؟

هادی جیبر ۰۱ مرداد ۱۴۰۲، ۰۴:۰۸

از طریق phpmyadmin سعی کنید اینکار رو انجام بدید. توی صفحه دیتابیس که لیست همه جدول‌ها مشخص هست، جدول‌ها چندتا گزینه روبروشون هست، روی گزینه Empty جدول مدنظرتون بزنین و تیک Enable Foreign رو بردارید و اوکی رو بزنید تا جدول رو کلا خالی کنه.

صادق برزگر ۰۱ مرداد ۱۴۰۲، ۰۷:۴۰

یعنی از طریق کدهای نوشته شده امکان پذیر نیست؟

پس در پروژه‌های بزرگ که تحویل مشتری میدن باید بهشون بگیم از طریق از طریق phpmyadmin اینکار رو انجام بدید؟

هادی جیبر ۰۱ مرداد ۱۴۰۲، ۰۹:۱۰

چرا از طریق کدها هم راهکار داره، من فکر کردم مشکلتون موقع توسعه کدها رخ داده و بهتون بر اساس اون راهکار دادم.

برای اینکه بتونید کنترل روی کلیدهای خارجی داشته باشین، موقع ساختشون باید مشخص کنین که اگه اون رکورد مرجع که کلید خارجی بهش وصل شده حذف شد چ اتفاقی بیوفته؟ مثلا میتونه رکورد‌های کلید خارجی هم حذف بشن یا اینک نال بشن یا اصلا اتفاقی براشون رخ نده. اگه یکی از این قوانین رو براش مشخص نکنین اروری شبیه به چیزی که فرستاید معمولا رخ میده.

صادق برزگر ۰۱ مرداد ۱۴۰۲، ۱۱:۲۲

آیا در این دوره آموزشی راه کار اعلام شده آموزش داده میشه (منظور بصورت پروژه عملی)؟

هادی جیبر ۰۱ مرداد ۱۴۰۲، ۱۱:۲۸

همونطور که صادق توضیح دادن شما اگر روابطی برای ON UPDATE و ON DELETE مشخص کنید دیگر نیازی نیست مشتری از phpmyadmin رکوردی رو مدیریت کنه. بهترین کار برای مدیریت روابط به همین شکل است و در فریمورک‌ها زمانی که migration هارو مشخص میکنید این قیدهارو در زمان حذف و ویرایش هم مشخص میکنید که چه اتفاقی بیوفته. طبق تصویر زمانیکه که کلید خارجی تعریفق میکنید این دو مقدارو هم ست خواهید کرد:

519d-Screenshot 2023-07-24 061129.png

وقتی CASCADE باشد بصورت آبشاری روی تمامی رکوردهای وابسته تأثیر میگذارد در زمان حذف، تمامی رکوردها حذف میشوند و در زمان آپدیت، آپدیت میشوند.

بهترین پاسخ
محسن موحد ۰۲ مرداد ۱۴۰۲، ۰۲:۵۰