Bảng tháng html

Nếu được chỉ định, bảng được tạo dưới dạng bảng tạm thời. Các bảng tạm thời sẽ tự động bị hủy vào cuối phiên hoặc tùy chọn vào cuối giao dịch hiện tại (xem ON COMMIT bên dưới). Đường dẫn tìm kiếm mặc định bao gồm lược đồ tạm thời trước tiên và do đó, các bảng cố định hiện có được đặt tên giống hệt nhau không được chọn cho các gói mới trong khi bảng tạm thời tồn tại, trừ khi chúng được tham chiếu bằng các tên đủ điều kiện của lược đồ. Bất kỳ chỉ mục nào được tạo trên bảng tạm thời cũng tự động tạm thời

Không thể truy cập và do đó không thể hút bụi hoặc phân tích các bảng tạm thời. Vì lý do này, các hoạt động phân tích và chân không thích hợp nên được thực hiện thông qua các lệnh SQL phiên. Ví dụ: nếu một bảng tạm thời sẽ được sử dụng trong các truy vấn phức tạp, bạn nên chạy ANALYZE trên bảng tạm thời sau khi nó được điền

Tùy ý, có thể viết GLOBAL hoặc LOCAL trước TEMPORARY hoặc TEMP. Điều này hiện không tạo ra sự khác biệt nào trong PostgreSQL và không được dùng nữa;

UNLOGGED

Nếu được chỉ định, bảng sẽ được tạo dưới dạng bảng chưa ghi nhật ký. Dữ liệu được ghi vào các bảng chưa được ghi sẽ không được ghi vào nhật ký ghi trước (xem Chương 30), điều này làm cho chúng nhanh hơn đáng kể so với các bảng thông thường. Tuy nhiên, chúng không an toàn khi gặp sự cố. một bảng chưa được ghi nhật ký sẽ tự động bị cắt bớt sau khi gặp sự cố hoặc tắt máy không sạch sẽ. Nội dung của một bảng chưa ghi nhật ký cũng không được sao chép sang các máy chủ dự phòng. Bất kỳ chỉ mục nào được tạo trên một bảng chưa được ghi cũng sẽ tự động được hủy ghi

Nếu điều này được chỉ định, bất kỳ trình tự nào được tạo cùng với bảng chưa ghi nhật ký (đối với các cột nhận dạng hoặc nối tiếp) cũng được tạo dưới dạng không ghi nhật ký

IF NOT EXISTS

Không ném lỗi nếu một quan hệ có cùng tên đã tồn tại. Một thông báo được đưa ra trong trường hợp này. Lưu ý rằng không có gì đảm bảo rằng mối quan hệ hiện tại giống như mối quan hệ đã được tạo

TEMP0

Tên (tùy chọn đủ điều kiện lược đồ) của bảng sẽ được tạo

TEMP1

Tạo một bảng đã nhập, lấy cấu trúc của nó từ loại tổng hợp đã chỉ định (tên tùy chọn đủ điều kiện cho lược đồ). Một bảng đã nhập được gắn với loại của nó;

Khi một bảng đã nhập được tạo, thì kiểu dữ liệu của các cột được xác định bởi kiểu tổng hợp bên dưới và không được chỉ định bởi lệnh TEMP3. Nhưng lệnh TEMP3 có thể thêm các giá trị mặc định và ràng buộc vào bảng và có thể chỉ định các tham số lưu trữ

TEMP5

Tên của một cột sẽ được tạo trong bảng mới

TEMP6

Kiểu dữ liệu của cột. Điều này có thể bao gồm các chỉ định mảng. Để biết thêm thông tin về các loại dữ liệu được PostgreSQL hỗ trợ, hãy tham khảo Chương 8

TEMP7

Mệnh đề TEMP8 gán một đối chiếu cho cột (phải thuộc loại dữ liệu có thể đối chiếu). Nếu không được chỉ định, đối chiếu mặc định của kiểu dữ liệu cột sẽ được sử dụng

TEMP9

Mệnh đề ON COMMIT0 đặt phương thức nén cho cột. Tính năng nén chỉ được hỗ trợ cho các loại dữ liệu có độ rộng thay đổi và chỉ được sử dụng khi chế độ lưu trữ của cột là ON COMMIT1 hoặc ON COMMIT2. (Xem ALTER TABLE để biết thông tin về chế độ lưu trữ cột. ) Việc đặt thuộc tính này cho bảng được phân vùng không có tác dụng trực tiếp vì các bảng đó không có bộ lưu trữ riêng, nhưng giá trị được định cấu hình sẽ được kế thừa bởi các phân vùng mới được tạo. Các phương pháp nén được hỗ trợ là ON COMMIT3 và ON COMMIT4. (ON COMMIT4 chỉ khả dụng nếu ON COMMIT6 được sử dụng khi xây dựng PostgreSQL. ) Ngoài ra, ON COMMIT7 có thể là ON COMMIT8 để chỉ định rõ ràng hành vi mặc định, đó là tham khảo cài đặt tại thời điểm chèn dữ liệu để xác định phương thức sử dụng

ON COMMIT9 [,. ] )

Mệnh đề ANALYZE0 tùy chọn chỉ định danh sách các bảng mà từ đó bảng mới sẽ tự động kế thừa tất cả các cột. Bảng cha có thể là bảng đơn giản hoặc bảng nước ngoài

Việc sử dụng ANALYZE0 tạo mối quan hệ bền vững giữa bảng con mới và (các) bảng cha của nó. Các sửa đổi lược đồ đối với (các) bảng mẹ cũng thường lan truyền đến bảng con và theo mặc định, dữ liệu của bảng con được bao gồm trong các bản quét của (các) bảng mẹ

Nếu cùng một tên cột tồn tại trong nhiều bảng cha, lỗi sẽ được báo cáo trừ khi kiểu dữ liệu của các cột khớp với nhau trong mỗi bảng cha. Nếu không có xung đột thì các cột trùng lặp sẽ được hợp nhất để tạo thành một cột duy nhất trong bảng mới. Nếu danh sách tên cột của bảng mới chứa tên cột cũng được kế thừa, thì kiểu dữ liệu cũng phải khớp với (các) cột được kế thừa và các định nghĩa cột được hợp nhất thành một. Nếu bảng mới chỉ định rõ ràng một giá trị mặc định cho cột, giá trị mặc định này sẽ ghi đè mọi giá trị mặc định từ các khai báo kế thừa của cột. Nếu không, bất kỳ cha mẹ nào chỉ định giá trị mặc định cho cột đều phải chỉ định cùng một giá trị mặc định, nếu không sẽ báo lỗi

Các ràng buộc của ANALYZE2 được hợp nhất về cơ bản giống như các cột. nếu nhiều bảng cha và/hoặc định nghĩa bảng mới chứa các ràng buộc ANALYZE2 có tên giống hệt nhau, thì tất cả các ràng buộc này phải có cùng một biểu thức kiểm tra, nếu không sẽ báo lỗi. Các ràng buộc có cùng tên và biểu thức sẽ được hợp nhất thành một bản sao. Một ràng buộc được đánh dấu ANALYZE4 trong cha mẹ sẽ không được xem xét. Lưu ý rằng một ràng buộc ANALYZE2 chưa được đặt tên trong bảng mới sẽ không bao giờ được hợp nhất, vì một tên duy nhất sẽ luôn được chọn cho nó

Cài đặt cột ANALYZE6 cũng được sao chép từ bảng cha

Nếu một cột trong bảng cha là cột nhận dạng, thì thuộc tính đó không được kế thừa. Một cột trong bảng con có thể được khai báo cột nhận dạng nếu muốn

PHÂN VÙNG THEO { RANGE. DANH SÁCH. Băm } ( { TEMP5. ( ANALYZE8 ) } [ ANALYZE9 ] [,. ] )

Mệnh đề tùy chọn GLOBAL0 chỉ định chiến lược phân vùng bảng. Do đó, bảng được tạo ra được gọi là bảng được phân vùng. Danh sách các cột hoặc biểu thức được ngoặc đơn tạo thành khóa phân vùng cho bảng. Khi sử dụng phân vùng phạm vi hoặc hàm băm, khóa phân vùng có thể bao gồm nhiều cột hoặc biểu thức (tối đa 32, nhưng giới hạn này có thể được thay đổi khi xây dựng PostgreSQL), nhưng để phân vùng danh sách, khóa phân vùng phải bao gồm một cột hoặc biểu thức

Phân vùng phạm vi và danh sách yêu cầu lớp toán tử btree, trong khi phân vùng băm yêu cầu lớp toán tử băm. Nếu không có lớp toán tử nào được chỉ định rõ ràng, thì lớp toán tử mặc định của loại thích hợp sẽ được sử dụng; . Khi sử dụng phân vùng băm, lớp toán tử được sử dụng phải triển khai chức năng hỗ trợ 2 (xem để biết chi tiết)

Một bảng được phân vùng được chia thành các bảng con (được gọi là phân vùng), được tạo bằng cách sử dụng các lệnh TEMP3 riêng biệt. Bảng được phân vùng trống. Một hàng dữ liệu được chèn vào bảng được định tuyến đến một phân vùng dựa trên giá trị của các cột hoặc biểu thức trong khóa phân vùng. Nếu không có phân vùng hiện có khớp với các giá trị trong hàng mới, lỗi sẽ được báo cáo

Các bảng được phân vùng không hỗ trợ các ràng buộc GLOBAL2;

Xem Phần 5. 11 để thảo luận thêm về phân vùng bảng

GLOBAL3 { CHO GIÁ TRỊ GLOBAL4. MẶC ĐỊNH }

Tạo bảng dưới dạng phân vùng của bảng cha được chỉ định. Bảng có thể được tạo dưới dạng phân vùng cho các giá trị cụ thể bằng cách sử dụng GLOBAL5 hoặc làm phân vùng mặc định bằng cách sử dụng GLOBAL6. Mọi chỉ mục, ràng buộc và trình kích hoạt cấp hàng do người dùng xác định tồn tại trong bảng cha đều được sao chép trên phân vùng mới

GLOBAL4 phải tương ứng với phương thức phân vùng và khóa phân vùng của bảng cha và không được trùng lặp với bất kỳ phân vùng hiện có nào của bảng cha đó. Biểu mẫu có GLOBAL8 được sử dụng để phân vùng danh sách, biểu mẫu có GLOBAL9 và LOCAL0 được sử dụng để phân vùng phạm vi và biểu mẫu có LOCAL1 được sử dụng cho phân vùng băm

LOCAL2 là bất kỳ biểu thức không có biến nào (không cho phép truy vấn con, hàm cửa sổ, hàm tổng hợp và hàm trả về tập hợp). Kiểu dữ liệu của nó phải khớp với kiểu dữ liệu của cột khóa phân vùng tương ứng. Biểu thức được đánh giá một lần tại thời điểm tạo bảng, do đó, nó thậm chí có thể chứa các biểu thức không ổn định, chẳng hạn như LOCAL3

Khi tạo phân vùng danh sách, có thể chỉ định LOCAL4 để biểu thị rằng phân vùng cho phép cột khóa phân vùng là null. Tuy nhiên, không thể có nhiều hơn một phân vùng danh sách như vậy cho một bảng cha đã cho. Không thể chỉ định LOCAL4 cho phân vùng phạm vi

Khi tạo phân vùng phạm vi, giới hạn dưới được chỉ định bằng GLOBAL9 là giới hạn bao hàm, trong khi giới hạn trên được chỉ định bằng LOCAL0 là giới hạn loại trừ. Nghĩa là, các giá trị được chỉ định trong danh sách GLOBAL9 là các giá trị hợp lệ của các cột khóa phân vùng tương ứng cho phân vùng này, trong khi các giá trị trong danh sách LOCAL0 thì không. Lưu ý rằng tuyên bố này phải được hiểu theo các quy tắc so sánh theo hàng (). Ví dụ: đã cho TEMPORARY0, một phân vùng bị ràng buộc bởi TEMPORARY1 cho phép TEMPORARY2 với bất kỳ TEMPORARY3 nào, TEMPORARY4 với bất kỳ TEMPORARY5 không null nào và TEMPORARY6 với bất kỳ TEMPORARY7 nào

Các giá trị đặc biệt TEMPORARY8 và TEMPORARY9 có thể được sử dụng khi tạo phân vùng phạm vi để chỉ ra rằng không có giới hạn trên hoặc dưới cho giá trị của cột. Ví dụ: một phân vùng được xác định bằng cách sử dụng TEMP0 cho phép mọi giá trị nhỏ hơn 10 và một phân vùng được xác định bằng cách sử dụng TEMP1 cho phép mọi giá trị lớn hơn hoặc bằng 10

Khi tạo một phân vùng phạm vi bao gồm nhiều hơn một cột, bạn cũng có thể sử dụng TEMPORARY9 như một phần của giới hạn dưới và TEMPORARY8 như một phần của giới hạn trên. Ví dụ: một phân vùng được xác định bằng cách sử dụng TEMP4 cho phép bất kỳ hàng nào có cột khóa phân vùng đầu tiên lớn hơn 0 và nhỏ hơn hoặc bằng 10. Tương tự, một phân vùng được xác định bằng cách sử dụng TEMP5 cho phép bất kỳ hàng nào có cột khóa phân vùng đầu tiên bắt đầu bằng "a"

Lưu ý rằng nếu TEMPORARY8 hoặc TEMPORARY9 được sử dụng cho một cột của giới hạn phân vùng thì phải sử dụng cùng một giá trị cho tất cả các cột tiếp theo. Ví dụ, TEMP8 không phải là một ràng buộc hợp lệ;

Cũng lưu ý rằng một số loại phần tử, chẳng hạn như UNLOGGED0, có khái niệm "vô cùng", đây chỉ là một giá trị khác có thể được lưu trữ. Điều này khác với TEMPORARY8 và TEMPORARY9, không phải là giá trị thực có thể được lưu trữ, mà là cách nói rằng giá trị là không giới hạn. TEMPORARY9 có thể được coi là lớn hơn bất kỳ giá trị nào khác, kể cả "vô cùng" và TEMPORARY8 là nhỏ hơn bất kỳ giá trị nào khác, kể cả "âm vô cực". Do đó, phạm vi UNLOGGED5 không phải là một phạm vi trống;

Nếu GLOBAL6 được chỉ định, bảng sẽ được tạo làm phân vùng mặc định của bảng cha. Tùy chọn này không khả dụng cho các bảng được phân vùng băm. Giá trị khóa phân vùng không khớp với bất kỳ phân vùng nào khác của phân vùng gốc đã cho sẽ được chuyển đến phân vùng mặc định

Khi một bảng có phân vùng GLOBAL6 hiện có và một phân vùng mới được thêm vào bảng, phân vùng mặc định phải được quét để xác minh rằng nó không chứa bất kỳ hàng nào phù hợp với phân vùng mới. Nếu phân vùng mặc định chứa nhiều hàng, quá trình này có thể chậm. Quá trình quét sẽ bị bỏ qua nếu phân vùng mặc định là một bảng nước ngoài hoặc nếu nó có một ràng buộc chứng tỏ rằng nó không thể chứa các hàng nên được đặt trong phân vùng mới

Khi tạo phân vùng băm, phải chỉ định mô đun và phần dư. Mô đun phải là một số nguyên dương và phần còn lại phải là một số nguyên không âm nhỏ hơn mô đun. Thông thường, khi thiết lập ban đầu một bảng được phân vùng bằng hàm băm, bạn nên chọn một mô-đun bằng với số lượng phân vùng và gán cho mỗi bảng cùng một mô-đun và một phần còn lại khác nhau (xem ví dụ bên dưới). Tuy nhiên, không bắt buộc mọi phân vùng phải có cùng một mô đun, chỉ là mọi mô đun xảy ra giữa các phân vùng của bảng được phân vùng băm là một hệ số của mô đun lớn hơn tiếp theo. Điều này cho phép tăng dần số lượng phân vùng mà không cần di chuyển tất cả dữ liệu cùng một lúc. Ví dụ: giả sử bạn có một bảng phân vùng băm với 8 phân vùng, mỗi phân vùng có mô đun 8, nhưng thấy cần phải tăng số lượng phân vùng lên 16. Bạn có thể tách một trong các phân vùng theo mô-đun-8, tạo hai phân vùng theo mô-đun-16 mới bao phủ cùng một phần của không gian khóa (một phân vùng có phần còn lại bằng với phần còn lại của phân vùng đã tách và phân vùng còn lại có phần còn lại bằng với giá trị đó . Sau đó, bạn có thể lặp lại điều này - có lẽ sau này - cho mỗi phân vùng modulus-8 cho đến khi không còn phân vùng nào. Mặc dù điều này vẫn có thể liên quan đến một lượng lớn dữ liệu di chuyển ở mỗi bước, nhưng vẫn tốt hơn là phải tạo một bảng hoàn toàn mới và di chuyển tất cả dữ liệu cùng một lúc

Một phân vùng phải có cùng tên và loại cột với bảng được phân vùng mà nó thuộc về. Các sửa đổi đối với tên cột hoặc loại của bảng được phân vùng sẽ tự động lan truyền đến tất cả các phân vùng. Các ràng buộc ANALYZE2 sẽ được mọi phân vùng kế thừa tự động, nhưng một phân vùng riêng lẻ có thể chỉ định các ràng buộc ANALYZE2 bổ sung; . Mặc định có thể được chỉ định riêng cho từng phân vùng. Nhưng lưu ý rằng giá trị mặc định của phân vùng không được áp dụng khi chèn một bộ thông qua bảng được phân vùng

Các hàng được chèn vào một bảng được phân vùng sẽ tự động được chuyển đến đúng phân vùng. Nếu không có phân vùng phù hợp thì sẽ xảy ra lỗi

Các hoạt động như TRUNCATE thường ảnh hưởng đến một bảng và tất cả các phần tử con thừa kế của nó sẽ xếp tầng cho tất cả các phân vùng, nhưng cũng có thể được thực hiện trên một phân vùng riêng lẻ. Lưu ý rằng việc xóa một phân vùng bằng IF NOT EXISTS0 yêu cầu phải sử dụng khóa IF NOT EXISTS1 trên bảng cha

IF NOT EXISTS2 [ IF NOT EXISTS3. ]

Mệnh đề IF NOT EXISTS4 chỉ định một bảng mà từ đó bảng mới tự động sao chép tất cả các tên cột, kiểu dữ liệu và các ràng buộc không null của chúng

Không giống như ANALYZE0, bảng mới và bảng gốc được tách rời hoàn toàn sau khi quá trình tạo hoàn tất. Các thay đổi đối với bảng gốc sẽ không được áp dụng cho bảng mới và không thể đưa dữ liệu của bảng mới vào các bản quét của bảng gốc

Cũng không giống như ANALYZE0, các cột và ràng buộc được sao chép bởi IF NOT EXISTS4 không được hợp nhất với các cột và ràng buộc có tên tương tự. Nếu cùng một tên được chỉ định rõ ràng hoặc trong một mệnh đề IF NOT EXISTS4 khác, một lỗi sẽ được báo hiệu

Các mệnh đề IF NOT EXISTS3 tùy chọn chỉ định các thuộc tính bổ sung nào của bảng gốc cần sao chép. Chỉ định TEMP00 sao chép tài sản, chỉ định TEMP01 bỏ qua tài sản. TEMP01 là mặc định. Nếu nhiều thông số kỹ thuật được tạo cho cùng một loại đối tượng, thì thông số kỹ thuật cuối cùng được sử dụng. Các tùy chọn có sẵn là

TEMP03

Nhận xét cho các cột, ràng buộc và chỉ mục đã sao chép sẽ được sao chép. Hành vi mặc định là loại trừ nhận xét, dẫn đến các cột và ràng buộc được sao chép trong bảng mới không có nhận xét

TEMP04

Phương pháp nén của các cột sẽ được sao chép. Hành vi mặc định là loại trừ các phương thức nén, dẫn đến các cột có phương thức nén mặc định

TEMP05

ANALYZE2 ràng buộc sẽ được sao chép. Không có sự phân biệt giữa ràng buộc cột và ràng buộc bảng. Các ràng buộc không null luôn được sao chép sang bảng mới

TEMP07

Các biểu thức mặc định cho các định nghĩa cột được sao chép sẽ được sao chép. Mặt khác, các biểu thức mặc định không được sao chép, dẫn đến các cột được sao chép trong bảng mới có giá trị mặc định là null. Lưu ý rằng việc sao chép các giá trị mặc định gọi hàm sửa đổi cơ sở dữ liệu, chẳng hạn như TEMP08, có thể tạo ra liên kết chức năng giữa bảng gốc và bảng mới

TEMP09

Mọi biểu thức tạo định nghĩa cột được sao chép sẽ được sao chép. Theo mặc định, các cột mới sẽ là các cột cơ sở thông thường

TEMP10

Mọi thông số nhận dạng của định nghĩa cột được sao chép sẽ được sao chép. Một trình tự mới được tạo cho mỗi cột nhận dạng của bảng mới, tách biệt với các trình tự được liên kết với bảng cũ

TEMP11

Các ràng buộc chỉ mục, TEMP12, TEMP13 và GLOBAL2 trên bảng gốc sẽ được tạo trên bảng mới. Tên cho các chỉ mục và ràng buộc mới được chọn theo quy tắc mặc định, bất kể bản gốc được đặt tên như thế nào. (Hành vi này tránh các lỗi tên trùng lặp có thể xảy ra đối với các chỉ mục mới. )

TEMP15

Số liệu thống kê mở rộng được sao chép sang bảng mới

TEMP16

Cài đặt ANALYZE6 cho các định nghĩa cột đã sao chép sẽ được sao chép. Hành vi mặc định là loại trừ cài đặt ANALYZE6, dẫn đến các cột được sao chép trong bảng mới có cài đặt mặc định theo loại cụ thể. Để biết thêm thông tin về cài đặt ANALYZE6, hãy xem Phần 73. 2

TEMP20

TEMP20 là một dạng viết tắt chọn tất cả các tùy chọn riêng lẻ có sẵn. (Có thể hữu ích khi viết các mệnh đề TEMP01 riêng lẻ sau TEMP20 để chọn tất cả trừ một số tùy chọn cụ thể. )

Mệnh đề IF NOT EXISTS4 cũng có thể được sử dụng để sao chép định nghĩa cột từ dạng xem, bảng nước ngoài hoặc loại tổng hợp. Tùy chọn không thể áp dụng (e. g. , TEMP11 từ chế độ xem) bị bỏ qua

TEMP26

Tên tùy chọn cho ràng buộc cột hoặc bảng. Nếu ràng buộc bị vi phạm, tên ràng buộc sẽ xuất hiện trong các thông báo lỗi, do đó, các tên ràng buộc như TEMP27 có thể được sử dụng để truyền đạt thông tin ràng buộc hữu ích cho các ứng dụng khách. (Cần có dấu ngoặc kép để chỉ định các tên ràng buộc có chứa khoảng trắng. ) Nếu tên ràng buộc không được chỉ định, hệ thống sẽ tạo tên

TEMP28

Cột không được phép chứa giá trị null

LOCAL4

Cột được phép chứa giá trị null. Đây là mặc định

Điều khoản này chỉ được cung cấp để tương thích với cơ sở dữ liệu SQL không chuẩn. Việc sử dụng nó không được khuyến khích trong các ứng dụng mới

KIỂM TRA ( ANALYZE8 ) [ KHÔNG ĐƯỢC THỪA NHẬN ]

Mệnh đề ANALYZE2 chỉ định một biểu thức tạo ra kết quả Boolean mà các hàng mới hoặc cập nhật phải đáp ứng để thao tác chèn hoặc cập nhật thành công. Biểu thức đánh giá TRUE hoặc UNKNOWN thành công. Nếu bất kỳ hàng nào của thao tác chèn hoặc cập nhật tạo ra kết quả SAI, một ngoại lệ lỗi sẽ được đưa ra và thao tác chèn hoặc cập nhật không làm thay đổi cơ sở dữ liệu. Ràng buộc kiểm tra được chỉ định làm ràng buộc cột chỉ nên tham chiếu giá trị của cột đó, trong khi biểu thức xuất hiện trong ràng buộc bảng có thể tham chiếu nhiều cột

Hiện tại, các biểu thức ANALYZE2 không thể chứa các truy vấn con cũng như tham chiếu đến các biến khác với các cột của hàng hiện tại (xem phần ). Cột hệ thống TEMP33 có thể được tham chiếu, nhưng không phải bất kỳ cột hệ thống nào khác

Một ràng buộc được đánh dấu bằng ANALYZE4 sẽ không lan truyền đến các bảng con

Khi một bảng có nhiều ràng buộc ANALYZE2, chúng sẽ được kiểm tra từng hàng theo thứ tự bảng chữ cái theo tên, sau khi kiểm tra ràng buộc TEMP28. (Phiên bản PostgreSQL trước 9. 5 đã không tôn trọng bất kỳ lệnh kích hoạt cụ thể nào đối với các ràng buộc của ANALYZE2. )

TEMP38

Mệnh đề GLOBAL6 gán một giá trị dữ liệu mặc định cho cột có định nghĩa cột mà nó xuất hiện bên trong. Giá trị là bất kỳ biểu thức không có biến nào (cụ thể là không được phép tham chiếu chéo đến các cột khác trong bảng hiện tại). Truy vấn phụ cũng không được phép. Kiểu dữ liệu của biểu thức mặc định phải khớp với kiểu dữ liệu của cột

Biểu thức mặc định sẽ được sử dụng trong bất kỳ thao tác chèn nào không chỉ định giá trị cho cột. Nếu không có giá trị mặc định cho một cột thì giá trị mặc định là null

TEMP40 ) ĐÃ LƯU TRỮ

Mệnh đề này tạo cột dưới dạng cột được tạo. Không thể ghi cột vào và khi đọc kết quả của biểu thức đã chỉ định sẽ được trả về

Từ khóa TEMP41 được yêu cầu để biểu thị rằng cột sẽ được tính toán khi ghi và sẽ được lưu trữ trên đĩa

Biểu thức tạo có thể tham chiếu đến các cột khác trong bảng, nhưng không tham chiếu đến các cột được tạo khác. Mọi chức năng và toán tử được sử dụng phải là bất biến. Tham chiếu đến các bảng khác không được phép

TEMP42 ) ]

Mệnh đề này tạo cột dưới dạng cột nhận dạng. Nó sẽ có một chuỗi ẩn được đính kèm với nó và cột trong các hàng mới sẽ tự động có các giá trị từ chuỗi được gán cho nó. Một cột như vậy hoàn toàn là TEMP28

Các mệnh đề TEMP44 và TEMP45 xác định cách xử lý rõ ràng các giá trị do người dùng chỉ định trong các lệnh TEMP46 và TEMP47

Trong lệnh TEMP46, nếu TEMP44 được chọn, giá trị do người dùng chỉ định chỉ được chấp nhận nếu câu lệnh TEMP46 chỉ định TEMP51. Nếu TEMP45 được chọn, thì giá trị do người dùng chỉ định sẽ được ưu tiên. Xem CHÈN để biết chi tiết. (Trong lệnh TEMP53, các giá trị do người dùng chỉ định luôn được sử dụng bất kể cài đặt này. )

Trong lệnh TEMP47, nếu TEMP44 được chọn, mọi cập nhật của cột thành bất kỳ giá trị nào khác với GLOBAL6 sẽ bị từ chối. Nếu chọn TEMP45 thì có thể cập nhật cột bình thường. (Không có mệnh đề TEMP58 cho lệnh TEMP47. )

Mệnh đề TEMP60 tùy chọn có thể được sử dụng để ghi đè lên các tùy chọn của chuỗi. Xem TẠO TRÌNH TỰ để biết chi tiết

TEMP61 (ràng buộc cột)
ĐỘC NHẤT [ NULLS [ NOT ] DISTINCT ] ( TEMP5 [,. ] ) [ BAO GỒM ( TEMP5 [,. ]) ] (ràng buộc bảng)

Ràng buộc TEMP13 chỉ định rằng một nhóm gồm một hoặc nhiều cột của bảng chỉ có thể chứa các giá trị duy nhất. Hành vi của ràng buộc bảng duy nhất giống như hành vi của ràng buộc cột duy nhất, với khả năng bổ sung để mở rộng nhiều cột. Do đó, ràng buộc bắt buộc rằng hai hàng bất kỳ phải khác nhau ở ít nhất một trong các cột này

Vì mục đích của một ràng buộc duy nhất, các giá trị null không được coi là bằng nhau, trừ khi chỉ định TEMP65

Mỗi ràng buộc duy nhất phải đặt tên cho một tập hợp các cột khác với tập hợp các cột được đặt tên bởi bất kỳ ràng buộc khóa chính hoặc duy nhất nào khác được xác định cho bảng. (Nếu không, các ràng buộc duy nhất dư thừa sẽ bị loại bỏ. )

Khi thiết lập một ràng buộc duy nhất cho hệ thống phân cấp phân vùng đa cấp, tất cả các cột trong khóa phân vùng của bảng được phân vùng đích, cũng như cột của tất cả các bảng được phân vùng con của nó, phải được đưa vào định nghĩa ràng buộc

Việc thêm một ràng buộc duy nhất sẽ tự động tạo một chỉ mục btree duy nhất trên cột hoặc nhóm cột được sử dụng trong ràng buộc

Mệnh đề TEMP66 tùy chọn thêm vào chỉ mục đó một hoặc nhiều cột chỉ đơn giản là “tải trọng”. tính duy nhất không được thực thi đối với chúng và không thể tìm kiếm chỉ mục trên cơ sở các cột đó. Tuy nhiên, chúng có thể được truy xuất bằng cách quét chỉ mục. Lưu ý rằng mặc dù ràng buộc không được thực thi trên các cột được bao gồm nhưng nó vẫn phụ thuộc vào chúng. Do đó, một số hoạt động trên các cột như vậy (e. g. , TEMP67) có thể gây ra ràng buộc xếp tầng và xóa chỉ mục

TEMP12 (ràng buộc cột)
Khóa CHÍNH ( TEMP5 [,. ] ) [ BAO GỒM ( TEMP5 [,. ]) ] (ràng buộc bảng)

Ràng buộc TEMP12 chỉ định rằng một hoặc nhiều cột của bảng chỉ có thể chứa các giá trị duy nhất (không trùng lặp), không rỗng. Chỉ có thể chỉ định một khóa chính cho một bảng, cho dù là ràng buộc cột hay ràng buộc bảng

Ràng buộc khóa chính phải đặt tên cho một tập hợp các cột khác với tập hợp các cột được đặt tên bởi bất kỳ ràng buộc duy nhất nào được xác định cho cùng một bảng. (Ngược lại, ràng buộc duy nhất là dư thừa và sẽ bị loại bỏ. )

TEMP12 thực thi các ràng buộc dữ liệu giống như sự kết hợp giữa TEMP13 và TEMP28. Tuy nhiên, việc xác định một tập hợp các cột làm khóa chính cũng cung cấp siêu dữ liệu về thiết kế của lược đồ, vì khóa chính ngụ ý rằng các bảng khác có thể dựa vào tập hợp các cột này làm mã định danh duy nhất cho các hàng

Khi được đặt trên một bảng được phân vùng, các ràng buộc TEMP12 chia sẻ các hạn chế được mô tả trước đó cho các ràng buộc TEMP13

Việc thêm ràng buộc TEMP12 sẽ tự động tạo chỉ mục btree duy nhất trên cột hoặc nhóm cột được sử dụng trong ràng buộc

Mệnh đề TEMP66 tùy chọn thêm vào chỉ mục đó một hoặc nhiều cột chỉ đơn giản là “tải trọng”. tính duy nhất không được thực thi đối với chúng và không thể tìm kiếm chỉ mục trên cơ sở các cột đó. Tuy nhiên, chúng có thể được truy xuất bằng cách quét chỉ mục. Lưu ý rằng mặc dù ràng buộc không được thực thi trên các cột được bao gồm nhưng nó vẫn phụ thuộc vào chúng. Do đó, một số hoạt động trên các cột như vậy (e. g. , TEMP67) có thể gây ra ràng buộc xếp tầng và xóa chỉ mục

TEMP80 ] ( TEMP81 VỚI TEMP82 [,. ] ) TEMP83 [ Ở ĐÂU ( TEMP84 ) ]

Mệnh đề GLOBAL2 xác định một 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ác) cột hoặc (các) biểu thức đã chỉ định bằng cách sử dụng (các) toán tử đã chỉ định, thì không phải tất cả các phép so sánh này sẽ trả về TEMP86. Nếu tất cả các toán tử được chỉ định kiểm tra sự bình đẳng, thì điều này tương đương với ràng buộc TEMP13, mặc dù ràng buộc duy nhất thông thường sẽ nhanh hơn. Tuy nhiên, các ràng buộc loại trừ có thể chỉ định các ràng buộc tổng quát hơn so với đẳng thức đơn giản. Ví dụ: bạn có thể chỉ định một ràng buộc rằng không có hai hàng nào trong bảng chứa các vòng tròn chồng lên nhau (xem Phần 8. 8) bằng cách sử dụng toán tử TEMP88

Các ràng buộc loại trừ được triển khai bằng cách sử dụng một chỉ mục, vì vậy, mỗi toán tử được chỉ định phải được liên kết với một lớp toán tử thích hợp (xem Phần 11. 10) cho phương thức truy cập chỉ mục TEMP89. Các toán tử bắt buộc phải có tính giao hoán. Mỗi TEMP81 có thể tùy chọn chỉ định một loại toán tử và/hoặc các tùy chọn đặt hàng;

Phương thức truy cập phải hỗ trợ TEMP91 (xem Chương 64); . Mặc dù nó được cho phép, nhưng có rất ít điểm trong việc sử dụng cây B hoặc chỉ mục băm với một ràng buộc loại trừ, bởi vì điều này không làm được gì mà một ràng buộc duy nhất thông thường không làm tốt hơn. Vì vậy, trong thực tế, phương thức truy cập sẽ luôn là GiST hoặc SP-GiST

TEMP84 cho phép bạn chỉ định một ràng buộc loại trừ trên một tập hợp con của bảng; . Lưu ý rằng dấu ngoặc đơn được yêu cầu xung quanh vị ngữ

TEMP93 [ ( TEMP94 ) ] [ MATCH TEMP95 ] [ BẬT DELETE TEMP96 ] [ BẬT CẬP NHẬT TEMP96 ] (ràng buộc cột)
FOREIGN KEY ( TEMP5 [,. ] ) TÀI LIỆU THAM KHẢO TEMP99 [ ( TEMP94 [,. ] ) ] [ MATCH TEMP95 ] [ BẬT XÓA TEMP96 ] [ BẬT CẬP NHẬT TEMP96 ] (ràng buộc bảng)

Các mệnh đề này chỉ định một ràng buộc khóa ngoại, yêu cầu rằng một nhóm gồm một hoặc nhiều cột của bảng mới chỉ được chứa các giá trị khớp với các giá trị trong (các) cột được tham chiếu của một số hàng của bảng được tham chiếu. Nếu danh sách TEMP94 bị bỏ qua, khóa chính của TEMP99 được sử dụng. Các cột được tham chiếu phải là các cột của ràng buộc khóa chính hoặc duy nhất không thể bảo vệ được trong bảng được tham chiếu. Người dùng phải có quyền ON COMMIT06 trên bảng được tham chiếu (cả bảng hoặc các cột được tham chiếu cụ thể). Việc bổ sung ràng buộc khóa ngoại yêu cầu khóa ON COMMIT07 trên bảng được tham chiếu. Lưu ý rằng các ràng buộc khóa ngoại không thể được xác định giữa các bảng tạm thời và bảng vĩnh viễn

Một giá trị được chèn vào (các) cột tham chiếu được đối sánh với các giá trị của bảng được tham chiếu và các cột được tham chiếu bằng cách sử dụng loại đối sánh đã cho. Có ba loại đối sánh. ON COMMIT08, ON COMMIT09 và ON COMMIT10 (là giá trị mặc định). ON COMMIT08 sẽ không cho phép một cột của khóa ngoại nhiều cột có giá trị rỗng trừ khi tất cả các cột khóa ngoại đều có giá trị rỗng; . ON COMMIT10 cho phép bất kỳ cột khóa ngoại nào không có giá trị; . ON COMMIT09 chưa được triển khai. (Tất nhiên, các ràng buộc TEMP28 có thể được áp dụng cho (các) cột tham chiếu để ngăn các trường hợp này phát sinh. )

Ngoài ra, khi dữ liệu trong các cột được tham chiếu thay đổi, một số hành động nhất định sẽ được thực hiện trên dữ liệu trong các cột của bảng này. Mệnh đề ON COMMIT15 chỉ định hành động cần thực hiện khi một hàng được tham chiếu trong bảng được tham chiếu đang bị xóa. Tương tự như vậy, mệnh đề ON COMMIT16 chỉ định hành động sẽ thực hiện khi một cột được tham chiếu trong bảng được tham chiếu đang được cập nhật lên một giá trị mới. Nếu hàng được cập nhật, nhưng cột được tham chiếu không thực sự thay đổi, thì không có hành động nào được thực hiện. Không thể trì hoãn các hành động tham chiếu ngoài kiểm tra ON COMMIT17, ngay cả khi ràng buộc được tuyên bố là có thể trì hoãn. Có các hành động có thể sau đây cho mỗi mệnh đề

ON COMMIT17

Tạo lỗi cho biết việc xóa hoặc cập nhật sẽ tạo ra sự vi phạm ràng buộc khóa ngoại. Nếu ràng buộc bị trì hoãn, lỗi này sẽ được tạo ra tại thời điểm kiểm tra ràng buộc nếu vẫn tồn tại bất kỳ hàng tham chiếu nào. Đây là hành động mặc định

ON COMMIT19

Tạo lỗi cho biết việc xóa hoặc cập nhật sẽ tạo ra sự vi phạm ràng buộc khóa ngoại. Điều này giống như ON COMMIT17 ngoại trừ việc séc không thể hoãn lại

ON COMMIT21

Xóa mọi hàng tham chiếu đến hàng đã xóa hoặc cập nhật giá trị của (các) cột tham chiếu thành giá trị mới của các cột được tham chiếu tương ứng

ĐẶT NULL [ ( TEMP5 [,. ] ) ]

Đặt tất cả các cột tham chiếu hoặc một tập hợp con được chỉ định của các cột tham chiếu thành null. Chỉ có thể chỉ định một tập hợp con các cột cho các hành động ON COMMIT15

ĐẶT MẶC ĐỊNH [ ( TEMP5 [,. ] ) ]

Đặt tất cả các cột tham chiếu hoặc một tập hợp con cụ thể của các cột tham chiếu thành giá trị mặc định của chúng. Chỉ có thể chỉ định một tập hợp con các cột cho các hành động ON COMMIT15. (Phải có một hàng trong bảng được tham chiếu khớp với các giá trị mặc định, nếu chúng không rỗng, nếu không thao tác sẽ thất bại. )

Nếu (các) cột được tham chiếu bị thay đổi thường xuyên, thì nên thêm một chỉ mục vào (các) cột tham chiếu để các hành động tham chiếu được liên kết với ràng buộc khóa ngoại có thể được thực hiện hiệu quả hơn

ON COMMIT26
ON COMMIT27

Điều này kiểm soát xem ràng buộc có thể được hoãn lại hay không. Một ràng buộc không thể trì hoãn sẽ được kiểm tra ngay sau mỗi lệnh. Việc kiểm tra các ràng buộc có thể trì hoãn có thể được hoãn lại cho đến khi kết thúc giao dịch (sử dụng lệnh ON COMMIT28). ON COMMIT27 là mặc định. Hiện tại, chỉ có các ràng buộc TEMP13, TEMP12, GLOBAL2 và ON COMMIT06 (khóa ngoại) chấp nhận mệnh đề này. Các ràng buộc của TEMP28 và ANALYZE2 không thể hoãn lại. Lưu ý rằng các ràng buộc có thể hoãn lại không thể được sử dụng làm trọng tài xung đột trong tuyên bố TEMP46 bao gồm mệnh đề ON COMMIT37

ON COMMIT38
ON COMMIT39

Nếu một ràng buộc có thể hoãn lại, điều khoản này chỉ định thời gian mặc định để kiểm tra ràng buộc. Nếu ràng buộc là ON COMMIT38, nó sẽ được kiểm tra sau mỗi câu lệnh. Đây là mặc định. Nếu ràng buộc là ON COMMIT39, nó chỉ được kiểm tra khi kết thúc giao dịch. Thời gian kiểm tra ràng buộc có thể được thay đổi bằng lệnh ON COMMIT28

ON COMMIT43

Mệnh đề tùy chọn này chỉ định phương thức truy cập bảng sẽ sử dụng để lưu trữ nội dung cho bảng mới; . Xem Chương 63 để biết thêm thông tin. Nếu tùy chọn này không được chỉ định, phương thức truy cập bảng mặc định sẽ được chọn cho bảng mới. Xem để biết thêm thông tin

ON COMMIT45 [= ON COMMIT46] [,. ] )

Mệnh đề này chỉ định các tham số lưu trữ tùy chọn cho một bảng hoặc chỉ mục; . Để tương thích ngược, mệnh đề LOCAL1 cho một bảng cũng có thể bao gồm ON COMMIT48 để chỉ định rằng các hàng của bảng mới không được chứa OID (số nhận dạng đối tượng), ON COMMIT49 không được hỗ trợ nữa

ON COMMIT50

Đây là cú pháp tương thích ngược để khai báo bảng ON COMMIT50, việc tạo bảng ON COMMIT52 không được hỗ trợ nữa

ON COMMIT

Hành vi của các bảng tạm thời ở cuối khối giao dịch có thể được kiểm soát bằng cách sử dụng ON COMMIT. Ba lựa chọn là

ON COMMIT55

Không có hành động đặc biệt nào được thực hiện khi kết thúc giao dịch. Đây là hành vi mặc định

ON COMMIT56

Tất cả các hàng trong bảng tạm thời sẽ bị xóa vào cuối mỗi khối giao dịch. Về cơ bản, một ON COMMIT57 tự động được thực hiện ở mỗi lần xác nhận. Khi được sử dụng trên một bảng được phân vùng, bảng này không được xếp tầng vào các phân vùng của nó

ON COMMIT58

Bảng tạm thời sẽ bị hủy ở cuối khối giao dịch hiện tại. Khi được sử dụng trên một bảng được phân vùng, hành động này sẽ loại bỏ các phân vùng của nó và khi được sử dụng trên các bảng có phần tử con kế thừa, nó sẽ loại bỏ các phần tử con phụ thuộc

ON COMMIT59

ON COMMIT60 là tên của vùng bảng mà bảng mới sẽ được tạo. Nếu không được chỉ định, được tư vấn hoặc nếu bảng là tạm thời. Đối với các bảng được phân vùng, do không cần lưu trữ cho chính bảng đó, vùng bảng được chỉ định sẽ ghi đè ON COMMIT61 làm vùng bảng mặc định để sử dụng cho mọi phân vùng mới được tạo khi không có vùng bảng nào khác được chỉ định rõ ràng

SỬ DỤNG INDEX TABLESPACE ON COMMIT60

Mệnh đề này cho phép lựa chọn không gian bảng trong đó chỉ mục được liên kết với ràng buộc TEMP13, TEMP12 hoặc GLOBAL2 sẽ được tạo. Nếu không được chỉ định, được tư vấn hoặc nếu bảng là tạm thời