1. Sự khác biệt giữa 2 loại bảng tạm thời trong SQL Server
Đối với SQL Server các bạn có 2 bảng định dạng tạm đó là
- Bảng tạm thời cục bộ. Sử dụng để tạo bảng tạm thời và tồn tại trong kết nối của người dùng tạo ra bảng đó và sẽ bị hủy khi ngắt kết nối
- Bảng tạm thời toàn cầu. Sử dụng để tạo bảng tạm thời và tồn tại khi tất cả các kết nối đến cơ sở dữ liệu đang làm việc đóng hết. There can be used at connection of other user
2. Sử dụng để tạo bảng tạm thời trong SQL Server
Để thực hiện tạo bảng tạm thời dạng cục bộ, các bạn học cơ sở dữ liệu SQL cần thực hiện dòng lệnh sau và chú ý luôn cần có dấu # ở trước tên bảng
Tạo bảng dữ liệu tạm thời dạng toàn cục trong SQL Server như sau
Sau khi tạo các bảng tạm thời để phục vụ cho việc lưu trữ tạm thời. Chúng ta có thể thực hiện các lệnh truy vấn, thực thi với bảng tạm giống như bảng thật bình thường trong SQL Server
Hy vọng qua bài hướng dẫn này các bạn đã biết cách tạo bảng tạm trong SQL Server để phục vụ công việc của mình. Bên cạnh đó, các bạn muốn được đào tạo bài bản về cơ sở dữ liệu SQL cùng chuyên gia kinh nghiệm Stanford có thể tham khảo tài liệu học SQL tại đây. Khoá SQL Server
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 sẽ 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
Trình nền autovacuum 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
TEMP
0Tên [tùy chọn đủ điều kiện lược đồ] của bảng sẽ được tạo
TEMP
1Tạ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 TEMP
3. Nhưng lệnh TEMP
3 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ữ
TEMP
5Tên của một cột sẽ được tạo trong bảng mới
TEMP
6Kiể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
TEMP
7Mệnh đề TEMP
8 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
TEMP
9Mệnh đề ON COMMIT
0 đặ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 COMMIT
1 hoặc ON COMMIT
2. [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 COMMIT
3 và ON COMMIT
4. [ON COMMIT
4 chỉ khả dụng nếu ON COMMIT
6 được sử dụng khi xây dựng PostgreSQL. ] Ngoài ra, ON COMMIT
7 có thể là ON COMMIT
8 để chỉ định rõ ràng hành vi mặc định, đó là tham khảo cài đặt default_toast_compression tại thời điểm chèn dữ liệu để xác định phương thức sử dụng
ON COMMIT
9 [,. ] ]Mệnh đề ANALYZE
0 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 ANALYZE
0 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 ANALYZE
2 đượ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 ANALYZE
2 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 ANALYZE
4 trong cha mẹ sẽ không được xem xét. Lưu ý rằng một ràng buộc ANALYZE
2 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 ANALYZE
6 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 } [ { TEMP
5. [ ANALYZE
8 ] } [ ANALYZE
9 ] [,. ] ]
Mệnh đề tùy chọn GLOBAL
0 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 Phần 38. 16. 3 để 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 TEMP
3 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 GLOBAL
2;
Xem Phần 5. 11 để thảo luận thêm về phân vùng bảng
GLOBAL
3 { CHO GIÁ TRỊ GLOBAL
4. 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 GLOBAL
5 hoặc làm phân vùng mặc định bằng cách sử dụng GLOBAL
6. 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
GLOBAL
4 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ó GLOBAL
8 được sử dụng để phân vùng danh sách, biểu mẫu có GLOBAL
9 và LOCAL
0 được sử dụng để phân vùng phạm vi và biểu mẫu có LOCAL
1 được sử dụng cho phân vùng băm
LOCAL
2 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ư LOCAL
3
Khi tạo phân vùng danh sách, có thể chỉ định LOCAL
4 để 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 LOCAL
4 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 GLOBAL
9 là giới hạn bao gồm, trong khi giới hạn trên được chỉ định bằng LOCAL
0 là giới hạn loại trừ. Nghĩa là, các giá trị được chỉ định trong danh sách GLOBAL
9 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 LOCAL
0 thì không. Lưu ý rằng câu lệnh này phải được hiểu theo quy tắc so sánh theo hàng [Phần 9. 24. 5]. Ví dụ: đã cho TEMPORARY
0, một phân vùng bị ràng buộc bởi TEMPORARY
1 cho phép TEMPORARY
2 với bất kỳ TEMPORARY
3 nào, TEMPORARY
4 với bất kỳ TEMPORARY
5 không null nào và TEMPORARY
6 với bất kỳ TEMPORARY
7 nào
Các giá trị đặc biệt TEMPORARY
8 và TEMPORARY
9 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 TEMP
0 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 TEMP
1 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 TEMPORARY
9 như một phần của giới hạn dưới và TEMPORARY
8 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 TEMP
4 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 TEMP
5 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 TEMPORARY
8 hoặc TEMPORARY
9 đượ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ụ, TEMP
8 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ư UNLOGGED
0, 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 TEMPORARY
8 và TEMPORARY
9, 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. TEMPORARY
9 có thể được coi là lớn hơn bất kỳ giá trị nào khác, kể cả "vô cùng" và TEMPORARY
8 là nhỏ hơn bất kỳ giá trị nào khác, kể cả "âm vô cực". Do đó, phạm vi UNLOGGED
5 không phải là một phạm vi trống;
Nếu GLOBAL
6 đượ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 GLOBAL
6 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 ANALYZE
2 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 ANALYZE
2 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 EXISTS
0 yêu cầu phải sử dụng khóa IF NOT EXISTS
1 trên bảng cha
IF NOT EXISTS
2 [ IF NOT EXISTS
3. ]Mệnh đề IF NOT EXISTS
4 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ư ANALYZE
0, 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ư ANALYZE
0, các cột và ràng buộc được sao chép bởi IF NOT EXISTS
4 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 EXISTS
4 khác, một lỗi sẽ được báo hiệu
Các mệnh đề IF NOT EXISTS
3 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 TEMP
00 sao chép tài sản, chỉ định TEMP
01 bỏ qua tài sản. TEMP
01 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à
TEMP
03
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
TEMP
04Phươ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
TEMP
05ANALYZE
2 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
TEMP
07Cá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ư TEMP
08, có thể tạo ra liên kết chức năng giữa bảng gốc và bảng mới
TEMP
09Mọ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
TEMP
10Mọi thông số nhận dạng của các đị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ũ
TEMP
11Các ràng buộc chỉ mục, TEMP
12, TEMP
13 và GLOBAL
2 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. ]
TEMP
15Số liệu thống kê mở rộng được sao chép vào bảng mới
TEMP
16Cài đặt ANALYZE
6 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 ANALYZE
6, 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 ANALYZE
6, hãy xem Phần 73. 2
TEMP
20TEMP
20 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 đề TEMP
01 riêng lẻ sau TEMP
20 để chọn tất cả trừ một số tùy chọn cụ thể. ]
Mệnh đề IF NOT EXISTS
4 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. , TEMP
11 từ chế độ xem] bị bỏ qua
TEMP
26Tê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ư TEMP
27 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
TEMP
28Cột không được phép chứa giá trị null
LOCAL
4Cộ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 [ ANALYZE
8 ] [ KHÔNG ĐƯỢC THỪA NHẬN ]
Mệnh đề ANALYZE
2 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 ANALYZE
2 không thể chứa các truy vấn con cũng như tham chiếu đến các biến không phải là các cột của hàng hiện tại [xem Phần 5. 4. 1]. Cột hệ thống TEMP
33 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 ANALYZE
4 sẽ không lan truyền đến các bảng con
Khi một bảng có nhiều ràng buộc ANALYZE
2, 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 TEMP
28. [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 ANALYZE
2. ]
TEMP
38Mệnh đề GLOBAL
6 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
TEMP
40 ] ĐÃ 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 TEMP
41 đượ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
TEMP
42 ] ]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à TEMP
28
Các mệnh đề TEMP
44 và TEMP
45 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 TEMP
46 và TEMP
47
Trong lệnh TEMP
46, nếu TEMP
44 được chọn, giá trị do người dùng chỉ định chỉ được chấp nhận nếu câu lệnh TEMP
46 chỉ định TEMP
51. Nếu TEMP
45 đượ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 TEMP
53, 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 TEMP
47, nếu TEMP
44 đượ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 GLOBAL
6 sẽ bị từ chối. Nếu chọn TEMP
45 thì có thể cập nhật cột bình thường. [Không có mệnh đề TEMP
58 cho lệnh TEMP
47. ]
Mệnh đề TEMP
60 tùy chọn có thể được sử dụng để ghi đè các tùy chọn của chuỗi. Xem TẠO TRÌNH TỰ để biết chi tiết
TEMP
61 [ràng buộc cột]ĐỘC NHẤT [ NULLS [ NOT ] DISTINCT ] [ TEMP
5 [,. ] ]
[ BAO GỒM [ TEMP
5 [,. ]]
] [ràng buộc bảng]Ràng buộc TEMP
13 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 TEMP
65
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 đề TEMP
66 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. , TEMP
67] có thể gây ra ràng buộc xếp tầng và xóa chỉ mục
TEMP
12 [ràng buộc cột]Khóa CHÍNH [ TEMP
5 [,. ] ]
[ BAO GỒM [ TEMP
5 [,. ]]
] [ràng buộc bảng]Ràng buộc TEMP
12 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ỏ. ]
TEMP
12 thực thi các ràng buộc dữ liệu giống như sự kết hợp giữa TEMP
13 và TEMP
28. 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 TEMP
12 chia sẻ các hạn chế được mô tả trước đó cho các ràng buộc TEMP
13
Việc thêm ràng buộc TEMP
12 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 đề TEMP
66 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. , TEMP
67] có thể gây ra ràng buộc xếp tầng và xóa chỉ mục
TEMP
80 ] [ TEMP
81 VỚI TEMP
82 [,. ] ] TEMP
83 [ Ở ĐÂU [ TEMP
84 ] ]Mệnh đề GLOBAL
2 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ề TEMP
86. 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 TEMP
13, 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ử TEMP
88
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 TEMP
89. Các toán tử bắt buộc phải có tính giao hoán. Mỗi TEMP
81 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ợ TEMP
91 [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
TEMP
84 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ữ
TEMP
93 [ [ TEMP
94 ] ] [ MATCH TEMP
95 ] [ BẬT DELETE TEMP
96 ] [ BẬT CẬP NHẬT TEMP
96 ] [ràng buộc cột]FOREIGN KEY [ TEMP
5 [,. ] ] TÀI LIỆU THAM KHẢO TEMP
99 [ [ TEMP
94 [,. ] ] ] [ MATCH TEMP
95 ] [ BẬT XÓA TEMP
96 ] [ BẬT CẬP NHẬT TEMP
96 ]
[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 TEMP
94 bị bỏ qua, khóa chính của TEMP
99 đượ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 COMMIT
06 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 COMMIT
07 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 COMMIT
08, ON COMMIT
09 và ON COMMIT
10 [là giá trị mặc định]. ON COMMIT
08 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 COMMIT
10 cho phép bất kỳ cột khóa ngoại nào không có giá trị; . ON COMMIT
09 chưa được triển khai. [Tất nhiên, các ràng buộc TEMP
28 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 COMMIT
15 chỉ định hành động sẽ 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 COMMIT
16 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 COMMIT
17, 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 COMMIT
17
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 COMMIT
19Tạ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 COMMIT
17 ngoại trừ việc séc không thể hoãn lại
ON COMMIT
21Xó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 [ [ TEMP
5 [,. ] ] ]
Đặ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 COMMIT
15
ĐẶT MẶC ĐỊNH [ [ TEMP
5 [,. ] ] ]
Đặ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 COMMIT
15. [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 COMMIT
26ON COMMIT
27Đ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 COMMIT
28]. ON COMMIT
27 là mặc định. Hiện tại, chỉ có các ràng buộc TEMP
13, TEMP
12, GLOBAL
2 và ON COMMIT
06 [khóa ngoại] chấp nhận mệnh đề này. Các ràng buộc của TEMP
28 và ANALYZE
2 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ố TEMP
46 bao gồm mệnh đề ON COMMIT
37
ON COMMIT
38ON COMMIT
39Nế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 COMMIT
38, 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 COMMIT
39, 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 COMMIT
28
ON COMMIT
43Mệ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 default_table_access_method để biết thêm thông tin
ON COMMIT
45 [= ON COMMIT
46] [,. ] ]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 đề LOCAL
1 cho một bảng cũng có thể bao gồm ON COMMIT
48 để 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 COMMIT
49 không được hỗ trợ nữa
ON COMMIT
50Đây là cú pháp tương thích ngược để khai báo bảng ON COMMIT
50, việc tạo bảng ON COMMIT
52 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 COMMIT
55
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 COMMIT
56Tấ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 COMMIT
57 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 COMMIT
58Bả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 COMMIT
59ON COMMIT
60 là tên của không gian bảng trong đó bảng mới sẽ được tạo. Nếu không được chỉ định, default_tablespace sẽ được tư vấn hoặc temp_tablespaces 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 COMMIT
61 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 COMMIT
60
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 TEMP
13, TEMP
12 hoặc GLOBAL
2 sẽ được tạo. Nếu không được chỉ định, default_tablespace sẽ được tư vấn hoặc temp_tablespaces nếu bảng là tạm thời