خطا در تعریف foreign key

پرسیده شده
فعالیت 993 روز پیش
دیده شده 414 بار
0

سلام  و عرض ادب.
 

بنده دو جدول دارم برای مثال جدول users که مشخصات کاربران در اون هست و جدول دیگری به اسم مثلا orders که این هم مشخصات سبد خرید درش قرار داره.

بنده میخوام یک جدولی داشته باشم که مشخصات سبد خرید و کاربری که سبد خرید برای اون هست در این جدول ثبت بشه و برای این دو foreign key میخوام تعریف کنم که یکی اشاره به ایدی کاربر و دیگری به ایدی اون سبد خرید اشاره میکنه. اما موقع ساخت جدول به این ارور برخورد می‌کنم :

 

-- command

MariaDB@archlinux [train]> create table table_name ( orders int unsigned references orders(id), users int references users(id), id int not null primary key);

-- error 

ERROR 1005 (HY000): Can't create table `train`.`table_name` (errno: 150 "Foreign key constraint is incorrectly formed")

 

ممنون میشم اگر راهنمایی بفرمایید.

فایل پیوست

محمدرضا حسینی
محمدرضا حسینی

18 مرداد 00

1
حذف شده

درود

اگه دارید به شکل دستی کوئری میزنید کوئریتون باید یه همچین چیزی باشه برای foreign key 

CREATE TABLE Orders (
    OrderID int NOT NULL,
    OrderNumber int NOT NULL,
    PersonID int,
    PRIMARY KEY (OrderID),
    FOREIGN KEY (PersonID) REFERENCES Persons(PersonID)
);

 

فایل پیوست

امیر صالحی

توسط

امیر صالحی

18 مرداد 00

0
حذف شده

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

بنده یک  foreign key در یک جدول ندارم.با کوئری بالا هم که براتون ارسال کردم تا زمانی که foreign key در جدول یکی هست مشکلی وجود نداره.طبق مثالی چیزی که فرمودید قبلا امتحان کردم به صورت زیر :
 

create table basket (
id int not null primary key auto_increment ,
userid int,
orderid int,
foreign key (userid) references users(id),
foreign key (orderid) references orders(id)
);

اما همچنان با ارور زیر مواجه میشم:

 

ERROR 1005 (HY000): Can't create table `train`.`basket` (errno: 150 "Foreign key constraint is incorrectly formed")
فایل پیوست

محمدرضا حسینی

توسط

محمدرضا حسینی

18 مرداد 00

0
حذف شده

 

 

سلام 

کالمن foreign key و کالمن primary در جدول دیگه باید یک type داشته باشند 

منظورم اینه که foreign key باید unsign integer و index باشه 

و در شرایطی هم length ها باید یکی باشه 

 

پس شما اول type های کالمن ها رو چک کنید ببینید یکی هستند یا نه 

فایل پیوست

amir tavakolian

توسط

amir tavakolian

18 مرداد 00

حذف شده
بله همه‌ی ستون‌هایی که به عنوان foreign key تعریف شدن با رفرنسشون یک تایپ دارن.
محمدرضا حسینی

18 مرداد 00

0
حذف شده

مشکل شما به احتما زیاد به خاطر اینکه اون idی که شما دارید refrence میکنید از نوع،‌ طول و مشخصات مثل رو ندارند

برای مثال من الان این سه تا query رو اجرا کردم بدون مشکل به جواب رسیدم، حتما id و foreign key یکی باشن جداولتون رو چک کنید که دقیقا مثل هم باشن

مثلا همشون با این نوع باشن

id int not null primary key auto_increment

و در نهایت جداول:


create table users (
     id int not null primary key auto_increment
)

create tableOrders (
     id int not null primary key auto_increment
)


create table basket (
    id int not null primary key auto_increment ,
    userid int,
    orderid int,
    foreign key (userid) references users(id),
    foreign key (orderid) references orders(id)
)

 

فایل پیوست

امیر صالحی

توسط

امیر صالحی

18 مرداد 00

0
حذف شده

سلام و عرض ادب

 

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

فایل پیوست

محمدرضا حسینی

توسط

محمدرضا حسینی

18 مرداد 00