🎉 سال نو، مهارت نو، مشاوره رایگان نقشه راه برنامه نویسی (آفر ویژه ثبت نام قبل از افزایش قیمت 🔥)
۰ ثانیه
۰ دقیقه
۰ ساعت
۵ محمدرضا حسینی
خطا در تعریف foreign key
جامعه وردپرس (برنامه نویسی) ایجاد شده در ۱۸ مرداد ۱۴۰۰

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

بنده دو جدول دارم برای مثال جدول 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")

 

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

درود

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

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

 

امیر صالحی ۱۸ مرداد ۱۴۰۰، ۱۶:۵۲

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

بنده یک  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")
محمدرضا حسینی ۱۸ مرداد ۱۴۰۰، ۱۷:۰۵

 

 

سلام 

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

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

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

 

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

amir tavakolian ۱۸ مرداد ۱۴۰۰، ۱۷:۴۸

مشکل شما به احتما زیاد به خاطر اینکه اون 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)
)

 

امیر صالحی ۱۸ مرداد ۱۴۰۰، ۱۸:۵۰

سلام و عرض ادب

 

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

محمدرضا حسینی ۱۸ مرداد ۱۴۰۰، ۱۹:۰۰