PDA

View Full Version : مشکل با کلید خارجی



parsabit
دوشنبه 01 بهمن 1386, 12:12 عصر
دوستان من یه مشکل در استفاده از کلید خارجی توی Mysql دارم. (از Easyphp 1_8 استفاده کردم.)


Error, query failed : Cannot add or update a child row: a foreign key constraint fails
بطور کلی کلید خارجی رو درست تعریف کردم؟ (شکل صحیحش چطوریه؟)



CREATE TABLE members (
members_id int(4) NOT NULL auto_increment,
name varchar(65) NOT NULL,
lastname varchar(65) NOT NULL,
email varchar(65) NOT NULL,
password varchar(65) NOT NULL,
PRIMARY KEY (members_id)
)ENGINE = INNODB;

CREATE TABLE upload2 (
upload2_id INT NOT NULL AUTO_INCREMENT,
members_id int(4) NOT NULL,
name VARCHAR(30) NOT NULL,
size INT NOT NULL,
path VARCHAR(60) NOT NULL,
INDEX mem_ind (members_id),
PRIMARY KEY(upload2_id),
FOREIGN KEY (members_id) REFERENCES members (members_id)
ON DELETE CASCADE
ON UPDATE CASCADE
)ENGINE = INNODB;

oxygenws
دوشنبه 01 بهمن 1386, 12:18 عصر
پرس و جویی که ارسال می کنی چی هست؟

parsabit
دوشنبه 01 بهمن 1386, 12:37 عصر
هر پرس و جویی . اصلا همین درج اطلاعات. مثل
INSERT INTO upload2 VALUES(1,2, 'ali',222,'sdfsd')

oxygenws
دوشنبه 01 بهمن 1386, 12:47 عصر
هر پرس و جویی .
مسلما هر پرس و جویی نیست!!!
محتوای جداولت رو هم بفرست. (یا مختصرا، اصلا سطری در جدول members با id به شمارهء ۲ داری؟)

parsabit
دوشنبه 01 بهمن 1386, 18:47 عصر
ممنون از محبتت.


(یا مختصرا، اصلا سطری در جدول members با id به شمارهء ۲ داری؟)
آره دیگه , دو سطر با id یک و 2 دارم!
تعریف کلید خارجی به اون شکلی که من انجام دادم درسته و ارتباطش مشکلی نداره؟

البته من زیاد با MySQL کار نکردم , نمی دونم سبک و سیاق تعریف کلید خارجی و ارتباطاتش چه جوریه ! :بامزه:
فقط می خوام با آپدیت هر فایل, id اون یوزر هم توی جدول آپلود بیاد که مشخص بشه کدوم فایل توسط کدوم یوزر ارسال شده.

oxygenws
دوشنبه 01 بهمن 1386, 19:14 عصر
فقط می خوام با آپدیت هر فایل, id اون یوزر هم توی جدول آپلود بیاد که مشخص بشه کدوم فایل توسط کدوم یوزر ارسال شده.
البته برای این کار نیازی به کلید خارجی نداری.
کلید خارجی ساختن (۱) دسترسی ات رو محدود می کنه (که این هم خوبه و هم بد) و (۲) می تونی از امکانات دیگه ای مثل cascading استفاده کنی. ولی اگر تو این مثالت کلید خارجی رو برداری اتفاقی نمیافته.

در مورد سوالت هم من که مشکلی نمی بینم :)
برای کلید های خارجی هم می تونی اینو ببینی:
http://dev.mysql.com/doc/refman/5.0/en/innodb-foreign-key-constraints.html

parsabit
سه شنبه 02 بهمن 1386, 09:34 صبح
مرسی از راهنمایی هات.
راستش اون Qoury بالا رو با هر نحوی شد توی MySQL تونستم انجام بدم.
اما با کد PHP اینکارو نمی تونم انجام بدم. یعنی مقدار دهی به جدولی که درش یک کلید خارجی هست به چه شکله؟ این قطعه کدی هست که من برای آپلود فایل تا قبل از به کار بردن کلید خارجی استفاده می کردم .


$query = "INSERT INTO upload2 (name, size, path ) "."VALUES ('$fileName', '$fileSize', '$filePath')";

که کما کان با همون ارور روبرو می شه!

reza_rad
سه شنبه 02 بهمن 1386, 10:05 صبح
یعنی مقدار دهی به جدولی که درش یک کلید خارجی هست به چه شکله؟
دوست عزیز اینجا پاسخ همین سوال شما داده شده:

یا مختصرا، اصلا سطری در جدول members با id به شمارهء ۲ داری؟
شما باید قبل از اینکه در جدولی که در اون کلید خارجی به یک جدول دیگه داری مقداری رو درج کنی، اول مطمئن بشی که رکورد متناظر با این کلید خارجی در جدول اصلی وجود داره یا نه؟ در صورتیکه شما مقداری رو بخوای درج کنی که توی جدول اصلی نباشه مسلما با ارور بالا مواجه میشی.

oxygenws
سه شنبه 02 بهمن 1386, 10:05 صبح
من منظورت رو از این پست نفهمیدم!