Phiên bản được hỗ trợ:hiện tại(17)16 / 15 / 14 / 13
Phiên bản phát triển:18 / Devel
Phiên bản không được hỗ trợ:12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3 / 8.2 / 8.1 / 8.0 / 7.4 / 7.3
Tài liệu này dành cho phiên bản không được hỗ trợ của PostgreSQL.
Bạn có thể muốn xem cùng một trang chohiện tạiPhiên bản hoặc một trong cách đọc kèo bóng đá phiên bản được hỗ trợ khác được liệt kê ở trên thay thế.

5.3. Hạn chế

Kiểu dữ liệu là một cách để hạn chế loại dữ liệu có thể được lưu trữ trong bảng. Tuy nhiên, đối với nhiều ứng dụng, cách đọc kèo bóng đá mà chúng cung cấp quá thô.

Đến cuối đó, SQL cho phép bạn xác định cách đọc kèo bóng đá ràng buộc trên cách đọc kèo bóng đá cột và bảng. cách đọc kèo bóng đá ràng buộc cung cấp cho bạn nhiều quyền kiểm soát dữ liệu trong cách đọc kèo bóng đá bảng như bạn muốn.

5.3.1. Kiểm tra cách đọc kèo bóng đá ràng buộc

Một cách đọc kèo bóng đá kiểm tra là loại cách đọc kèo bóng đá chung nhất. Nó cho phép bạn chỉ định rằng giá trị trong một cột nhất định phải thỏa mãn biểu thức boolean (giá trị sự thật).

Tạo sản phẩm bảng (Kiểm tra (Giá 0));

Như bạn thấy, định nghĩa ràng buộc xuất hiện sau kiểu dữ liệu, giống như cách đọc kèo bóng đá định nghĩa giá trị mặc định. cách đọc kèo bóng đá giá trị và ràng buộc mặc định có thể được liệt kê theo bất kỳ thứ tự nào.Kiểm tratheo sau là một biểu thức trong ngoặc đơn. Biểu thức cách đọc kèo bóng đá kiểm tra sẽ liên quan đến cột do đó bị cách đọc kèo bóng đá, nếu không thì cách đọc kèo bóng đá sẽ không quá nhiều ý nghĩa.

Bạn cũng có thể đặt cho cách đọc kèo bóng đá một tên riêng. Điều này làm rõ thông báo lỗi và cho phép bạn tham khảo cách đọc kèo bóng đá khi bạn cần thay đổi nó.

Tạo sản phẩm bảng (cách đọc kèo bóng đá tích cực_priceKiểm tra (Giá 0)

Vì vậy, để chỉ định một cách đọc kèo bóng đá được đặt tên, hãy sử dụng từ khóacách đọc kèo bóng đátheo sau là một định danh theo sau là định nghĩa cách đọc kèo bóng đá. (Nếu bạn không chỉ định tên cách đọc kèo bóng đá theo cách này, hệ thống sẽ chọn tên cho bạn.)

Một cách đọc kèo bóng đá kiểm tra cũng có thể tham khảo một số cột. Giả sử bạn lưu trữ giá thông thường và giá chiết khấu, và bạn muốn đảm bảo rằng giá chiết khấu thấp hơn giá thông thường:

Tạo sản phẩm bảng (Kiểm tra (Giá Giảm giá_price));

Hai cách đọc kèo bóng đá đầu tiên sẽ trông quen thuộc. Cái thứ ba sử dụng cú pháp mới.

Chúng tôi nói rằng hai ràng buộc đầu tiên là cách đọc kèo bóng đá ràng buộc cột, trong khi cái thứ ba là một ràng buộc bảng vì nó được viết riêng biệt với bất kỳ định nghĩa cột nào. cách đọc kèo bóng đá ràng buộc cột cũng có thể được viết dưới dạng cách đọc kèo bóng đá ràng buộc của bảng, trong khi điều ngược lại là không nhất thiết có thể, vì một ràng buộc cột được cho là chỉ đề cập đến cột nó được gắn vào.POSTGRESQLKhông thực thi quy tắc đó, nhưng bạn nên tuân theo nó nếu bạn muốn cách đọc kèo bóng đá định nghĩa bảng của mình hoạt động với cách đọc kèo bóng đá hệ thống cơ sở dữ liệu khác.) Ví dụ trên cũng có thể được viết là:

Tạo sản phẩm bảng (

hoặc thậm chí:

Tạo sản phẩm bảng (

Đó là vấn đề của hương vị.

Tên có thể được gán cho cách đọc kèo bóng đá ràng buộc của bảng theo cách tương tự như cách đọc kèo bóng đá ràng buộc cột:

Tạo sản phẩm bảng (cách đọc kèo bóng đá hợp lệ_discountKiểm tra (Giá Giảm giá_price)

Cần lưu ý rằng một ràng buộc kiểm tra được thỏa mãn nếu biểu thức kiểm tra đánh giá thành giá trị true hoặc null. Vì hầu hết cách đọc kèo bóng đá biểu thức sẽ đánh giá đến giá trị null nếu bất kỳ toán hạng nào là null, chúng sẽ không ngăn cách đọc kèo bóng đá giá trị null trong cách đọc kèo bóng đá cột bị ràng buộc.

Lưu ý

PostgreSQLKhông hỗ trợKiểm tracách đọc kèo bóng đá ràng buộc mà dữ liệu bảng tham chiếu khác với hàng mới hoặc được cập nhật đang được kiểm tra. Trong khi aKiểm traràng buộc vi phạm quy tắc này có thể hoạt động trong cách đọc kèo bóng đá thử nghiệm đơn giản, không thể đảm bảo rằng cơ sở dữ liệu sẽ không đạt đến trạng thái trong đó điều kiện ràng buộc là sai (do những thay đổi tiếp theo của hàng khác liên quan). Điều này sẽ làm cho một kết xuất cơ sở dữ liệu và khôi phục thất bại.độc đáo, loại trừhoặcKhóa nước ngoàicách đọc kèo bóng đá ràng buộc để thể hiện cách đọc kèo bóng đá hạn chế hàng chéo và bảng.

Nếu những gì bạn mong muốn là kiểm tra một lần so với cách đọc kèo bóng đá hàng khác ở chèn hàng, thay vì đảm bảo tính nhất quán được duy trì liên tục, tùy chỉnhTriggercó thể được sử dụng để thực hiện điều đó. (cách đọc kèo bóng đá tiếp cận này tránh được vấn đề về kết xuất/khôi phục vìpg_dumpKhông cài đặt lại cách đọc kèo bóng đá trình kích hoạt cho đến khi khôi phục dữ liệu, để kiểm tra sẽ không được thực thi trong quá trình kết xuất/khôi phục.)

Lưu ý

PostgreSQLgiả sử rằngKiểm traĐiều kiện của cách đọc kèo bóng đá ràng buộc là bất biến, nghĩa là chúng sẽ luôn đưa ra kết quả tương tự cho cùng một hàng đầu vào. Giả định này là những gì biện minh cho việc kiểm traKiểm tracách đọc kèo bóng đá ràng buộc chỉ khi cách đọc kèo bóng đá hàng được chèn hoặc cập nhật, và không phải vào những thời điểm khác. (Cảnh báo ở trên về việc không tham khảo dữ liệu bảng khác thực sự là một trường hợp đặc biệt của hạn chế này.)

Một ví dụ về một cách đọc kèo bóng đá phổ biến để phá vỡ giả định này là tham chiếu chức năng do người dùng xác định trong AKiểm traBiểu thức và sau đó thay đổi hành vi của hàm đó.PostgreSQLKhông không cho phép điều đó, nhưng nó sẽ không nhận thấy nếu có cách đọc kèo bóng đá hàng trong bảng hiện vi phạmKiểm tracách đọc kèo bóng đá. Điều đó sẽ làm cho một kết xuất cơ sở dữ liệu tiếp theo và khôi phục thất bại.BẢNG ALTER), điều chỉnh định nghĩa chức năng và thêm vào ràng buộc, do đó kiểm tra lại nó so với tất cả cách đọc kèo bóng đá hàng bảng.

5.3.2. cách đọc kèo bóng đá ràng buộc không có null

Một cách đọc kèo bóng đá không null chỉ cần chỉ định rằng một cột không được giả định giá trị null. Ví dụ về cú pháp:

Tạo sản phẩm bảng (không null,,không null,,

Một cách đọc kèo bóng đá không có null luôn được viết dưới dạng cách đọc kèo bóng đá cột. Một cách đọc kèo bóng đá không có null tương đương về mặt chức năng để tạo cách đọc kèo bóng đá kiểm traKiểm tra (Cột_namekhông phải là null), nhưng trongPostgreSQLTạo một ràng buộc không khống rõ ràng là hiệu quả hơn. Hạn chế là bạn không thể đưa ra tên rõ ràng cho cách đọc kèo bóng đá ràng buộc không có null được tạo ra theo cách này.

Tất nhiên, một cột có thể có nhiều hơn một ràng buộc. Chỉ cần viết cách đọc kèo bóng đá ràng buộc lần lượt:

Tạo sản phẩm bảng (

Thứ tự không quan trọng. Nó không nhất thiết xác định theo thứ tự nào cách đọc kèo bóng đá ràng buộc được kiểm tra.

Thekhông nullcách đọc kèo bóng đá có nghịch đảo:nullcách đọc kèo bóng đá. Điều này không có nghĩa là cột phải là null, điều này chắc chắn sẽ là vô dụng.nullràng buộc không có trong tiêu chuẩn SQL và không nên được sử dụng trong cách đọc kèo bóng đá ứng dụng di động. (Nó chỉ được thêm vàoPostgreSQLĐể tương thích với một số hệ thống cơ sở dữ liệu khác.) Ví dụ: bạn có thể bắt đầu với:

Tạo sản phẩm bảng (

và sau đó chènkhôngTừ khóa mà mong muốn.

TIP

Trong hầu hết cách đọc kèo bóng đá thiết kế cơ sở dữ liệu, phần lớn cách đọc kèo bóng đá cột phải được đánh dấu không phải là NULL.

5.3.3. Những cách đọc kèo bóng đá duy nhất

cách đọc kèo bóng đá ràng buộc duy nhất đảm bảo rằng dữ liệu có trong một cột hoặc một nhóm cột, là duy nhất trong số tất cả cách đọc kèo bóng đá hàng trong bảng. Cú pháp là:

Tạo sản phẩm bảng (độc đáo,,

Khi được viết dưới dạng cách đọc kèo bóng đá cột và:

Tạo sản phẩm bảng (độc đáo (sản phẩm_no));

Khi được viết dưới dạng cách đọc kèo bóng đá bảng.

Để xác định một ràng buộc duy nhất cho một nhóm cách đọc kèo bóng đá cột, hãy viết nó như một ràng buộc bảng với cách đọc kèo bóng đá tên cột được phân tách bằng dấu phẩy:

Tạo ví dụ bảng (độc đáo (a, c));

Điều này chỉ định rằng sự kết hợp của cách đọc kèo bóng đá giá trị trong cách đọc kèo bóng đá cột được chỉ định là duy nhất trên toàn bộ bảng, mặc dù bất kỳ một trong cách đọc kèo bóng đá cột nào cũng không cần phải (và thông thường không).

Bạn có thể gán tên của riêng mình cho một cách đọc kèo bóng đá duy nhất, theo cách thông thường:

Tạo sản phẩm bảng (cách đọc kèo bóng đá phải_be_differentđộc đáo,

Thêm một ràng buộc duy nhất sẽ tự động tạo một chỉ mục B-cây duy nhất trên cột hoặc nhóm cách đọc kèo bóng đá cột được liệt kê trong ràng buộc. Một hạn chế duy nhất chỉ bao gồm một số hàng không thể được viết như một ràng buộc duy nhất, nhưng có thể thực thi một hạn chế như vậy bằng cách tạo ra một duy nhấtPostgresql: Tài.

Nói chung, một ràng buộc duy nhất bị vi phạm nếu có nhiều hơn một hàng trong bảng trong đó cách đọc kèo bóng đá giá trị của tất cả cách đọc kèo bóng đá cột có trong ràng buộc bằng nhau. Tuy nhiên, hai giá trị null không bao giờ được coi là bằng nhau trong so sánh này.

5.3.4. Khóa chính

Một ràng buộc khóa chính chỉ ra rằng một cột hoặc nhóm cột, có thể được sử dụng như một định danh duy nhất cho cách đọc kèo bóng đá hàng trong bảng. Điều này đòi hỏi cách đọc kèo bóng đá giá trị là cả độc đáo và không null.

Tạo sản phẩm bảng (
Tạo sản phẩm bảng (Khóa chính,,

cách đọc kèo bóng đá phím chính có thể kéo dài nhiều hơn một cột; Cú pháp tương tự như cách đọc kèo bóng đá ràng buộc duy nhất:

Tạo ví dụ bảng (Khóa chính (A, C));

Thêm khóa chính sẽ tự động tạo chỉ mục B-cây duy nhất trên cột hoặc nhóm cách đọc kèo bóng đá cột được liệt kê trong khóa chính và sẽ buộc (cách đọc kèo bóng đá) cột được đánh dấukhông null.

Bảng có thể có nhiều nhất một khóa chính. .PostgreSQL, nhưng thường là tốt nhất để làm theo nó.

Khóa chính rất hữu ích cho cả mục đích tài liệu và cho cách đọc kèo bóng đá ứng dụng máy khách. Ví dụ: một ứng dụng GUI cho phép sửa đổi cách đọc kèo bóng đá giá trị hàng có thể cần biết khóa chính của bảng để có thể xác định cách đọc kèo bóng đá hàng một cách độc đáo.

5.3.5. Chìa khóa nước ngoài

Một ràng buộc khóa nước ngoài chỉ định rằng cách đọc kèo bóng đá giá trị trong một cột (hoặc một nhóm cột) phải khớp với cách đọc kèo bóng đá giá trị xuất hiện trong một số hàng của bảng khác. Chúng tôi nói điều này duy trìTính toàn vẹn tham chiếuGiữa hai bảng liên quan.

Nói rằng bạn có bảng sản phẩm mà chúng tôi đã sử dụng nhiều lần rồi:

Tạo sản phẩm bảng (

Chúng ta cũng giả sử bạn có một bảng lưu trữ đơn đặt hàng của cách đọc kèo bóng đá sản phẩm đó. Chúng tôi muốn đảm bảo rằng bảng đơn đặt hàng chỉ chứa cách đọc kèo bóng đá đơn đặt hàng sản phẩm thực sự tồn tại.

Tạo đơn đặt hàng bảng (Tài liệu tham khảo Sản phẩm (sản phẩm_no),,

Bây giờ không thể tạo cách đọc kèo bóng đá đơn đặt hàng có không nullsản phẩm_nocách đọc kèo bóng đá mục không xuất hiện trong bảng sản phẩm.

Chúng tôi nói rằng trong tình huống này, bảng đơn đặt hàng làTham khảoBảng và bảng sản phẩm làđược tham chiếuBảng. Tương tự, có cách đọc kèo bóng đá cột tham chiếu và tham chiếu.

Bạn cũng có thể rút ngắn lệnh trên thành:

Tạo đơn đặt hàng bảng (Tài liệu tham khảo Sản phẩm,,

Vì không có danh sách cột, khóa chính của bảng được tham chiếu được sử dụng làm cột được tham chiếu.

Bạn có thể gán tên của riêng mình cho một cách đọc kèo bóng đá khóa nước ngoài, theo cách thông thường.

Một khóa ngoại cũng có thể ràng buộc và tham chiếu một nhóm cách đọc kèo bóng đá cột. Như thường lệ, sau đó nó cần được viết trong hình thức ràng buộc bảng.

Tạo bảng T1 (Khóa nước ngoài (b, c) Tài liệu tham khảo khác_table (C1, C2));

Tất nhiên, số và loại của cách đọc kèo bóng đá cột bị ràng buộc cần phải khớp với số và loại của cách đọc kèo bóng đá cột được tham chiếu.

Đôi khi nó hữu ích choMạnhBảng khácHồicủa một cách đọc kèo bóng đá khóa nước ngoài là cùng một bảng; Đây được gọi làtự giới thiệuKhóa nước ngoài. Ví dụ: nếu bạn muốn cách đọc kèo bóng đá hàng của bảng biểu diễn cách đọc kèo bóng đá nút của cấu trúc cây, bạn có thể viết

Tạo cây bàn (

Một nút cấp cao nhất sẽ có nullParent_id, nhưng không nullParent_idMục nhập sẽ bị hạn chế để tham chiếu cách đọc kèo bóng đá hàng hợp lệ của bảng.

Bảng có thể có nhiều hơn một ràng buộc khóa nước ngoài. Điều này được sử dụng để thực hiện cách đọc kèo bóng đá mối quan hệ nhiều đến nhiều giữa cách đọc kèo bóng đá bảng.

Tạo sản phẩm bảng (

Lưu ý rằng khóa chính chồng chéo với cách đọc kèo bóng đá phím nước ngoài trong bảng cuối cùng.

Chúng tôi biết rằng cách đọc kèo bóng đá khóa nước ngoài không cho phép tạo ra cách đọc kèo bóng đá đơn đặt hàng không liên quan đến bất kỳ sản phẩm nào. Nhưng điều gì sẽ xảy ra nếu một sản phẩm bị xóa sau khi một đơn đặt hàng được tạo ra tham chiếu nó?

  • Không cho phép xóa sản phẩm được tham chiếu

  • Xóa cách đọc kèo bóng đá đơn đặt hàng

  • cái gì khác?

32624_32812order_items), chúng tôi không cho phép nó. Nếu ai đó xóa một đơn đặt hàng, cách đọc kèo bóng đá mục đặt hàng cũng bị xóa:

Tạo sản phẩm bảng (Khi xóa hạn chế,Khi xóa Cascade,,

Hạn chế và xếp tầng xóa là hai tùy chọn phổ biến nhất.Hạn chếNgăn chặn việc xóa hàng được tham chiếu.Không hành độngcó nghĩa là nếu bất kỳ hàng tham chiếu nào vẫn tồn tại khi kiểm tra cách đọc kèo bóng đá, một lỗi được nêu ra; Đây là hành vi mặc định nếu bạn không chỉ định bất cứ điều gì.Không hành độngCho phép kiểm tra được hoãn lại cho đến sau này trong giao dịch, trong khiHạn chếkhông.)CascadeChỉ định rằng khi một hàng được tham chiếu bị xóa, hàng tham chiếu, nó cũng sẽ được tự động xóa. Có hai tùy chọn khác:Đặt NULLĐặt mặc định. Chúng làm cho (cách đọc kèo bóng đá) cột tham chiếu trong (cách đọc kèo bóng đá) cột tham chiếu được đặt thành null hoặc cách đọc kèo bóng đá giá trị mặc định của chúng, tương ứng, khi hàng được tham chiếu bị xóa.Đặt mặc địnhNhưng giá trị mặc định sẽ không thỏa mãn cách đọc kèo bóng đá khóa nước ngoài, hoạt động sẽ thất bại.

Tương tự nhưtrên xóaNgoài ra còn cótrên cập nhậtđược gọi khi một cột được tham chiếu được thay đổi (cập nhật). cách đọc kèo bóng đá hành động có thể giống nhau.Cascadecó nghĩa là cách đọc kèo bóng đá giá trị được cập nhật của (cách đọc kèo bóng đá) cột được tham chiếu phải được sao chép vào (cách đọc kèo bóng đá) hàng tham chiếu.

Thông thường, một hàng tham chiếu không cần phải thỏa mãn cách đọc kèo bóng đá khóa nước ngoài nếu bất kỳ cột tham chiếu nào của nó là NULL. Nếu nhưkhớp đầy đủĐược thêm vào Tuyên bố khóa nước ngoài, một hàng tham chiếu thoát khỏi việc thỏa mãn ràng buộc chỉ khi tất cả cách đọc kèo bóng đá cột tham chiếu của nó là NULL (do đó, sự kết hợp của cách đọc kèo bóng đá giá trị null và không null được đảm bảo là thất bạikhớp đầy đủràng buộc). Nếu bạn không muốn tham chiếu cách đọc kèo bóng đá hàng để có thể tránh thỏa mãn ràng buộc khóa nước ngoài, hãy khai báo (cách đọc kèo bóng đá) cột tham chiếu làkhông null.

Khóa ngoại phải tham chiếu cách đọc kèo bóng đá cột là khóa chính hoặc tạo thành một ràng buộc duy nhất. Điều này có nghĩa là cách đọc kèo bóng đá cột được tham chiếu luôn có một chỉ mục (một cột nằm dưới khóa chính hoặc ràng buộc duy nhất);Xóacủa một hàng từ bảng được tham chiếu hoặcCập nhậtcủa cột được tham chiếu sẽ yêu cầu quét bảng tham chiếu cho cách đọc kèo bóng đá hàng khớp với giá trị cũ, thường là một ý tưởng tốt để lập chỉ mục cách đọc kèo bóng đá cột tham chiếu. Bởi vì điều này không phải lúc nào cũng cần thiết và có nhiều lựa chọn có sẵn về cách lập chỉ mục, nên việc khai báo ràng buộc khóa nước ngoài không tự động tạo một chỉ mục trên cách đọc kèo bóng đá cột tham chiếu.

Thông tin thêm về việc cập nhật và xóa dữ liệu là trongChương 6. Cũng xem mô tả cú pháp cách đọc kèo bóng đá khóa nước ngoài trong tài liệu tham khảo choTạo bảng.

5.3.6. cách đọc kèo bóng đá ràng buộc loại trừ

cách đọc kèo bóng đá ràng buộc loại trừ đảm bảo rằng nếu bất kỳ hai hàng nào được so sánh trên cách đọc kèo bóng đá cột hoặc biểu thức được chỉ định bằng cách sử dụng cách đọc kèo bóng đá toán tử được chỉ định, thì ít nhất một trong số cách đọc kèo bóng đá so sánh toán tử này sẽ trả về sai hoặc null. Cú pháp là:

Tạo vòng tròn bảng (

Xem thêmTạo bảng ... cách đọc kèo bóng đá ... loại trừĐể biết chi tiết.

Thêm cách đọc kèo bóng đá loại trừ sẽ tự động tạo một chỉ mục thuộc loại được chỉ định trong khai báo cách đọc kèo bóng đá.