Kiểu dữ liệu là một cách để giới hạn 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, kèo chấp bóng đá hôm nay mà chúng cung cấp quá thô.
Đến cuối đó, SQL cho phép bạn xác định kèo chấp bóng đá hôm nay ràng buộc trên kèo chấp bóng đá hôm nay cột và bảng. kèo chấp bóng đá hôm nay ràng buộc cung cấp cho bạn nhiều quyền kiểm soát dữ liệu trong kèo chấp bóng đá hôm nay bảng như bạn muốn.
Một kèo chấp bóng đá hôm nay kiểm tra là loại kèo chấp bóng đá hôm nay 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ư kèo chấp bóng đá hôm nay định nghĩa giá trị mặc định. kèo chấp bóng đá hôm nay 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 tra
theo sau là một biểu thức trong ngoặc đơn. Biểu thức kèo chấp bóng đá hôm nay kiểm tra sẽ liên quan đến cột do đó bị kèo chấp bóng đá hôm nay, nếu không thì kèo chấp bóng đá hôm nay sẽ không quá nhiều ý nghĩa.
Bạn cũng có thể đặt cho kèo chấp bóng đá hôm nay 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 kèo chấp bóng đá hôm nay khi bạn cần thay đổi nó.
Tạo sản phẩm bảng (13644_13671Kiểm tra (Giá 0)
Vì vậy, để chỉ định một kèo chấp bóng đá hôm nay được đặt tên, hãy sử dụng từ khóakèo chấp bóng đá hôm nay
theo sau là một định danh theo sau là định nghĩa kèo chấp bóng đá hôm nay. (Nếu bạn không chỉ định tên kèo chấp bóng đá hôm nay theo cách này, hệ thống sẽ chọn tên cho bạn.)
Một kèo chấp bóng đá hôm nay 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 kèo chấp bóng đá hôm nay đầ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à kèo chấp bóng đá hôm nay 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. kèo chấp bóng đá hôm nay ràng buộc cột cũng có thể được viết dưới dạng kèo chấp bóng đá hôm nay 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 kèo chấp bóng đá hôm nay định nghĩa bảng của mình hoạt động với kèo chấp bóng đá hôm nay 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 kèo chấp bóng đá hôm nay ràng buộc của bảng theo cách tương tự như kèo chấp bóng đá hôm nay ràng buộc cột:
Tạo sản phẩm bảng (kèo chấp bóng đá hôm nay hợp lệ_discountKiểm tra (Giá Giảm giá_price)
16351_16731
PostgreSQLKhông hỗ trợKiểm tra
kèo chấp bóng đá hôm nay 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 tra
ràng buộc vi phạm quy tắc này có thể hoạt động trong kèo chấp bóng đá hôm nay 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ẽ gây ra một kết xuất cơ sở dữ liệu và tải lại không thành công.độc đáo
, loại trừ
hoặcKhóa nước ngoài
kèo chấp bóng đá hôm nay ràng buộc để thể hiện kèo chấp bóng đá hôm nay 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 kèo chấp bóng đá hôm nay 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 tiếp cận này tránh được vấn đề về kết xuất/tải lại vìpg_dumpKhông cài đặt lại kèo chấp bóng đá hôm nay trình kích hoạt cho đến khi tải lại dữ liệu, để kiểm tra sẽ không được thực thi trong quá trình đổ/tải lại.)
PostgreSQLgiả sử rằngKiểm tra
Điều kiện của kèo chấp bóng đá hôm nay 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 tra
kèo chấp bóng đá hôm nay ràng buộc chỉ khi kèo chấp bóng đá hôm nay 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 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 tra
Biể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ó hàng trong bảng hiện vi phạmKiểm tra
kèo chấp bóng đá hôm nay. Điều đó sẽ gây ra một kết xuất cơ sở dữ liệu tiếp theo và tải lại không thành công.Bảng thay đổi
), điều chỉnh định nghĩa chức năng và thêm lại ràng buộc, do đó kiểm tra lại nó so với tất cả kèo chấp bóng đá hôm nay hàng bảng.
Một kèo chấp bóng đá hôm nay không có 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 kèo chấp bóng đá hôm nay không null luôn được viết dưới dạng kèo chấp bóng đá hôm nay cột. Một kèo chấp bóng đá hôm nay không có null tương đương về mặt chức năng để tạo kèo chấp bóng đá hôm nay kiểm traKiểm tra (
, 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 kèo chấp bóng đá hôm nay ràng buộc không có null được tạo ra theo cách này.Cột_name
không phải là null)
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 kèo chấp bóng đá hôm nay 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 kèo chấp bóng đá hôm nay ràng buộc được kiểm tra.
Thekhông null
kèo chấp bóng đá hôm nay có nghịch đảo:null
kèo chấp bóng đá hôm nay. Đ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.null
ràng buộc không có trong tiêu chuẩn SQL và không nên được sử dụng trong kèo chấp bóng đá hôm nay ứ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ông
Từ khóa mà mong muốn.
Trong hầu hết kèo chấp bóng đá hôm nay thiết kế cơ sở dữ liệu, phần lớn kèo chấp bóng đá hôm nay cột nên được đánh dấu không phải là NULL.
kèo chấp bóng đá hôm nay 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ả kèo chấp bóng đá hôm nay 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 kèo chấp bóng đá hôm nay 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 kèo chấp bóng đá hôm nay bảng.
Để xác định một ràng buộc duy nhất cho một nhóm kèo chấp bóng đá hôm nay cột, hãy viết nó như một ràng buộc bảng với kèo chấp bóng đá hôm nay tên cột được phân tách bằng dấu phẩy:
Tạo ví dụ bảng (duy nhất (a, c));
Điều này chỉ định rằng sự kết hợp của kèo chấp bóng đá hôm nay giá trị trong kèo chấp bóng đá hôm nay 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 kèo chấp bóng đá hôm nay 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 kèo chấp bóng đá hôm nay duy nhất, theo cách thông thường:
Tạo sản phẩm bảng (kèo chấp bóng đá hôm nay 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 kèo chấp bóng đá hôm nay 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 đó kèo chấp bóng đá hôm nay giá trị của tất cả kèo chấp bóng đá hôm nay 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.
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 kèo chấp bóng đá hôm nay hàng trong bảng. Điều này đòi hỏi kèo chấp bóng đá hôm nay 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,,
kèo chấp bóng đá hôm nay 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ư kèo chấp bóng đá hôm nay 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 kèo chấp bóng đá hôm nay cột được liệt kê trong khóa chính và sẽ buộc (kèo chấp bóng đá hôm nay) cột phải đượ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 kèo chấp bóng đá hôm nay ứng dụng khách. Ví dụ: một ứng dụng GUI cho phép sửa đổi kèo chấp bóng đá hôm nay giá trị hàng có thể cần biết khóa chính của bảng để có thể xác định kèo chấp bóng đá hôm nay hàng một cách độc đáo.
Một ràng buộc khóa nước ngoài chỉ định rằng kèo chấp bóng đá hôm nay giá trị trong một cột (hoặc một nhóm cột) phải khớp với kèo chấp bóng đá hôm nay 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 kèo chấp bóng đá hôm nay sản phẩm đó. Chúng tôi muốn đảm bảo rằng bảng đơn đặt hàng chỉ chứa kèo chấp bóng đá hôm nay đơ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 kèo chấp bóng đá hôm nay đơn đặt hàng có không nullsản phẩm_no
kèo chấp bóng đá hôm nay 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 chiếuBảng và bảng sản phẩm làđược tham chiếuBảng. Tương tự, có kèo chấp bóng đá hôm nay 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 kèo chấp bóng đá hôm nay 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 kèo chấp bóng đá hôm nay 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 kèo chấp bóng đá hôm nay cột bị ràng buộc cần phải khớp với số và loại của kèo chấp bóng đá hôm nay cột được tham chiếu.
Đôi khi nó hữu ích choBảng khác”của một kèo chấp bóng đá hôm nay 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 kèo chấp bóng đá hôm nay hàng của bảng biểu diễn kèo chấp bóng đá hôm nay 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_id
Mục nhập sẽ bị hạn chế để tham chiếu kèo chấp bóng đá hôm nay 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 kèo chấp bóng đá hôm nay mối quan hệ nhiều đến nhiều giữa kèo chấp bóng đá hôm nay bảng.
Tạo sản phẩm bảng (
Lưu ý rằng khóa chính chồng chéo với kèo chấp bóng đá hôm nay phím nước ngoài trong bảng cuối cùng.
Chúng tôi biết rằng kèo chấp bóng đá hôm nay khóa nước ngoài không cho phép tạo ra kèo chấp bóng đá hôm nay đơ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 kèo chấp bóng đá hôm nay đơn đặt hàng
cái gì khác?
31753_31941order_items
), chúng tôi không cho phép nó. Nếu ai đó xóa một đơn đặt hàng, kèo chấp bóng đá hôm nay 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 động
Có 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 kèo chấp bóng đá hôm nay, 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 động
Cho 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.)Cascade
Chỉ định rằng khi một hàng được tham chiếu bị xóa, việc tham chiếu hàng, nó cũng sẽ được tự động xóa. Có hai tùy chọn khác:Đặt NULL
vàĐặt mặc định
. Chúng làm cho (kèo chấp bóng đá hôm nay) cột tham chiếu trong (kèo chấp bóng đá hôm nay) cột tham chiếu được đặt thành null hoặc kèo chấp bóng đá hôm nay 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 định
Nhưng giá trị mặc định sẽ không thỏa mãn kèo chấp bóng đá hôm nay khóa nước ngoài, hoạt động sẽ thất bại.
Tương tự nhưtrên xóa
còn cóKhi cập nhật
được gọi khi một cột được tham chiếu được thay đổi (cập nhật). kèo chấp bóng đá hôm nay hành động có thể giống nhau.Cascade
có nghĩa là kèo chấp bóng đá hôm nay giá trị được cập nhật của (kèo chấp bóng đá hôm nay) cột được tham chiếu phải được sao chép vào (kèo chấp bóng đá hôm nay) 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 kèo chấp bóng đá hôm nay 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 ra thỏa mãn kèo chấp bóng đá hôm nay ràng buộc chỉ khi tất cả kèo chấp bóng đá hôm nay cột tham chiếu của nó là NULL (do đó, sự kết hợp của kèo chấp bóng đá hôm nay giá trị null và không null được đảm bảo là không thành côngkhớp đầy đủ
ràng buộc). Nếu bạn không muốn tham chiếu kèo chấp bóng đá hôm nay 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 (kèo chấp bóng đá hôm nay) cột tham chiếu làkhông null
.
Khóa ngoại phải tham chiếu kèo chấp bóng đá hôm nay 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à kèo chấp bóng đá hôm nay 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óa
của một hàng từ bảng được tham chiếu hoặcCập nhật
35189_35550
Thông tin thêm về việc cập nhật và xóa dữ liệu ởChương 6. Cũng xem mô tả cú pháp kèo chấp bóng đá hôm nay khóa nước ngoài trong tài liệu tham khảo choTạo bảng.
kèo chấp bóng đá hôm nay 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 kèo chấp bóng đá hôm nay cột hoặc biểu thức được chỉ định bằng cách sử dụng kèo chấp bóng đá hôm nay toán tử được chỉ định, ít nhất một trong số kèo chấp bóng đá hôm nay 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 ... kèo chấp bóng đá hôm nay ... loại trừ
Để biết chi tiết.
Thêm kèo chấp bóng đá hôm nay loại trừ sẽ tự động tạo một chỉ mục thuộc loại được chỉ định trong khai báo kèo chấp bóng đá hôm nay.