سبد (0)

تبلیغات

محدودیت foreign key در SQL

محدودیت FOREIGN KEY (کلید خارجی)

Wiki

یک FOREIGN KEY (کلید خارجی) در یک جدول اشاره به PRIMARY KEY (کلید اصلی) در جدول دیگر دارد.

اجازه دهید تا FOREIGN KEY را با یک مثال توضیح دهیم، به دو جدول زیر نگاه کنید:

جدول Persons:

P_IdLastNameFirstNameAddressCity
1 Hansen Ola Timoteivn 10 Sandnes
2 Svendson Tove Borgvn 23 Sandnes
3 Pettersen Kari Storgt 20 Stavanger

جدول Orders :

O_IdOrderNoP_Id
1 77895 3
2 44678 3
3 22456 2
4 24562 1

توجه کنید که ستون P_Id در جدول order اشاره به ستون P_Id در جدول person دارد.

ستون P_Id در جدول person کلید اصلی می باشد

ستون P_Id در جدول Orders کلید خارجی می باشد.

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

همچنین محدودیت کلید خارجی از ورود داده های نا معتبر به ستون کلید خارجی جلوگیری می کند، زیرا داده ها باید یکی از مقادیر جدولی باشند که کلید خارجی به آن ارجاع داده شده است.


محدودیت FOREIGN KEY در دستور CREATE TABLE

Wiki

دستور زیر در ستون P_Id هنگامی که جدول Persons ایجاد می شود کلید خارجی را تعیین می کند:

در MySQL:

CREATE TABLE Orders
(
O_Id int NOT NULL,
OrderNo int NOT NULL,
P_Id int,
PRIMARY KEY (O_Id),
FOREIGN KEY (P_Id) REFERENCES Persons(P_Id)
)

در SQL Server / Oracle / MS Access:

CREATE TABLE Orders
(
O_Id int NOT NULL PRIMARY KEY,
OrderNo int NOT NULL,
P_Id int FOREIGN KEY REFERENCES Persons(P_Id)
)

برای تعریف محدودیت FOREIGN KEY روی ستون های ترکیبی (ترکیب دو یا چند ستون) از دستور زیر استفاده کنید.

 در MySQL / SQL Server / Oracle / MS Access:

CREATE TABLE Orders
(
O_Id int NOT NULL,
OrderNo int NOT NULL,
P_Id int,
PRIMARY KEY (O_Id),
CONSTRAINT fk_PerOrders FOREIGN KEY (P_Id)
REFERENCES Persons(P_Id)
)

محدودیت FOREIGN KEY در دستور ALTER TABLE

Wiki

برای ایجاد محدودیت FOREIGN KEY روی ستون P_Id هنگامی که جدول قبلا ایجاد شده از دستور زیر استفاده می کنیم.

MySQL / SQL Server / Oracle / MS Access:

ALTER TABLE Orders
ADD FOREIGN KEY (P_Id)
REFERENCES Persons(P_Id)

برای تعریف محدودیت FOREIGN KEY روی ستون های ترکیبی (ترکیب دو یا چند ستون) از دستور زیر استفاده کنید.

MySQL / SQL Server / Oracle / MS Access:

ALTER TABLE Orders
ADD CONSTRAINT fk_PerOrders
FOREIGN KEY (P_Id)
REFERENCES Persons(P_Id)

حذف محدودیت FOREIGN KEY

Wiki

برای حذف محدودیت FOREIGN KEY از دستور زیر استفاده می کنیم.

در MySQL:

ALTER TABLE Orders
DROP FOREIGN KEY fk_PerOrders

در SQL Server / Oracle / MS Access:

ALTER TABLE Orders
DROP CONSTRAINT fk_PerOrders

دیدگاه‌ها  

0 # fatemeh ghz 1397-04-28 10:34
سلام خسته نباشید
من میخوام کلید خارجی جدول هامو بدونم!اون کدی که تو دیدگاها بود گذاشتم ولی در قسمت 'arent_object_i d' ازم ارور گرفت!ممنون میشم راهنماییم کنید
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
+1 # S.M.S 1396-03-21 11:12
با سلام من می خواهl تمامی کلید خارجی های 2 یا چند جدول را استخراج کنم، اگر این امکان وجود دارد ممنون می شوم query یا دستور مربوط به آنرا بگویید.
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
+1 # امیر پهلوان صادق 1396-03-22 14:14
سلام، از کوئری زیر استفاده کنید:
SELECT
OBJECT_NAME(f.p arent_object_id ) TableName,
COL_NAME(fc.par ent_object_id,f c.parent_column _id) ColName
FROM
sys.foreign_key s AS f
INNER JOIN
sys.foreign_key _columns AS fc
ON f.OBJECT_ID = fc.constraint_object_id
INNER JOIN
sys.tables t
ON t.OBJECT_ID = fc.referenced_object_id
WHERE
OBJECT_NAME (f.referenced_o bject_id) = 'YourTableName'
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
+1 # ...... 1395-04-13 23:05
سلام
این خطا چی میگه:
Error creating table: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT= 454, reg_date TIMESTAMP )' at line 7


اینم کدم:
CREATE TABLE IF NOT EXISTS `city` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`province_id` int(11) unsigned NOT NULL,
`name` varchar(200) NOT NULL,
PRIMARY KEY (`id`),
KEY `province_id` (`province_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT= 454 ;
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
+1 # مهرداد صلاحی 1395-04-14 23:06
سلام.
ظاهر کد درسته، ولی خطا داره مشکل نگارشی داری توی کوئری.

جدولت رو پاک کن و دوباره کوئری رو اجرا کن. ببین مشکل حل میشه یا نه.
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
+1 # shayan93 1395-02-25 21:16
با سلام
من 2 جدول به نام photo و melk دارم ، هر ملک چند photo دارد یعنی ارتباط 1 به چند . من اومدم فیلدی به نام mlkphoto در جدول photo از نوع integer ساختم و fk قرار دادم و رفرنس آن melk_id در جدول melk
این کار درست هست یا خیر؟ ممنون میشم نحوه تعریف fk برای این نوع ارتباز رو بفرمایید که هر عکس متلغ به یک خانه و هر خانه دارای چند عکس میتونه باشه
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
+2 # مهرداد صلاحی 1395-02-27 15:49
با سلام.
برای ارتباط یک به چند باید در جدول چندتایی کلید خارجی تعریف بشه که این کلید خارجی در واقع کلید اصلی جدول یک تایی هست.
ارتباطی که فرمودید درست هست، فقط چک کنید نوع فیلدها کاملا یکسان باشه.
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
+1 # فاطمه 1394-09-27 00:25
سلام و خسته نباشید و با تشکر از سایت فوق العادتون
من یه table ساختم که 3 تا کلید خارجی داره ولی یکیشو هر کاری میکنم قبول نمیکنه
create table sabad_kharid(
code_kharid int ,
id_mobile int
FOREIGN KEY REFERENCES mobile(id_mobil e),
code_brand int FOREIGN KEY REFERENCES brand(code_bran d),
moshakhasat_nam e varchar(30) FOREIGN KEY REFERENCES moshakhasat_mobile(moshakhasat_nam e),
tedad int ,

)

و این ارور رو میده

There are no primary or candidate keys in the referenced table 'moshakhasat_mo bile' that match the referencing column list in the foreign key 'FK__sabad_kha__mosha__40058253'.

آیا به این دلیل میتونه باشه که جدول مشخصات_موبایل من کلید اصلی ترکیبی داره؟
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
+2 # مهرداد صلاحی 1394-09-27 10:28
با سلام و تشکر.
خطا داره میگه تو جدول مشخصات موبایل فیلدی با این مشخصات به عنوان کلید اصلی وجود نداره. این جدول رو چک کنید. نام فیلد درست باشه!
نوع داده‌ای هم در این جدول و هم در جدولی که به عنوان کلید خارجی تعریف شده مچ باشه.
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
+2 # فاطمه 1394-09-20 13:57
سلام خسته نباشید.
من تو table ام کلید خارجی اضافه کردم ولی این ارور رو میده
Foreign key 'FK__karmand__I d_dast__32E0915 F' references invalid column 'Id_dastresi' in referenced table 'modir'.
Could not create constraint or index. See previous errors.
-------------------------------------------------------------------------------------------
اینم دوتا table که ساختم
create table karmand (
id_k uniqueidentifie r primary key,
firtname nvarchar (20),
lastname nvarchar (30),
tarikhe_tavalod datetime not null ,
taahol bit,
tel numeric ,
check (tel>0),
addres nvarchar (300) unique,
sabeghe_kar nvarchar(200),
hoghoogh bigint DEFAULT 800000 ,
email nvarchar (20) ,
Id_dastresi numeric(8) FOREIGN KEY REFERENCES modir(Id_dastresi)
)
go
create table modir(
Id_dastrasi numeric(8) primary key,
code_dastresi uniqueidentifie r not null, )
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
+1 # مهرداد صلاحی 1394-09-20 19:40
با سلام.
تو جدول modir فیلد Id_dastrasi اشتباه است. اسمش رو باید به Id_dastresi تغییر بدید.

(به جای a باید e بذارید!!!)
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
+1 # فاطمه 1394-09-20 22:16
خیلی خیلی ممنون
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
+1 # نسرین رفعتی 1394-03-26 12:54
سلام، محدودیت foreign key در SQL و خوب آموزش داده بودبد.
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
+1 # zamani 1394-03-08 23:50
با سلام، آموزش خوبی بود. ممنون
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن

آموزش صوتی SQL

بستن
مدرس:
سوال و جواب:

ابزاری که در پیش روی دارید یکی از ابزارهای بسیار کاربردی سایت بیاموز در زمینه آموزش است، این ابزار برای سهولت یادگیری شما کاربران محترم طراحی شده است.

فقط کافی است روی عنوان پاراگراف مورد نظرتان کلیک کنید تا پخش صدا آغاز شود ...!

تمامی محصولات و خدمات این وبسایت، حسب مورد دارای مجوزهای لازم از مراجع مربوطه می‌باشند و فعالیت‌های این سایت تابع قوانین و مقررات جمهوری اسلامی ایران است.
logo-samandehi مجوز نشر دیجیتال از وزرات فرهنگ و ارشاد اسلامی پرداخت آنلاین -  بانک ملت معرفی بیاموز در شبکه سه پرداخت آنلاین - بانک اقتصاد نوین پرداخت آنلاین - بانک سامان
 
دوره های آموزشی راه اندازی کسب و کارهای اینترنتی
تبلیغات اینترنتی