Chi Tiết Bài Học 05.4 Các Ràng Buộc SQL-FOREIGN KEY - Vimentor

Chuyển đến nội dung Ràng buộc khóa ngoại lai (FOREIGN KEY) trong SQL

Khóa ngoại lai trong một bảng trỏ tới một khóa chính trong một bảng khác. Hay nói cách khác khóa ngoại lai dùng để liên kết hai bảng với nhau.

Khóa ngoại lai giúp đảm bảo tính toàn vẹn tham chiếu dữ liệu, tức là không có trường hợp tham chiếu tới dữ liệu không tồn tại trong cơ sở dữ liệu.

Xét ví dụ sau:

Bảng “Persons”

PID

LastName

FirstName

Address

City

1

Nguyen

Phi

My Dinh

Ha Noi

2

Ngoc

Ha

Ba Trieu

Ha Noi

3

Tran

Van

Hai Ba Trung

Ha Noi

Bảng “Orders”

OID

Order_No

PID

1

532

3

2

457

3

3

890

2

4

334

1

Chú ý:

  • Cột “PID” trong bảng “Orders” trỏ tới cột “PID” trong bảng “Persons”

  • Cột “PID” trong bảng “Persons” là khóa chính (PRIMARY KEY) trong bảng đó

  • Cột “PID” trong bảng “Orders” là khóa ngoại lai (FOREIGN KEY) trong bảng “Orders”

  • Ràng buộc khóa ngoại lại được sử dụng để ngăn chặn những hành động làm phá hỏng sự liên kết giữa các bảng với nhau

  • Ràng buộc khóa ngoại lai (FOREIGN KEY) cũng có tác dụng để ngăn chặn việc chèn những dữ liệu không chính xác tới cột khóa ngoại lai, bởi vì chúng phải là một trong những dữ liệu được chứa trong bảng mà nó trỏ tới

  • Khóa ngoại phải có cùng kiểu dữ liệu, cùng số lượng trường có sắp xếp tương ứng khóa chính

Tạo khóa ngoại lai trong lúc tạo bảng

Cú pháp MYSQL:

CREATE TABLE Orders ( OID INT NOT NULL, Order_No INT NOT NULL, PID INT, PRIMARY KEY (OID), FOREIGN KEY (PID) REFERENCES Persons(PID) )

Cú pháp SQL Server/ Oracle/ MS Access:

CREATE TABLE Orders ( OID INT NOT NULL PRIMARY KEY, Order_No INT NOT NULL, PID INT FOREIGN KEY (PID) REFERENCES Persons(PID) ) Đặt tên cho khóa ngoại lai

Tương tự khóa chính, khóa ngoại lai cũng đặt tên thông qua từ khóa CONSTRAINT.

Quy tắc đặt tên khóa ngoại lai:

Tên khóa ngoại lai: FK_<Table Foregin>

Để đặt tên cho một ràng buộc khóa ngoại lai (FOREIGN KEY), và để định nghĩa một ràng buộc khóa ngoại lai trên nhiều cột, sử dụng cú pháp sau:

CREATE TABLE Orders ( OID INT NOT NULL, Order_No INT NOT NULL, PID INT, PRIMARY KEY (OID), CONSTRAINT FK_Orders FOREIGN KEY(PID) REFERENCES Persons (PID) )

Tạo khóa ngoại lai sau khi tạo bảng

Cú pháp:

ALTER TABLE <Table Foreign> ADD FOREIGN KEY(<ColumF, ColumF1, ColumF2,…>) REFERENCES <Table Key> <Table Primary>(<ColumP, ColumnP1, ColumP2,…>)

Ví dụ:

MYSQL/ SQL Server/ Oracle/ MS Access:

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

Để cho phép đặt tên khóa ngoại lai và định nghĩa ràng buộc khóa ngoại lai trên nhiều cột (sau khi bảng đã được tạo) sử dụng cú pháp sau:

MYSQL/ SQL Server/ Oracle/ MS Access:

ALTER TABLE Orders ADD CONSTRAINT FK_Orders FOREIGN KEY (PID) REFERENCES Persons(PID) Hủy (DROP) ràng buộc khóa ngoại lai

Cú pháp MYSQL:

ALTERTABLE<Tên bảng ngoại lai> DROPFOREIGN KEY<Tên khóa ngoại lai>

Cú pháp SQL Server/ Oracle/ MS Access:

ALTERTABLE<Tên bảng ngoại lai> DROPCONSTRAINT<Tên khóa ngoại lai>

Ví dụ:

MYSQL:

ALTER TABLE Orders DROP FOREIGN KEY FK_Orders

SQL Server/ Oracle/ MS Access:

ALTER TABLE Orders DROP CONSTRAINT FK_Orders

Chú ý:

Trong thiết kế một database cho web hay một ứng dụng lớn, ta thường tránh sử dụng nhiều ràng buộc khóa ngoại lai vì nó sẽ làm giảm tốc độ thực thi, truy vấn. Tuy nhiên để giảm được số lượng ràng buộc khóa ngoại lai thì người thiết kế cần tối ưu thiết kế database tốt. Bởi vì nếu bỏ ràng buộc FOREIGN KEY sẽ ảnh hưởng tới tính toàn vẹn tham chiếu. Tùy theo mục đích thiết kế mà bạn đề cao tính an toàn hay đề cao tốc độ hơn để có thể quyết định được thiết kế của mình.

Con trỏ và hàm trong C++ Danh sách liên kết kép

Để lại một bình luận Hủy

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *

Bình luận *

Tên *

Email *

Trang web

Lưu tên của tôi, email, và trang web trong trình duyệt này cho lần bình luận kế tiếp của tôi.

Tìm kiếmTìm kiếm

Recent Posts

  • Mảng động
  • Giới thiệu về Interrupt
  • Giới thiệu về Heap, max heap
  • Giới thiệu về File I/O
  • Duyệt cây theo chiều rộng
Danh mục
  • Uncategorized
  • Trang Chủ
  • Giới Thiệu
  • Liên Hệ
  • WooCommerce not Found
  • Newsletter

Từ khóa » Khóa Phụ Sql