Postgresql 8.1.23 Tài liệu | ||||
---|---|---|---|---|
prev | Backward nhanh | Chương 8. Kiểu dữ liệu | Chuyển tiếp nhanh | Tiếp theo |
Aloại tổng kèo chấp bóng đá hôm naymô tả cấu trúc của một hàng hoặc bản ghi; Nó về bản chất chỉ là một danh sách Tên trường và kiểu dữ liệu của họ.PostgreSQLCho phép các giá trị của kèo chấp bóng đá hôm nay được sử dụng theo nhiều cách giống nhau mà các loại đơn giản có thể đã sử dụng. Ví dụ: một cột của bảng có thể được khai báo là một loại tổng hợp.
Đây là hai ví dụ đơn giản về việc xác định tổng kèo chấp bóng đá hôm nay Các loại:
Tạo kèo chấp bóng đá hôm nay phức tạp như ( r chính xác gấp đôi, Tôi gấp đôi độ chính xác ); Tạo kèo chấp bóng đá hôm nay hàng tồn kho_item là ( tên văn bản, Nhà cung cấp_id Số nguyên, Giá số );
Cú pháp có thể so sánh vớiTạo BÀN, ngoại trừ chỉ có thể quy định; Không có ràng buộc (chẳng hạn nhưKhông VÔ GIÁ TRỊ) hiện có thể được bao gồm. Lưu ý rằngASTừ khóa là điều cần thiết; không có nó, hệ thống sẽ nghĩ một kèo chấp bóng đá hôm nay khá khácTạo KIỂULệnh có nghĩa là và bạn sẽ nhận được cú pháp lẻ lỗi.
Đã xác định kèo chấp bóng đá hôm nay, chúng ta có thể sử dụng chúng để tạo Bảng:
Tạo bảng on_hand ( hàng tồn kho_item, Đếm số nguyên ); Chèn vào kèo chấp bóng đá hôm nay giá trị on_hand (hàng ('Dice mờ', 42, 1.99), 1000);
hoặc kèo chấp bóng đá hôm nay chức năng:
11545_11709
Bất cứ khi nào bạn tạo một bảng, một loại tổng kèo chấp bóng đá hôm nay cũng tự động tạo, với cùng tên với bảng, để đại diện cho loại hàng của bảng. Ví dụ, chúng ta đã nói
Tạo bảng kiểm kê_item ( tên văn bản, Nhà cung cấp nhà cung cấp_id kèo chấp bóng đá hôm nay nhà cung cấp tài liệu tham khảo, Kiểm tra số giá (Giá 0) );
sau đó giống nhauInventory_Itemloại tổng kèo chấp bóng đá hôm nay được hiển thị ở trên sẽ ra đời như một Sản phẩm phụ, và có thể được sử dụng như trên. Lưu ý tuy nhiên một Hạn chế quan trọng của việc thực hiện hiện tại: vì không có Các ràng buộc được liên kết với một loại tổng kèo chấp bóng đá hôm nay, Các ràng buộc được hiển thị trong định nghĩa bảngKhông áp dụngvới các giá trị của Loại tổng hợp bên ngoài bảng. (Một cách giải quyết một phần là Sử dụng các loại miền làm thành viên của kèo chấp bóng đá hôm nay.)
Để viết giá trị tổng kèo chấp bóng đá hôm nay như một hằng số theo nghĩa đen, kèm theo các giá trị trường trong ngoặc đơn và tách chúng bằng cách dấu phẩy. Bạn có thể đặt dấu ngoặc kép xung quanh bất kỳ giá trị trường nào và Phải làm như vậy nếu nó chứa dấu phẩy hoặc dấu ngoặc đơn. (Chi tiết hơn xuất hiện bên dưới.) Vì vậy, định dạng chung của hằng số tổng kèo chấp bóng đá hôm nay là như sau:
'(Val1 , Val2, ...) '
Một ví dụ là
'("Xúc xắc mờ", 42,1,99)'
đó sẽ là giá trị kèo chấp bóng đá hôm nay lệ củaInventory_Itemkèo chấp bóng đá hôm nay được xác định ở trên. Để làm a trường là null, không viết ký tự ở vị trí của nó trong danh sách. Ví dụ, hằng số này chỉ định một thứ ba null cánh đồng:
'("Xúc xắc mờ", 42,)'
Nếu bạn muốn một chuỗi trống chứ không phải null, hãy viết Double Báo giá:
'("", 42,)'
Ở đây trường đầu tiên là chuỗi trống không null, thứ ba là null.
(Những hằng số này thực sự chỉ là một trường kèo chấp bóng đá hôm nay đặc biệt của Hằng số loại chung được thảo luận trongPhần 4.1.2.5. Hằng số ban đầu được coi là một chuỗi và được chuyển sang thói quen chuyển đổi đầu vào loại tổng kèo chấp bóng đá hôm nay. MỘT Thông số kỹ thuật loại rõ ràng có thể cần thiết.)
ThehàngCú pháp biểu thức cũng có thể được sử dụng để xây dựng các giá trị tổng kèo chấp bóng đá hôm nay. Trong hầu hết các trường kèo chấp bóng đá hôm nay, đây là Đơn giản đáng kể hơn để sử dụng so với cú pháp theo yêu cầu chuỗi, Vì bạn không phải lo lắng về nhiều lớp trích dẫn. Chúng tôi đã sử dụng phương thức này ở trên:
hàng ('Dice mờ', 42, 1.99) Hàng ('', 42, null)
Từ khóa hàng thực sự là tùy chọn miễn là bạn có nhiều hơn một trường trong biểu thức, vì vậy những điều này có thể đơn giản hóa ĐẾN
('Xúc xắc mờ', 42, 1.99) ('', 42, null)
ThehàngCú pháp biểu thức là được thảo luận chi tiết hơn trongPhần 4.2.11.
Để truy cập một trường của cột tổng kèo chấp bóng đá hôm nay, người ta ghi một dấu chấm và tên trường, giống như chọn trường từ bảng tên. Trên thực tế, nó rất giống với việc chọn từ tên bảng Rằng bạn thường phải sử dụng dấu ngoặc đơn để không bị nhầm lẫn trình phân tích cú pháp. Ví dụ: bạn có thể cố gắng chọn một số trường con Từ chúng tôion_handBảng ví dụ với một cái gì đó như:
chọn item.name từ on_hand where item.price 9,99;
Điều này sẽ không hoạt động vì tênmụcđược coi là tên bảng, không phải trường Tên, theo quy tắc cú pháp SQL. Bạn phải viết nó như thế này:
Chọn (mục) .Name từ on_hand WHERE (Mục) .Price 9,99;
Hoặc nếu bạn cũng cần sử dụng tên bảng (ví dụ trong một truy vấn đa thể), như thế này:
Chọn (on_hand.item) .Name từ on_hand ở đâu (on_hand.item).
Bây giờ đối tượng được giải thích chính xác là một tham chiếu đếnMụcCột, và sau đó Trường con có thể được chọn từ nó.
Các vấn đề cú pháp tương tự áp dụng bất cứ khi nào bạn chọn một trường từ một giá trị tổng kèo chấp bóng đá hôm nay. Ví dụ, để chọn chỉ một trường từ kết quả của một hàm trả về giá trị tổng kèo chấp bóng đá hôm nay, Bạn cần phải viết một cái gì đó như
Chọn (my_func (...)). Trường từ ...
Không có dấu ngoặc đơn, điều này sẽ gây ra cú pháp lỗi.
Dưới đây là một số ví dụ về cú pháp thích kèo chấp bóng đá hôm nay để chèn và cập nhật các cột tổng kèo chấp bóng đá hôm nay. Đầu tiên, chèn hoặc cập nhật một toàn bộ cột:
Chèn vào kèo chấp bóng đá hôm nay giá trị MyTab (Complex_col) ((1.1,2.2)); Cập nhật MyTab Set Complex_col = Row (1.1,2.2) trong đó ...;
Ví dụ đầu tiên bỏ quahàng, The thứ hai sử dụng nó; chúng ta có thể đã làm điều đó theo bất kỳ cách nào.
Chúng ta có thể cập nhật một trường con riêng lẻ của một tổng kèo chấp bóng đá hôm nay Cột:
Cập nhật MyTab Set Complex_col.r = (Complex_col) .R + 1 trong đó ...;
Lưu ý ở đây rằng chúng ta không cần (và thực sự không thể) dấu ngoặc đơn xung quanh tên cột xuất hiện ngay sauset, nhưng chúng ta cần dấu ngoặc đơn khi tham chiếu cùng một cột trong biểu thức ở bên phải của dấu bằng.
Và chúng ta có thể chỉ định kèo chấp bóng đá hôm nay trường con là mục tiêu choChèn, quá:
Chèn vào kèo chấp bóng đá hôm nay giá trị MyTab (Complex_col.r, Complex_col.i) (1.1, 2.2);
Chúng tôi đã không cung cấp kèo chấp bóng đá hôm nay giá trị cho tất cả kèo chấp bóng đá hôm nay trường con của cột, kèo chấp bóng đá hôm nay trường con còn lại sẽ được lấp đầy giá trị null.
Biểu diễn văn bản bên ngoài của giá trị tổng kèo chấp bóng đá hôm nay bao gồm các mục được giải thích theo I/O Quy tắc chuyển đổi cho các loại trường riêng lẻ, cộng với Trang trí chỉ ra cấu trúc tổng kèo chấp bóng đá hôm nay. Các Trang trí bao gồm dấu ngoặc đơn ((và)) xung quanh toàn bộ giá trị, cộng với dấu phẩy (,) giữa kèo chấp bóng đá hôm nay mục liền kề. Khoảng trắng bên ngoài dấu ngoặc bị bỏ qua, nhưng trong dấu ngoặc đơn nó được coi là một phần của giá trị trường và có thể hoặc có thể không đáng kể tùy thuộc vào chuyển đổi đầu vào Quy tắc cho kiểu dữ liệu hiện trường. Ví dụ, trong
'(42)'
khoảng trắng sẽ bị bỏ qua nếu kèo chấp bóng đá hôm nay trường là số nguyên, Nhưng không phải nếu đó là văn bản.
Như được hiển thị trước đây, khi viết một giá trị tổng kèo chấp bóng đá hôm nay, bạn có thể Viết trích dẫn kép xung quanh bất kỳ giá trị trường cá nhân. Bạnphảilàm như vậy nếu Giá trị trường nếu không sẽ nhầm lẫn trình phân tích cú pháp giá trị tổng kèo chấp bóng đá hôm nay. Cụ thể, các trường chứa dấu ngoặc đơn, dấu phẩy, đôi Trích dẫn, hoặc dấu gạch chéo ngược phải được trích dẫn kép. Để đặt một đôi Trích dẫn hoặc Backslash trong một giá trị trường tổng kèo chấp bóng đá hôm nay được trích dẫn, trước nó với một dấu gạch chéo ngược. (Ngoài ra, một cặp trích dẫn kép trong một Giá trị trường được trích xuất kép được thực hiện để đại diện cho một báo giá kép ký tự, tương tự như các quy tắc cho các trích dẫn đơn trong SQL Chuỗi theo nghĩa đen.) Ngoài ra, bạn có thể sử dụng Backslash-escaping để bảo vệ tất cả các ký tự dữ liệu nếu không sẽ được coi là Cú pháp tổng kèo chấp bóng đá hôm nay.
Giá trị trường hoàn toàn trống (không có ký tự nào giữa dấu phẩy hoặc dấu ngoặc đơn) đại diện cho một null. Để viết một giá trị đó là một chuỗi trống chứ không phải null, viết"".
Thói quen đầu ra tổng kèo chấp bóng đá hôm nay sẽ đặt dấu ngoặc kép xung quanh Giá trị trường nếu chúng là các chuỗi trống hoặc chứa dấu ngoặc đơn, Dấu phẩy, trích dẫn đôi, dấu gạch chéo ngược hoặc không gian trắng. (Làm như vậy Đối với không gian trắng là không cần thiết, nhưng khả năng hỗ trợ.) Báo giá và dấu gạch chéo ngược được nhúng trong các giá trị trường sẽ nhân đôi.
Lưu ý:Hãy nhớ rằng những gì bạn viết trong SQL lệnh trước tiên sẽ được hiểu là một chuỗi theo nghĩa đen và Sau đó là một tổng kèo chấp bóng đá hôm nay. Điều này tăng gấp đôi số lượng dấu vết chéo ngược Bạn cần. Ví dụ: để chèn aTexttrường chứa báo giá kép và A Backslash trong một giá trị tổng kèo chấp bóng đá hôm nay, bạn cần phải viết
Chèn ... Giá trị ('("\" \\\ ")');Bộ xử lý theo nghĩa chính của chuỗi loại bỏ một cấp độ của Backslashes, để những gì đến với giá trị tổng kèo chấp bóng đá hôm nay trình phân tích cú pháp trông giống như("\" \ "). TRONG biến, chuỗi được đưa vàoTextDữ liệu Thói quen đầu vào của kèo chấp bóng đá hôm nay trở thành"\. (Nếu chúng tôi làm việc với một loại dữ liệu có thói quen đầu vào cũng được xử lý kèo chấp bóng đá hôm nay dấu gạch chéo đặc biệt,byteaVí dụ, chúng ta có thể cần nhiều như Tám dấu gạch chéo ngược trong lệnh để đưa một dấu gạch chéo ngược vào Trường tổng kèo chấp bóng đá hôm nay được lưu trữ.) Trích dẫn đô la (xemPhần 4.1.2.2) có thể được sử dụng để tránh sự cần thiết phải tăng gấp đôi Backslashes.
Tip:ThehàngTrình xây dựng Cú pháp thường dễ làm việc hơn so với Cú pháp theo nghĩa tổng kèo chấp bóng đá hôm nay khi viết các giá trị tổng kèo chấp bóng đá hôm nay trong Các lệnh SQL. TRONGhàng, cá nhân Các giá trị trường được viết giống như cách chúng sẽ được viết Khi không phải là thành viên của tổng kèo chấp bóng đá hôm nay.