Mệnh đề CONSTRAINT

ràng buộc tương tự như chỉ mục, mặc dù bạn cũng có thể sử dụng để thiết lập mối quan hệ với một bảng khác.

Bạn sử dụng mệnh đề CONSTRAINT trong các câu lệnh ALTER TABLE và CREATE TABLE để tạo hoặc xóa các ràng buộc. Có hai loại mệnh đề CONSTRAINT: một loại để tạo ràng buộc trên một trường duy nhất và một loại để tạo ràng buộc trên nhiều trường.

Ghi chú: Bộ máy cơ sở dữ liệu Microsoft Access không hỗ trợ sử dụng CONSTRAINT hoặc bất kỳ câu lệnh ngôn ngữ định nghĩa dữ liệu nào, với các cơ sở dữ liệu không thuộc Microsoft Access. Thay vào đó, hãy sử dụng các phương pháp Tạo DAO.

Cú pháp

Ràng buộc trường duy nhất:

CONSTRAINT name {PRIMARY KEY | UNIQUE | NOT NULL |
REFERENCES foreigntable [(foreignfield1, foreignfield2)]
[ON UPDATE CASCADE | SET NULL]
[ON DELETE CASCADE | SET NULL]}

Ràng buộc nhiều trường:

CONSTRAINT name
{PRIMARY KEY (primary1[, primary2 [, ...]]) |
UNIQUE (unique1[, unique2 [, ...]]) |
NOT NULL (notnull1[, notnull2 [, ...]]) |
FOREIGN KEY [NO INDEX] (ref1[, ref2 [, ...]]) REFERENCES foreigntable [(foreignfield1 [, foreignfield2 [, ...]])]
[ON UPDATE CASCADE | SET NULL]
[ON DELETE CASCADE | SET NULL]}

Mệnh đề CONSTRAINT có các phần sau:

Phần

Mô tả

name

Tên của ràng buộc sẽ được tạo.

primary1, primary2

Tên của (các) trường sẽ được chỉ định khóa chính.

unique1, unique2

Tên của (các) trường sẽ được chỉ định là khóa duy nhất.

notnull1, notnull2

Tên của (các) trường bị hạn chế ở các giá trị không phải là Null.

ref1, ref2

Tên của một (các) trường khóa ngoại tham chiếu đến các trường trong một bảng khác.

foreigntable

Tên của bảng phụ có chứa (các) trường được chỉ định bởi foreignfield.

foreignfield1, foreignfield2

Tên của (các) trường trong foreigntable được chỉ định bởi ref1, ref2. Bạn có thể bỏ qua mệnh đề này nếu trường được tham chiếu là khóa chính của foreigntable.


Chú thích

Bạn sử dụng cú pháp cho ràng buộc trường duy nhất trong mệnh đề định nghĩa trường của một câu lệnh ALTER TABLE hoặc CREATE TABLE ngay sau đặc tả về kiểu dữ liệu của trường.

Bạn sử dụng cú pháp cho ràng buộc nhiều trường bất cứ khi nào bạn sử dụng CONSTRAINT từ dành riêng bên ngoài một mệnh đề định nghĩa trường trong một câu lệnh ALTER TABLE hoặc CREATE TABLE.

Bằng cách sử dụng CONSTRAINT, bạn có thể chỉ định một trường làm một trong các kiểu ràng buộc sau đây:

  • Bạn có thể sử dụng từ dành riêng UNIQUE để chỉ định một trường làm khóa duy nhất. Điều này nghĩa là không có hai bản ghi nào trong bảng có thể có cùng một giá trị trong trường này. Bạn có thể ràng buộc bất kỳ trường hoặc danh sách trường nào làm duy nhất. Nếu một ràng buộc nhiều trường được chỉ định làm khóa duy nhất, các giá trị kết hợp của tất cả các trường trong chỉ mục phải là duy nhất, ngay cả khi hai hoặc nhiều bản ghi có cùng một giá trị trong chỉ một trong các trường.

  • Bạn có thể sử dụng các từ dành riêng PRIMARY KEY để chỉ định một trường hoặc tập hợp các trường trong bảng làm khóa chính. Tất cả các giá trị trong khóa chính phải là duy nhất và không phải giá trị Null và chỉ có thể có một khóa chính cho một bảng.

    Ghi chú: Không đặt ràng buộc PRIMARY KEY trên bảng đã có khóa chính; nếu không sẽ xảy ra lỗi.

  • Bạn có thể sử dụng các từ dành riêng FOREIGN KEY để chỉ định một trường làm khóa ngoại. Nếu khóa chính của bảng ngoại có chứa nhiều trường, bạn phải sử dụng một định nghĩa ràng buộc nhiều trường, liệt kê tất cả các trường tham chiếu, tên của bảng ngoại và tên của các trường được tham chiếu trong bảng ngoại theo cùng thứ tự liệt kê các trường tham chiếu. Nếu (các) trường được tham chiếu là khóa chính cho bảng ngoại, bạn không phải xác định các trường được tham chiếu. Theo mặc định, bộ máy cơ sở dữ liệu sẽ hoạt động như trường hợp khóa chính của bảng ngoại là các trường được tham chiếu.

    Các ràng buộc khóa ngoại xác định các hành động cụ thể cần thực hiện khi một giá trị khóa chính tương ứng được thay đổi:

  • Bạn có thể chỉ định hành động cần thực hiện trên bảng ngoại dựa trên một hành động tương ứng, được thực hiện trên một khóa chính trong bảng mà CONSTRAINT được xác định. Ví dụ: hãy cân nhắc định nghĩa sau đây cho bảng Khách hàng:

CREATE TABLE Customers (CustId INTEGER PRIMARY KEY, CLstNm NCHAR VARYING (50))

Hãy cân nhắc định nghĩa sau đây của bảng Đơn hàng, định nghĩa một mối quan hệ khóa ngoại tham chiếu tới khóa chính của bảng Khách hàng:

CREATE TABLE Orders (OrderId INTEGER PRIMARY KEY, CustId INTEGER, OrderNotes NCHAR VARYING (255), CONSTRAINT FKOrdersCustId FOREIGN KEY (CustId) REFERENCES Customers ON UPDATE CASCADE ON DELETE CASCADE

Cả mệnh đề ON UPDATE CASCADE và mệnh đề ON DELETE CASCADE đều được xác định trên khóa ngoại. Mệnh đề ON UPDATE CASCADE có nghĩa là nếu mã định danh của một khách hàng (CustId) được cập nhật trong bảng Khách hàng, bản cập nhật sẽ được xếp tầng thông qua bảng Đơn hàng. Mỗi đơn hàng có chứa một giá trị mã định danh khách hàng tương ứng sẽ tự động cập nhật giá trị mới. Mệnh đề ON DELETE CASCADE có nghĩa là nếu một khách hàng bị xóa khỏi bảng Khách hàng, tất cả các hàng trong bảng Đơn hàng có chứa cùng một giá trị mã định danh khách hàng cũng sẽ bị xóa.

Hãy cân nhắc định nghĩa khác sau đây về bảng Đơn hàng, bằng cách sử dụng hành động SET NULL thay vì hành động CASCADE:

CREATE TABLE Orders (OrderId INTEGER PRIMARY KEY, CustId INTEGER, OrderNotes NCHAR VARYING (255), CONSTRAINT FKOrdersCustId FOREIGN KEY (CustId) REFERENCES Customers ON UPDATE SET NULL ON DELETE SET NULL

Mệnh đề ON UPDATE SET NULL có nghĩa là nếu một mã định danh của khách hàng (CustId) được cập nhật trong bảng Khách hàng, các giá trị khóa ngoại tương ứng trong bảng Đơn hàng sẽ tự động được đặt thành NULL. Tương tự, mệnh đề ON DELETE SET NULL có nghĩa là nếu một khách hàng bị xóa khỏi bảng Khách hàng, tất cả các khóa ngoại tương ứng trong bảng Đơn hàng sẽ tự động được đặt thành NULL.

Để tránh việc tự động tạo chỉ mục cho khóa ngoại, có thể sử dụng bộ điều chỉnh NO INDEX. Cần sử dụng biểu mẫu xác định khóa ngoại này chỉ trong trường hợp các giá trị chỉ mục thu được thường xuyên bị trùng lặp. Khi các giá trị trong một chỉ mục khóa ngoại thường xuyên bị trùng lặp, việc sử dụng chỉ mục có thể kém hiệu quả hơn việc chỉ thực hiện quét bảng. Duy trì loại chỉ mục này, với các hàng được chèn và xóa khỏi bảng, làm giảm hiệu suất và không mang mại bất kỳ lợi ích nào.



Phát triển các kỹ năng của bạn
Khám phá nội dung đào tạo
Sở hữu tính năng mới đầu tiên
Tham gia Người dùng nội bộ Office

Thông tin này có hữu ích không?

Cảm ơn phản hồi của bạn!

Cảm ơn bạn đã phản hồi! Để trợ giúp tốt hơn, có lẽ chúng tôi sẽ kết nối bạn với một trong những nhân viên hỗ trợ Office của chúng tôi.

×