Chế độ xem trong MySQL là gì?
VIEWS là bảng ảo không lưu trữ bất kỳ dữ liệu nào của riêng chúng nhưng hiển thị dữ liệu được lưu trữ trong các bảng khác. Nói cách khác, VIEWS không là gì khác ngoài Truy vấn SQL. Một dạng xem có thể chứa tất cả hoặc một vài hàng từ một bảng. Dạng xem MySQL có thể hiển thị dữ liệu từ một bảng hoặc nhiều bảng.
Cú pháp MySQL Views
Bây giờ chúng ta hãy xem xét cú pháp cơ bản được sử dụng để tạo một khung nhìn trong MySQL.
CREATE VIEW `view_name` AS SELECT statement;
Ở ĐÂU
- "TẠO CHẾ ĐỘ XEM` view_name` " cho máy chủ MySQL tạo một đối tượng xem trong cơ sở dữ liệu có tên là` view_name`
- "Câu lệnh AS SELECT" là câu lệnh SQL được đóng gói trong Dạng xem MySQL. Nó có thể là một câu lệnh SELECT có thể chứa dữ liệu từ một bảng hoặc nhiều bảng.
Cách tạo chế độ xem trong MySQL
Sau đây là quy trình từng bước để tạo chế độ xem trong MySQL:
Bây giờ chúng ta hãy tạo chế độ xem đầu tiên của chúng ta bằng cách sử dụng "myflixdb", chúng ta sẽ tạo một chế độ xem đơn giản hạn chế các cột được nhìn thấy trong bảng thành viên.
Giả sử các yêu cầu ủy quyền nói rằng bộ phận tài khoản chỉ có thể thấy số, tên và giới tính của thành viên từ bảng của thành viên. Để đạt được điều này, bạn có thể tạo CHẾ ĐỘ XEM -
CREATE VIEW `accounts_v_members` AS SELECT `membership_number`,`full_names`,`gender` FROM `members`;
Thực thi tập lệnh trên trong bàn làm việc MySQL dựa trên myflixdb và mở rộng nút chế độ xem trong trình khám phá cơ sở dữ liệu cho chúng ta kết quả sau.
Lưu ý rằng đối tượng Account_v_members hiện được hiển thị trong các đối tượng dạng xem cơ sở dữ liệu. Bây giờ chúng ta hãy thực hiện một câu lệnh SELECT để chọn tất cả các trường từ dạng xem như được hiển thị trong ví dụ tạo dạng xem MySQL bên dưới.
SELECT * FROM `accounts_v_members`;
Thực thi tập lệnh trên trong MySQL workbench với myflixdb cho chúng ta kết quả sau được hiển thị bên dưới.
membership_number | full_names | gender |
---|---|---|
1 | Janet Jones | Female |
2 | Janet Smith Jones | Female |
3 | Robert Phil | Male |
4 | Gloria Williams | Female |
5 | Leonard Hofstadter | Male |
6 | Sheldon Cooper | Male |
7 | Rajesh Koothrappali | Male |
8 | Leslie Winkle | Male |
9 | Howard Wolowitz | Male |
Chỉ các cột được ủy quyền cho bộ phận tài khoản đã được trả lại. Các chi tiết khác được tìm thấy trong bảng thành viên đã bị ẩn.
Nếu chúng ta muốn xem các câu lệnh SQL tạo nên một dạng xem cụ thể, chúng ta có thể sử dụng tập lệnh hiển thị bên dưới để làm điều đó.
HIỂN THỊ TẠO XEM `account_v_members`;
Việc thực thi tập lệnh trên cung cấp cho bạn tên chế độ xem và các câu lệnh SQL SELECT được sử dụng để tạo chế độ xem.
Tham gia và Chế độ xem trong MySQL
Bây giờ chúng ta hãy xem xét một ví dụ khá phức tạp bao gồm nhiều bảng và sử dụng các phép nối.
Chúng tôi sẽ đóng gói JOIN được tạo để lấy thông tin từ ba (3) bảng là thành viên, phim và phim cho thuê. Dưới đây là kịch bản giúp chúng tôi đạt được điều đó.
CREATE VIEW `general_v_movie_rentals` AS SELECT mb.`membership_number`,mb.`full_names`,mo.`title`,mr.`transaction_date`,mr.`return_date` FROM `movierentals` AS mr INNER JOIN `members` AS mb ON mr.`membership_number` = mb.`membership_number` INNER JOIN `movies` AS mo ON mr.`movie_id` = mo.`movie_id`;
Thực thi các tập lệnh trên sẽ tạo chế độ xem có tên general_v_movie_rentals trong myflixdb của chúng tôi
Bây giờ hãy chọn tất cả các trường từ một bảng có tên general_v_movie_rentals.
SELECT * FROM `general_v_movie_rentals`;
Thực thi tập lệnh trên trong MySQL workbench so với myflixdb cho chúng ta kết quả sau được hiển thị bên dưới.
membership_number | full_names | title | transaction_date | return_date |
---|---|---|---|---|
1 | Janet Jones | Pirates of the Caribean 4 | 20-06-2012 | 28-06-2012 |
1 | Janet Jones | Forgetting Sarah Marshal | 22-06-2012 | 25-06-2012 |
3 | Robert Phil | Forgetting Sarah Marshal | 22-06-2012 | 25-06-2012 |
2 | Janet Smith Jones | Forgetting Sarah Marshal | 21-06-2012 | 24-06-2012 |
3 | Robert Phil | X-Men | 23-06-2012 | 28-06-2012 |
Lưu ý rằng chúng tôi không phải viết truy vấn JOIN phức tạp để lấy thông tin về thành viên, phim và chi tiết thuê phim. Chúng tôi chỉ sử dụng khung nhìn trong một câu lệnh SELECT thông thường như bất kỳ bảng thông thường nào khác. Chế độ xem có thể được gọi từ bất kỳ đâu trong hệ thống ứng dụng chạy trên myflixdb.
Giảm lượt xem trong MySQL
Lệnh DROP có thể được sử dụng để xóa một dạng xem khỏi cơ sở dữ liệu mà không cần thiết nữa. Cú pháp cơ bản để thả một lượt xem như sau.
DROP VIEW ` general_v_movie_rentals `;
Tại sao sử dụng lượt xem?
Bạn có thể muốn sử dụng chế độ xem chủ yếu vì 3 lý do sau
- Cuối cùng, bạn sẽ sử dụng kiến thức SQL của mình để tạo các ứng dụng, ứng dụng này sẽ sử dụng cơ sở dữ liệu cho các yêu cầu dữ liệu. Bạn nên sử dụng VIEWS của cấu trúc bảng gốc trong ứng dụng của mình thay vì sử dụng chính các bảng. Điều này đảm bảo rằng khi bạn cấu trúc lại cơ sở dữ liệu của mình, mã kế thừa của bạn sẽ nhìn thấy lược đồ gốc thông qua chế độ xem mà không phá vỡ ứng dụng.
- VIEWS tăng khả năng tái sử dụng. Bạn sẽ không phải tạo các truy vấn phức tạp liên quan đến các phép nối liên tục. Tất cả sự phức tạp được chuyển thành một dòng truy vấn sử dụng VIEWS. Mã cô đọng như vậy sẽ dễ dàng tích hợp hơn trong ứng dụng của bạn. Điều này sẽ loại bỏ khả năng mắc lỗi chính tả và mã của bạn sẽ dễ đọc hơn.
- VIEWS trợ giúp trong việc bảo mật dữ liệu. Bạn có thể sử dụng chế độ xem để chỉ hiển thị thông tin được ủy quyền cho người dùng và ẩn dữ liệu nhạy cảm như số thẻ tín dụng.
Tóm lược
- Chế độ xem là các bảng ảo; chúng không chứa dữ liệu được trả về. Dữ liệu được lưu trữ trong các bảng được tham chiếu trong câu lệnh SELECT.
- Chế độ xem cải thiện tính bảo mật của cơ sở dữ liệu bằng cách chỉ hiển thị dữ liệu dự kiến cho người dùng được ủy quyền. Họ ẩn dữ liệu nhạy cảm.
- Chế độ xem làm cho cuộc sống trở nên dễ dàng vì bạn không phải viết đi viết lại các truy vấn phức tạp.
- Có thể sử dụng CHÈN, CẬP NHẬT và XÓA trên chế độ XEM. Các thao tác này sẽ thay đổi các bảng cơ bản của CHẾ ĐỘ XEM. Cân nhắc duy nhất là VIEW phải chứa tất cả các cột KHÔNG ĐẦY ĐỦ của các bảng mà nó tham chiếu. Tốt nhất, bạn không nên sử dụng VIEWS để cập nhật.