SQL - Sử dụng Chế độ xem
Một khung nhìn chỉ là một câu lệnh SQL được lưu trữ trong cơ sở dữ liệu với một tên liên quan. Một khung nhìn thực sự là một thành phần của một bảng dưới dạng một truy vấn SQL được xác định trước.
Một dạng xem có thể chứa tất cả các hàng của bảng hoặc chọn các hàng từ một bảng. Một dạng xem có thể được tạo từ một hoặc nhiều bảng phụ thuộc vào truy vấn SQL đã viết để tạo dạng xem.
Chế độ xem, là một loại bảng ảo cho phép người dùng thực hiện những việc sau:
Cấu trúc dữ liệu theo cách mà người dùng hoặc lớp người dùng thấy tự nhiên hoặc trực quan.
Hạn chế quyền truy cập vào dữ liệu theo cách mà người dùng có thể thấy và (đôi khi) sửa đổi chính xác những gì họ cần và không cần nữa.
Tổng hợp dữ liệu từ các bảng khác nhau có thể được sử dụng để tạo báo cáo.
Tạo chế độ xem
Chế độ xem cơ sở dữ liệu được tạo bằng cách sử dụng CREATE VIEWtuyên bố. Chế độ xem có thể được tạo từ một bảng, nhiều bảng hoặc một chế độ xem khác.
Để tạo chế độ xem, người dùng phải có đặc quyền hệ thống thích hợp theo cách triển khai cụ thể.
Cơ bản CREATE VIEW cú pháp như sau:
CREATE VIEW view_name AS
SELECT column1, column2.....
FROM table_name
WHERE [condition];
Bạn có thể bao gồm nhiều bảng trong câu lệnh SELECT của mình theo cách tương tự như khi bạn sử dụng chúng trong một truy vấn SQL SELECT thông thường.
Thí dụ
Hãy xem xét bảng KHÁCH HÀNG có các bản ghi sau:
+----+----------+-----+-----------+----------+
| ID | NAME | AGE | ADDRESS | SALARY |
+----+----------+-----+-----------+----------+
| 1 | Ramesh | 32 | Ahmedabad | 2000.00 |
| 2 | Khilan | 25 | Delhi | 1500.00 |
| 3 | kaushik | 23 | Kota | 2000.00 |
| 4 | Chaitali | 25 | Mumbai | 6500.00 |
| 5 | Hardik | 27 | Bhopal | 8500.00 |
| 6 | Komal | 22 | MP | 4500.00 |
| 7 | Muffy | 24 | Indore | 10000.00 |
+----+----------+-----+-----------+----------+
Sau đây là một ví dụ để tạo chế độ xem từ bảng CUSTOMERS. Chế độ xem này sẽ được sử dụng để có tên và tuổi của khách hàng từ bảng CUSTOMERS.
SQL > CREATE VIEW CUSTOMERS_VIEW AS
SELECT name, age
FROM CUSTOMERS;
Bây giờ, bạn có thể truy vấn CUSTOMERS_VIEW theo cách tương tự như khi bạn truy vấn một bảng thực tế. Sau đây là một ví dụ cho tương tự.
SQL > SELECT * FROM CUSTOMERS_VIEW;
Điều này sẽ tạo ra kết quả sau.
+----------+-----+
| name | age |
+----------+-----+
| Ramesh | 32 |
| Khilan | 25 |
| kaushik | 23 |
| Chaitali | 25 |
| Hardik | 27 |
| Komal | 22 |
| Muffy | 24 |
+----------+-----+
LỰA CHỌN CÓ KIỂM TRA
TÙY CHỌN VỚI KIỂM TRA là một tùy chọn câu lệnh TẠO XEM. Mục đích của LỰA CHỌN CÓ KIỂM TRA là để đảm bảo rằng tất cả CẬP NHẬT và CHÈN thỏa mãn (các) điều kiện trong định nghĩa chế độ xem.
Nếu chúng không thỏa mãn (các) điều kiện, UPDATE hoặc INSERT trả về lỗi.
Khối mã sau có một ví dụ về việc tạo cùng một chế độ xem CUSTOMERS_VIEW với LỰA CHỌN CÓ KIỂM TRA.
CREATE VIEW CUSTOMERS_VIEW AS
SELECT name, age
FROM CUSTOMERS
WHERE age IS NOT NULL
WITH CHECK OPTION;
TÙY CHỌN CÓ KIỂM TRA trong trường hợp này sẽ từ chối nhập bất kỳ giá trị NULL nào trong cột TUỔI của chế độ xem, vì chế độ xem được xác định bởi dữ liệu không có giá trị NULL trong cột TUỔI.
Cập nhật chế độ xem
Chế độ xem có thể được cập nhật trong các điều kiện nhất định được đưa ra dưới đây -
Mệnh đề SELECT không được chứa từ khóa DISTINCT.
Mệnh đề SELECT có thể không chứa các hàm tóm tắt.
Mệnh đề SELECT có thể không chứa các hàm thiết lập.
Mệnh đề SELECT có thể không chứa các toán tử tập hợp.
Mệnh đề SELECT không được chứa mệnh đề ORDER BY.
Mệnh đề FROM không được chứa nhiều bảng.
Mệnh đề WHERE có thể không chứa các truy vấn con.
Truy vấn không được chứa GROUP BY hoặc HAVING.
Các cột được tính toán có thể không được cập nhật.
Tất cả các cột NOT NULL từ bảng cơ sở phải được đưa vào dạng xem để truy vấn INSERT hoạt động.
Vì vậy, nếu một chế độ xem đáp ứng tất cả các quy tắc nêu trên thì bạn có thể cập nhật chế độ xem đó. Khối mã sau đây có một ví dụ để cập nhật tuổi của Ramesh.
SQL > UPDATE CUSTOMERS_VIEW
SET AGE = 35
WHERE name = 'Ramesh';
Điều này cuối cùng sẽ cập nhật bảng cơ sở CUSTOMERS và điều tương tự sẽ phản ánh trong chính chế độ xem. Bây giờ, hãy thử truy vấn bảng cơ sở và câu lệnh SELECT sẽ tạo ra kết quả sau.
+----+----------+-----+-----------+----------+
| ID | NAME | AGE | ADDRESS | SALARY |
+----+----------+-----+-----------+----------+
| 1 | Ramesh | 35 | Ahmedabad | 2000.00 |
| 2 | Khilan | 25 | Delhi | 1500.00 |
| 3 | kaushik | 23 | Kota | 2000.00 |
| 4 | Chaitali | 25 | Mumbai | 6500.00 |
| 5 | Hardik | 27 | Bhopal | 8500.00 |
| 6 | Komal | 22 | MP | 4500.00 |
| 7 | Muffy | 24 | Indore | 10000.00 |
+----+----------+-----+-----------+----------+
Chèn hàng vào chế độ xem
Hàng dữ liệu có thể được chèn vào một dạng xem. Các quy tắc tương tự áp dụng cho lệnh UPDATE cũng áp dụng cho lệnh INSERT.
Ở đây, chúng tôi không thể chèn các hàng trong CUSTOMERS_VIEW vì chúng tôi chưa bao gồm tất cả các cột KHÔNG ĐẦY ĐỦ trong dạng xem này, nếu không bạn có thể chèn các hàng trong dạng xem theo cách tương tự như khi bạn chèn chúng vào bảng.
Xóa hàng vào chế độ xem
Hàng dữ liệu có thể bị xóa khỏi chế độ xem. Các quy tắc tương tự áp dụng cho lệnh UPDATE và INSERT áp dụng cho lệnh DELETE.
Sau đây là một ví dụ để xóa một bản ghi có AGE = 22.
SQL > DELETE FROM CUSTOMERS_VIEW
WHERE age = 22;
Điều này cuối cùng sẽ xóa một hàng khỏi bảng cơ sở CUSTOMERS và hàng tương tự sẽ phản ánh trong chính chế độ xem. Bây giờ, hãy thử truy vấn bảng cơ sở và câu lệnh SELECT sẽ tạo ra kết quả sau.
+----+----------+-----+-----------+----------+
| ID | NAME | AGE | ADDRESS | SALARY |
+----+----------+-----+-----------+----------+
| 1 | Ramesh | 35 | Ahmedabad | 2000.00 |
| 2 | Khilan | 25 | Delhi | 1500.00 |
| 3 | kaushik | 23 | Kota | 2000.00 |
| 4 | Chaitali | 25 | Mumbai | 6500.00 |
| 5 | Hardik | 27 | Bhopal | 8500.00 |
| 7 | Muffy | 24 | Indore | 10000.00 |
+----+----------+-----+-----------+----------+
Giảm lượt xem
Rõ ràng, nơi bạn có một chế độ xem, bạn cần một cách để bỏ chế độ xem nếu nó không còn cần thiết nữa. Cú pháp rất đơn giản và được đưa ra dưới đây:
DROP VIEW view_name;
Sau đây là một ví dụ để loại bỏ CUSTOMERS_VIEW khỏi bảng CUSTOMERS.
DROP VIEW CUSTOMERS_VIEW;