سلام و عرض ادب.
بنده دو جدول دارم برای مثال جدول 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 های کالمن ها رو چک کنید ببینید یکی هستند یا نه
مشکل شما به احتما زیاد به خاطر اینکه اون 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)
)
سلام و عرض ادب
ممنونم از دوستان . متوجه یک اشتباه تایپی در اسم یکی جداول شدم که بهش رفرنس میدادم.