Bỏ qua để tới nội dung chính
Đăng nhập với Microsoft
Đăng nhập hoặc tạo một tài khoản.
Xin chào,
Chọn một tài khoản khác.
Bạn có nhiều tài khoản
Chọn tài khoản bạn muốn đăng nhập.

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.

Lưu ý: 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 từ dành riêng CONSTRAINT 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 có hai bản ghi nào trong bảng 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.

    Lưu ý: 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 từ đ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 lại bất kỳ lợi ích nào.



Bạn cần thêm trợ giúp?

Bạn muốn xem các tùy chọn khác?

Khám phá các lợi ích của gói đăng ký, xem qua các khóa đào tạo, tìm hiểu cách bảo mật thiết bị của bạn và hơn thế nữa.

Cộng đồng giúp bạn đặt và trả lời các câu hỏi, cung cấp phản hồi và lắng nghe ý kiến từ các chuyên gia có kiến thức phong phú.

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

Bạn hài lòng đến đâu với chất lượng dịch thuật?
Điều gì ảnh hưởng đến trải nghiệm của bạn?
Khi nhấn gửi, phản hồi của bạn sẽ được sử dụng để cải thiện các sản phẩm và dịch vụ của Microsoft. Người quản trị CNTT của bạn sẽ có thể thu thập dữ liệu này. Điều khoản về quyền riêng tư.

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

×