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, kèo bóng đá việt nam mà chúng cung cấp quá thô.
Đến cuối, SQL cho phép bạn xác định kèo bóng đá việt nam ràng buộc trên kèo bóng đá việt nam cột và bảng. kèo bóng đá việt nam ràng buộc cung cấp cho bạn nhiều quyền kiểm soát dữ liệu trong kèo bóng đá việt nam bảng như bạn muốn.
Một kèo bóng đá việt nam kiểm tra là loại kèo bóng đá việt nam 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 bóng đá việt nam định nghĩa giá trị mặc định. kèo bóng đá việt nam 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 bóng đá việt nam kiểm tra sẽ liên quan đến cột do đó bị kèo bóng đá việt nam, nếu không thì kèo bóng đá việt nam sẽ không quá nhiều ý nghĩa.
Bạn cũng có thể đặt cho kèo bóng đá việt nam 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 bóng đá việt nam khi bạn cần thay đổi nó.
Tạo sản phẩm bảng (13594_13621Kiểm tra (Giá 0)
Vì vậy, để chỉ định một kèo bóng đá việt nam được đặt tên, hãy sử dụng từ khóakèo bóng đá việt nam
theo sau là một định danh theo sau là định nghĩa kèo bóng đá việt nam. (Nếu bạn không chỉ định tên kèo bóng đá việt nam theo cách này, hệ thống sẽ chọn tên cho bạn.)
Một kèo bóng đá việt nam 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 bóng đá việt nam đầ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 bóng đá việt nam 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 bóng đá việt nam ràng buộc cột cũng có thể được viết dưới dạng kèo bóng đá việt nam 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 bóng đá việt nam định nghĩa bảng của mình hoạt động với kèo bóng đá việt nam 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 bóng đá việt nam ràng buộc của bảng theo cách tương tự như kèo bóng đá việt nam ràng buộc cột:
Tạo sản phẩm bảng (kèo bóng đá việt nam 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 kèo bóng đá việt nam 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 kèo bóng đá việt nam giá trị null trong kèo bóng đá việt nam cột bị ràng buộc.
PostgreSQLKhông hỗ trợKiểm tra
kèo bóng đá việt nam 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 bóng đá việt nam 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ài
kèo bóng đá việt nam ràng buộc để thể hiện kèo bóng đá việt nam hạn chế hàng chéo và bàn giao diện.
Nếu những gì bạn mong muốn là kiểm tra một lần so với kèo bóng đá việt nam 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/khôi phục vìpg_dumpKhông cài đặt lại kèo bóng đá việt nam 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.)
PostgreSQLgiả sử rằngKiểm tra
Điều kiện của kèo bóng đá việt nam 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 bóng đá việt nam ràng buộc chỉ khi kèo bóng đá việt nam 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ó kèo bóng đá việt nam hàng trong bảng hiện vi phạmKiểm tra
kèo bóng đá việt nam. Đ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ó theo tất cả kèo bóng đá việt nam hàng bảng.
Một kèo bóng đá việt nam 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 bóng đá việt nam không có null luôn được viết dưới dạng kèo bóng đá việt nam cột. Một kèo bóng đá việt nam không có null tương đương về mặt chức năng để tạo kèo bóng đá việt nam 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 bóng đá việt nam 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 bóng đá việt nam 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 bóng đá việt nam ràng buộc được kiểm tra.
Thekhông null
kèo bóng đá việt nam có nghịch đảo:null
kèo bóng đá việt nam. Đ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 bóng đá việt nam ứ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 bóng đá việt nam thiết kế cơ sở dữ liệu, phần lớn kèo bóng đá việt nam cột phải được đánh dấu không phải là NULL.
kèo bóng đá việt nam 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 bóng đá việt nam 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 bóng đá việt nam 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 bóng đá việt nam bảng.
Để xác định một ràng buộc duy nhất cho một nhóm kèo bóng đá việt nam cột, hãy viết nó như một ràng buộc bảng với kèo bóng đá việt nam 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 kèo bóng đá việt nam giá trị trong kèo bóng đá việt nam 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 bóng đá việt nam 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 bóng đá việt nam duy nhất, theo cách thông thường:
Tạo sản phẩm bảng (kèo bóng đá việt nam 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 bóng đá việt nam 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 bóng đá việt nam giá trị của tất cả kèo bóng đá việt nam cột có trong ràng buộc bằng nhau. Theo mặc định, hai giá trị null không được coi là bằng nhau trong so sánh này.nulls không khác biệt
, như
Tạo sản phẩm bảng (nulls không khác biệt,,
hoặc
Tạo sản phẩm bảng (nulls không khác biệt(sản phẩm_no)
Hành vi mặc định có thể được chỉ định rõ ràng bằng cách sử dụngnulls khác biệt
. Điều trị NULL mặc định trong kèo bóng đá việt nam ràng buộc duy nhất được xác định theo triển khai theo tiêu chuẩn SQL và kèo bóng đá việt nam triển khai khác có một hành vi khác.
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 bóng đá việt nam hàng trong bảng. Điều này đòi hỏi kèo bóng đá việt nam 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 bóng đá việt nam 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 bóng đá việt nam 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 bóng đá việt nam cột được liệt kê trong khóa chính và sẽ buộc (kèo bóng đá việt nam) 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 kèo bóng đá việt nam ứng dụng khách. Ví dụ: một ứng dụng GUI cho phép sửa đổi kèo bóng đá việt nam 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 bóng đá việt nam 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 bóng đá việt nam giá trị trong một cột (hoặc một nhóm cột) phải khớp với kèo bóng đá việt nam 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 bóng đá việt nam 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 bóng đá việt nam đơ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 bóng đá việt nam đơn đặt hàng có không nullsản phẩm_no
kèo bóng đá việt nam 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ó kèo bóng đá việt nam 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 bóng đá việt nam khóa nước ngoài, theo cách thông thường.
Khóa ngoại cũng có thể ràng buộc và tham chiếu một nhóm kèo bóng đá việt nam 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 bóng đá việt nam cột bị ràng buộc cần phải khớp với số và loại của kèo bóng đá việt nam cột được tham chiếu.
Đôi khi nó hữu ích choHồiBảng khácxôngcủa một kèo bóng đá việt nam 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 bóng đá việt nam hàng của bảng biểu diễn kèo bóng đá việt nam 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
, trong khi không nullParent_id
Mục nhập sẽ bị hạn chế để tham chiếu kèo bóng đá việt nam 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 bóng đá việt nam mối quan hệ nhiều đến nhiều giữa kèo bóng đá việt nam 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 bóng đá việt nam phím nước ngoài trong bảng cuối cùng.
Chúng tôi biết rằng kèo bóng đá việt nam khóa nước ngoài không cho phép tạo ra kèo bóng đá việt nam đơ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 bóng đá việt nam đơn đặt hàng
cái gì khác?
33303_33491order_items
), chúng tôi không cho phép nó. Nếu ai đó xóa một đơn đặt hàng, kèo bóng đá việt nam 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 bóng đá việt nam, 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, hàng tham chiếu, nó cũng sẽ được tự động xóa. Có hai tùy chọn khác:SET NULL
vàĐặt mặc định
. Chúng làm cho (kèo bóng đá việt nam) cột tham chiếu trong (kèo bóng đá việt nam) cột tham chiếu được đặt thành null hoặc kèo bóng đá việt nam 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 bóng đá việt nam khóa nước ngoài, hoạt động sẽ thất bại.
Sự lựa chọn thích hợp củatrên xóa
Hành động phụ thuộc vào kèo bóng đá việt nam loại đối tượng mà kèo bóng đá việt nam bảng liên quan đại diện. Khi bảng tham chiếu đại diện cho một cái gì đó là một thành phần của những gì được biểu thị bằng bảng được tham chiếu và không thể tồn tại độc lập, thìCascade
có thể phù hợp. Nếu hai bảng đại diện cho kèo bóng đá việt nam đối tượng độc lập, thìHạn chế
hoặcKhông hành động
phù hợp hơn; Một ứng dụng thực sự muốn xóa cả hai đối tượng sau đó sẽ phải rõ ràng về điều này và chạy hai lệnh xóa.Đặt NULL
hoặcĐặt mặc định
có thể phù hợp nếu mối quan hệ phím nước ngoài thể hiện thông tin tùy chọn. Ví dụ: nếu bảng sản phẩm chứa tham chiếu đến người quản lý sản phẩm và mục nhập trình quản lý sản phẩm sẽ bị xóa, thì việc đặt trình quản lý sản phẩm của sản phẩm thành NULL hoặc mặc định có thể hữu ích.
kèo bóng đá việt nam hành độngĐặt NULL
vàĐặt mặc định
có thể lấy danh sách cột để chỉ định cột nào để đặt. Thông thường, tất cả kèo bóng đá việt nam cột của ràng buộc phím nước ngoài được đặt;
Tạo người thuê bảng ((Author_id));
Không có thông số kỹ thuật của cột, phím nước ngoài cũng sẽ đặt cộttenant_id
đến null, nhưng cột đó vẫn được yêu cầu như một phần của khóa chính.
Tương tự nhưKhi xóa
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). kèo bóng đá việt nam hành động có thể giống nhau, ngoại trừ danh sách cột không thể được chỉ định choĐặt NULL
vàĐặt mặc định
. Trong trường hợp này,Cascade
có nghĩa là kèo bóng đá việt nam giá trị được cập nhật của (kèo bóng đá việt nam) cột được tham chiếu phải được sao chép vào (kèo bóng đá việt nam) 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 bóng đá việt nam 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 bóng đá việt nam ràng buộc chỉ khi tất cả kèo bóng đá việt nam cột tham chiếu của nó là NULL (do đó, sự kết hợp của kèo bóng đá việt nam 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 kèo bóng đá việt nam 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 bóng đá việt nam) cột tham chiếu làkhông null
.
38891_39174Xóa
của một hàng từ bảng được tham chiếu hoặcCập nhật
của cột được tham chiếu sẽ yêu cầu quét bảng tham chiếu cho kèo bóng đá việt nam hàng phù hợp với giá trị cũ, thường là một ý tưởng tốt để lập chỉ mục kèo bóng đá việt nam 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 kèo bóng đá việt nam 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 kèo bóng đá việt nam khóa nước ngoài trong tài liệu tham khảo choTạo bảng.
kèo bóng đá việt nam 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 bóng đá việt nam cột hoặc biểu thức được chỉ định bằng cách sử dụng kèo bóng đá việt nam toán tử được chỉ định, thì ít nhất một trong số kèo bóng đá việt nam 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 bóng đá việt nam ... loại trừ
Để biết chi tiết.
Thêm kèo bóng đá việt nam 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 bóng đá việt nam.
Nếu bạn thấy bất cứ điều gì trong tài liệu không chính xác, không khớpMẫu nàyĐể báo cáo vấn đề tài liệu.