2010-09-23 43 views

Trả lời

15

Câu trả lời thực tế là "nó phụ thuộc", không có tuyệt đối.

Tiêu chí cơ bản là phải là chế độ xem có thể cập nhật theo ý kiến ​​của cơ sở dữ liệu, có nghĩa là động cơ có thể xác định duy nhất (các) hàng được cập nhật và thứ hai là các trường có thể cập nhật. Nếu chế độ xem của bạn có trường được tính toán hoặc đại diện cho sản phẩm của phụ huynh/con tham gia thì câu trả lời mặc định có thể là không. Tuy nhiên, nó cũng có thể gian lận ... trong MS SQL Server và Oracle (chỉ mất hai ví dụ), bạn có thể kích hoạt khi bạn cố gắng chèn hoặc cập nhật một khung nhìn để bạn có thể tạo ra một cái gì đó mà máy chủ không nghĩ rằng có thể cập nhật thành thứ gì đó - thường là vì bạn có kiến ​​thức rằng máy chủ không thể dễ dàng suy ra từ lược đồ.

+1

"Nó phụ thuộc" - câu trả lời yêu thích của chuyên gia cơ sở dữ liệu. 8-) –

+0

Quá nhiều năm là "lập trình viên" với quá nhiều cuộc hội thoại với khách hàng/người dùng có câu trả lời hay có thể được biểu diễn bằng số 0 và số ít (-: – Murph

+0

Trong Oracle, bạn cũng có thể tạo ' Các tham số của INSTEAD OF' sẽ xử lý chèn, cập nhật và xóa trên một khung nhìn –

1

Có họ - cú pháp là như nhau như cập nhật một bảng

Update MyView 
Set Col1 = "Testing" 
Where Col2 = 3 
Go 

Có một vài điều kiện để tạo ra một Xem có thể được cập nhật. Chúng có thể được tìm thấy here

EDIT:

Tôi phải thêm rằng dựa trên MS SQL

+1

Tại sao 'go'? Tôi không nghĩ rằng đó là một cấu trúc sql hợp lệ trừ SSMS. :) –

+0

@Denis - Cảm ơn! Tôi vừa nhận ra rằng OP đã gắn thẻ câu hỏi Oracle & PostgreSQL. Rất tiếc, – codingbadger

+0

Tôi tin rằng truy vấn của bạn sẽ hoạt động trong các hệ thống khác cũng như là phần đi. –

4

Câu trả lời đúng là "nó phụ thuộc". Ví dụ: bạn không thể cập nhật cột tổng hợp trong chế độ xem. Đối với chế độ xem Oracle, bạn có thể Google cho "chế độ xem tham gia có thể cập nhật" cho một số ví dụ về thời điểm bạn có thể và không thể cập nhật chế độ xem.

3

PostgreSQL có các RULE để tạo các VIEW có thể cập nhật. Kiểm tra the examples in the manual để xem cách sử dụng chúng.

Ps. Trong PostgreSQL, VIEW là một RULE, một quy tắc lựa chọn.

2

Trước đây, bạn không thể cập nhật bất kỳ chế độ xem nào. Mục đích chính của chế độ xem là xem ở dữ liệu, do đó tên. Nó cũng có thể được gọi là truy vấn được lưu trữ được lưu trữ.

Hôm nay, nhiều công cụ cơ sở dữ liệu hỗ trợ cập nhật lượt xem. Nó bị ràng buộc với các hạn chế, một số cập nhật hầu như không thể (ví dụ: các cột được tính toán, nhóm, v.v.).

2

Có hai phương pháp:

  1. THAY kích hoạt, mà về cơ bản thay đổi các vấn đề cho người dùng. Bạn viết một số mã thủ tục thực hiện công việc. Chắc chắn, không có đảm bảo nào được thực hiện về tính chính xác, nhất quán, v.v.Từ quan điểm của RDBMS engine, một trigger có thể xóa tất cả mọi thứ từ các bảng cơ sở, bất kể cập nhật nào được thực hiện trong khung nhìn, hoàn toàn ổn.

  2. Tham vọng nhiều hơn là bản cập nhật xem được xử lý độc quyền bởi công cụ RDBMS. Không có nhiều tiến bộ được thực hiện ở đây: để đặt nó nhẹ, nếu bạn có một số ý tưởng tốt ở đó, sau đó bạn có thể tung ra luận án tiến sĩ. Trong thực tế, RDBMS yêu thích của bạn có thể cho phép một số hạn chế cập nhật xem quảng cáo hock; kiểm tra hướng dẫn :-)

1

Khi chế độ xem được tạo trong SQL Server, siêu dữ liệu cho cột bảng được tham chiếu (tên cột và vị trí thứ tự) được lưu giữ trong cơ sở dữ liệu. Bất kỳ thay đổi nào đối với (các) bảng cơ bản được tham chiếu (sắp xếp lại cột, bổ sung cột mới, v.v.) sẽ không được phản ánh trong chế độ xem cho đến khi xem:

• Thay đổi bằng câu lệnh ALTER VIEW • DROP VIEW/CREATE VIEW statements • Đã làm mới bằng cách sử dụng quy trình lưu trữ hệ thống sp_refreshview

+1

Câu trả lời này dường như được sao chép trực tiếp từ [ở đây] (https://www.mssqltips.com/sqlservertip/1427/ table-changes-not-automatic-reflect-in-a-sql-server-view /) – Pang

+0

quan sát tốt: D – Ravi

1

Có thể chúng có thể cập nhật nhưng không phải lúc nào. Các lượt xem có thể được cập nhật theo sau.

-Nếu chế độ xem bao gồm khóa chính của bảng dựa trên đó chế độ xem đã được tạo.

-Nếu chế độ xem được xác định dựa trên một và chỉ một bảng.

-Nếu chế độ xem chưa được xác định bằng cách sử dụng các nhóm và chức năng tổng hợp.

-Nếu chế độ xem không có bất kỳ mệnh đề riêng biệt nào trong định nghĩa của nó.

-Nếu chế độ xem được cho là được cập nhật dựa trên một chế độ xem khác thì phần sau sẽ có thể cập nhật được.

-Nếu định nghĩa của chế độ xem không có bất kỳ truy vấn phụ nào.

Các vấn đề liên quan