• 1400/02/19

چگونه FOREIGN KEY به جدول موجود اضافه بکنم؟ :

با سلام خدمت تمام دوستان و استاد عزیزم

همه میتونن به این سوال جواب بدن و راحت باشید

من انگاری در درست کردن جدول comments یک خط کد یادم رفته بود بنویسم اونم این بود که user_id رو مشخص نکرده بودم که به id جدول users ربط داره.

و توی جداول هم میبینید که user_id جدول کامنت به id جدول user وصل نشده. من کد زیر رو اجرا کردم و اجرا نشد و میگه نمیشه update اش کرد.

ALTER TABLE comments ADD FOREIGN KEY (`user_id`) REFERENCES users(`id`);

رفتم سرچ کردم از استک و w3 که کد های مشابهی داشتن ولی منظورشون رو از fk متوجه نشدم. کدهاشون به این صورت بود:

ALTER TABLE Orders
ADD CONSTRAINT FK_PersonOrder
FOREIGN KEY (PersonID) REFERENCES Persons(PersonID);

سوالم این بود که FK_PersonOrder چیه جداول ما هستش؟

 

 

  • 1400/02/19
  • ساعت 10:46

سلام دوست عزیز ،

هر فیلد جدولی رو میخوای کلید خارجی بسازی . وارد جدول شو از بالا گزینه structure و relation view رو انتخاب کن و کلید رو بساز و ok کن.

اینم مفهومه constraints


  • 1400/02/19
  • ساعت 12:26

سلام خیلی ممنونم زحمت کشیدید

اینایی که توضیح دادین رو بلدم و تحقیق کردم در موردشون. من میخام یدونه متود ایجاد بکنم که تمام کلید ها را اونجا بررسی بکنم و اضافه بکنم. بخاطر اون هم سوالم رو اینطوری پرسیدم.

اگر sql اون رو میدونید لطفا بگین، خیلی ممنون میشم(البته من اون بالا نوشتم sql اش رو فقط اون fk نمیدونم چیه

ALTER TABLE `comments` ADD CONSTRAINT `comments_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `users`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;

شکل صحیح اون رو میتونید بالا ببینید ولی چرا مثلا اینجا `comments_ibfk_1` مقدارش هست؟

و جالب اش اینجاست که کد بالا هم اجرا نمیشه. و ارور پایین رو به من نشون میده.

Error

SQL query:

ALTER TABLE `comments` ADD  CONSTRAINT `comments_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `users`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;

MySQL said:

#1452 - Cannot add or update a child row: a foreign key constraint fails (`blog`.`#sql-cc8_ce`, CONSTRAINT `comments_ibfk_2` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE ON UPDATE CASCADE)

 

خیلی ممنون


  • 1400/02/19
  • ساعت 17:07

سلام 

روزتون بخیر 

من الان از سایت w3 نگاه کردم به طور کلی این طوری این مثلا رو توضیح داد دو تا جدول داریم به اسم Person  و Order جدول Person یک سری مقادیر میگیره بعد یکی فیلد داره به اسم Person_id که این کلید خارجی یا همون Forign key تو جدول Order هست ولی تو جدول  Person کلید اصلی و با این فیلد هست که میشه مقادیر جدول Person رو تو جدول Order تغییر داد دلیلشم این طوره که (محدودیت کلید خارجی از قرار دادن داده های نامعتبر در ستون کلید خارجی جلوگیری می کند ، زیرا باید یکی از مقادیر موجود در جدول والد باشد.) یعنی این که کلید خارجی اجازه نمیده مقادیر نامعتبر که تو جدول والد(یعنی Person) رو اضافه کنی به جدول فرزند مثل این میمونه یک دانشجو میاد دانشگاه بهش یک شماره دانشجویی میدن دیگه تو جدول دانشجو و این شماره دانشجویی یک id هست که کلید خارجی هست حالا اون دانشجو هر امکانات بخواد استفاده کنه با استفاده از اون شماره دانشجویی میتونه مثلا بخواد خوابگاه ثبت نام کنه اون شماره دانشجوییش میشه کلید خارجی تو اون جدول مربوط به خوابگاه و اگه مقدار نامربوط باشه خطا میده امیدوارم درست منظورمو رسونده باشم

موفق باشید

ALTER TABLE Orders
ADD CONSTRAINT FK_PersonOrder
FOREIGN KEY (PersonID) REFERENCES Persons(PersonID);

 


  • 1400/02/19
  • ساعت 17:45

سلام خیلی ممنون

من این خط کد رو اضافه کردم ولی هیچ نتیجه ای نمیگیرم و ارور میده بهم.

ارور رو هم بالا نوشتم. حتی اجازه نمیده خودم دستی اون کلید خارجی رو وارد بکنم و اینم بهم ارور میده و ارور هر دوتاشون با هم یکی هستن.

من دو روز هستش که به این مشکل بر خوردم و هیچ کاری از دستم برنمیاد٬ جز اینکار که comments رو حذف بکنم و از اول اون رو درست بکنم.

در صورت پیدا کردن راه حل لطفا اطلاع بدین خیلی ممنون.


  • 1400/02/19
  • ساعت 19:36

با سلام خواهش 

انشالله حل میشه

ولی به نظرم سایت https://www.w3schools.com/sql/sql_foreignkey.asp

 رو نگاه کنید کد هاش و توضیحاتش به نظرم کدتون اشتباه مینوسید

موفق باشید


  • 1400/02/23
  • ساعت 01:03

با سلام خدمت شما همراه عزیز

 

 

کدوم بخش کد رو متوجه نمیشید؟


logo-samandehi