آموزش محدودیت FOREIGN KEY در SQL
یک FOREIGN KEY یا کلید خارجی در اسکیوال ، در یک جدول به یک PRIMARY KEY در جدولی دیگر اشاره می کند.
- برای ارتباط بین جداول از محدودیت Foreign Key استفاده میشود و در اصل Relational Integrity را فراهم میکند.
- به عبارت ساده تر ، کلید خارجی همان مقدار کلید اصلی از جدول دیگر است.
- مقدار یک کلید خارجی میتواند تکراری باشد.
فیلدهای کلید خارجی ، سه نوع محدودیت را ایجاد میکنند :
- اجازه حذف رکوردی از جدول پدر نداریم که فرزندی داشته باشد.
- اجازه insert رکورد در جدول فرزند با کد پدری که در جدول پدر موجود نیست را نداریم.
- مقدار کلید پدری را که دارای فرزند هست را نمیتوانیم تغییر دهیم.
همچنین محدودیت FOREIGN KEY از وارد کردن داده های نامعتبر در جدول جلوگیری میکند. (در فیلد foreign key) ، دلیل آن هم، این است که با مقادیر جدول دیگر که به آن اشاره می کند تطابق ندارد.
دستور SQL زیر در ستون “P_Id” هنگامی که جدول “Orders” ایجاد می شود FOREIGN KEY را تعیین می کند:
در MySQL
1
2
3
4
5
6
7
8
|
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
1
2
3
4
5
6
|
CREATE TABLE Orders
( O_Id int NOT NULL PRIMARY KEY ,
OrderNo int NOT NULL ,
) |
برای استفاده از محدودیت FOREIGN KEY و تعرین آن روی ستون چندین ستون از دستور SQL زیر استفاده کنید:
در MySQL / SQL Server / Oracle / MS Access:
1
2
3
4
5
6
7
8
9
|
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
برای ایجاد محدودیت FOREIGN KEY روی ستون “P_Id” هنگامی که جدول “Orders” قبلا ایجاد شده از دستور زیر استفاده کنید:
در MySQL / SQL Server / Oracle / MS Access:
1
2
3
|
ALTER TABLE Orders
ADD FOREIGN KEY (P_Id)
REFERENCES Persons(P_Id)
|