Thứ Tư, 26 tháng 7, 2023

Có nên sử dụng View trong MySQL không?

Bài này sẽ tư vấn có nên sử dụng View trong MySQL không, View rất hay nhưng trong quá trình sử dụng làm Website thì mình rất ít khi áp dụng, bởi các dự án chưa thực sự cần thiết.

Nhưng nếu bạn là một DBA thì chắc chắn phải nghĩ đến việc sử dụng nó nhé, bởi View sẽ giúp bạn tối ưu hóa việc xử lý truy vấn trong MySQL.

Mục lục

  • 1. Đặt vấn đề về View trong MySQL
  • 2. Tại sao nên sử dụng View trong MySQL?
    • Đơn giản hóa truy vấn phức tạp
    • Làm giảm độ phức tạp tính toán
    • Phân quyền và bảo mật

1. Đặt vấn đề về View trong MySQL

Hãy bắt đầu bằng một ví dụ, điều này sẽ giúp bạn hiểu rõ vấn đề hơn.

Giả sử ta có 2 table gồm:

Bài viết này được đăng tại tranvanbinh.vn

  • payments: Lưu lịch sử thanh toán của khách hàng
  • customers: Lưu danh sách khách hàng

Cấu trúc như hình sau:

customers payments 1 png

Bây giờ hãy viết câu truy vấn lấy ra tất cả khách hàng và thông tin lịch sử thanh toán của khách hàng đó. Rất đơn giản, ta chỉ việc sử dụng lệnh Inner Join hai bảng.

1
2
3
4
5
6
7
8
9
SELECT
    customerName,
    checkNumber,
    paymentDate,
    amount
FROM
    customers
INNER JOIN
    payments USING (customerNumber);

Giả sử kết quả như sau:

MySQL View example png

Câu truy vấn đã trả về kết quả thành công. Nhưng vào một ngày kia ta cần lấy lại thông tin này thì bạn sẽ phải viết lại câu truy vấn này một lần nữa. Câu hỏi đặt ra là có giải pháp nào tối ưu cho những lần sau không?

Có một cách truyền thống đó là bạn lưu dữ liệu vào file word hoặc txt, thậm chí là file sql. Tuy nhiên như vậy thì kích thước file quá lớn, và ta rất khó để sàn lọc dữ liệu.

Cách tốt hơn đó là sử dụng View trong MySQL, đây là một table ảo nhưng có đầy đủ tính năng của một table thật. Hãy xem cú pháp tạo View ho trường hợp trên như sau:

1
2
3
4
5
6
7
8
9
10
11
CREATE VIEW customerPayments
AS
SELECT
    customerName,
    checkNumber,
    paymentDate,
    amount
FROM
    customers
INNER JOIN
    payments USING (customerNumber);

Sau khi chạy câu truy vấn này thì trên hệ thống database xuất hiện thêm một View có tên là customerPayments. Đây là một table ảo nên bạn co thể viết câu truy vấn trên này một cách bình thường.

Vì vậy ở những lần sau nếu bạn muốn lấy dữ liệu thì chỉ việc chạy câu SQL này.

1
SELECT * FROM customerPayments;

Thật tuyệt vời phải không các bạn! Những lần sau này truy vấn sẽ rất đơn giản.

Vì một View sẽ được lưu trữ trên ổ đĩa vật lý nên thực chất nó cũng là một table, vì vậy bạn có thể thực hiện truy vấn với câu Select. Tuy nhiên với lệnh Delete hoặc Update thì không thực hiện trên View được.

Áp dụng phương pháp này ta có thể tạo ra một View chứa dữ liệu từ nhiều bảng khác nhau. Hãy xem hình minh họa dưới đây:

MySQL View png

Trong hình này ta tạo ra một view chứa liệu của cả 3 bảng bằng cách sử dụng lệnh Join để kết hợp đồng bộ dữ liệu giữa chúng.

Một ví dụ khác: Giả sử ta cần tạo ra một View chứa tất cả các ngày trong tuần thì viết như sau:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
CREATE VIEW daysofweek (day) AS
    SELECT 'Mon'
    UNION
    SELECT 'Tue'
    UNION
    SELECT 'Web'
    UNION
    SELECT 'Thu'
    UNION
    SELECT 'Fri'
    UNION
    SELECT 'Sat'
    UNION
    SELECT 'Sun';

Sau đó muốn lấy dữ liệu trong tuần thì chạy câu SQL sau:

1
SELECT * FROM daysofweek;

Kết quả:

MySQL View reference no table example png

2. Tại sao nên sử dụng View trong MySQL?

Nếu sử dụng View trong quản lý database ta sẽ có những ưu thế sau.

Đơn giản hóa truy vấn phức tạp

View giúp đơn giản hóa những câu truy vấn phức tạp cho những lần sử dụng sau, bở khi dữ liệu ở bảng chính thay đổi thì trong View cũng sẽ được thay đổi theo nên vấn đề đồng bộ dữ liệu rất chính xác.

Làm giảm độ phức tạp tính toán

Giả sử bạn phải viết cùng một công thức cho mọi truy vấn. Hoặc bạn có một truy vấn có logic phức tạp. Để làm cho logic này nhất quán trên các truy vấn thì có thể sử dụng View để lưu trữ phép tính.

Phân quyền và bảo mật

Với tính chất chỉ Xem chứ không được thay đổi dữ liệu nên khi muốn cho ai đó xem thì bạn có thể cho họ xem View thay vì xem Table.

Ngoài ra nó là một table nên bạn có thể giới hạn phân quyền cho table một cách dễ dàng.

Giả sử thông tin thanh toán của khách hàng thì chỉ có bộ phận kế toán thấy mà thôi, vì vậy ta có thể tạo ra một view chứa thông tin này và cấp quyền cho bộ phận kết toán.

Như vậy là bạn đã trả lời được câu hỏi có nên sử dụng View trong MySQL không rồi phải không nào? Hy vọng qua bài này bạn đã biết cách tạo View và lý giải có nên sử dụng View trong MySQL không.

=============================
* KHOÁ HỌC ORACLE DATABASE A-Z ENTERPRISE trực tiếp từ tôi giúp bạn bước đầu trở thành những chuyên gia DBA, đủ kinh nghiệm đi thi chứng chỉ OA/OCP, đặc biệt là rất nhiều kinh nghiệm, bí kíp thực chiến trên các hệ thống Core tại VN chỉ sau 1 khoá học.
* CÁCH ĐĂNG KÝ: Gõ (.) hoặc để lại số điện thoại hoặc inbox https://m.me/tranvanbinh.vn hoặc Hotline/Zalo 090.29.12.888
* Chi tiết tham khảo:
https://bit.ly/oaz_w
=============================
KẾT NỐI VỚI CHUYÊN GIA TRẦN VĂN BÌNH:
📧 Mail: binhoracle@gmail.com
☎️ Mobile/Zalo: 0902912888
👨 Facebook: https://www.facebook.com/BinhOracleMaster
👨 Inbox Messenger: https://m.me/101036604657441 (profile)
👨 Fanpage: https://www.facebook.com/tranvanbinh.vn
👨 Inbox Fanpage: https://m.me/tranvanbinh.vn
👨👩 Group FB: https://www.facebook.com/groups/DBAVietNam
👨 Website: https://www.tranvanbinh.vn
👨 Blogger: https://tranvanbinhmaster.blogspot.com
🎬 Youtube: https://www.youtube.com/@binhguru
👨 Tiktok: https://www.tiktok.com/@binhguru
👨 Linkin: https://www.linkedin.com/in/binhoracle
👨 Twitter: https://twitter.com/binhguru
👨 Podcast: https://www.podbean.com/pu/pbblog-eskre-5f82d6
👨 Địa chỉ: Tòa nhà Sun Square - 21 Lê Đức Thọ - Phường Mỹ Đình 1 - Quận Nam Từ Liêm - TP.Hà Nội

=============================
Có nên sử dụng View trong MySQL không?, oracle tutorial, học oracle database, Tự học Oracle, Tài liệu Oracle 12c tiếng Việt, Hướng dẫn sử dụng Oracle Database, Oracle SQL cơ bản, Oracle SQL là gì, Khóa học Oracle Hà Nội, Học chứng chỉ Oracle ở đầu, Khóa học Oracle online,sql tutorial, khóa học pl/sql tutorial, học dba, học dba ở việt nam, khóa học dba, khóa học dba sql, tài liệu học dba oracle, Khóa học Oracle online, học oracle sql, học oracle ở đâu tphcm, học oracle bắt đầu từ đâu, học oracle ở hà nội, oracle database tutorial, oracle database 12c, oracle database là gì, oracle database 11g, oracle download, oracle database 19c, oracle dba tutorial, oracle tunning, sql tunning , oracle 12c, oracle multitenant, Container Databases (CDB), Pluggable Databases (PDB), oracle cloud, oracle security, oracle fga, audit_trail,oracle RAC, ASM, oracle dataguard, oracle goldengate, mview, oracle exadata, oracle oca, oracle ocp, oracle ocm , oracle weblogic, postgresql tutorial, mysql tutorial, mariadb tutorial, ms sql server tutorial, nosql, mongodb tutorial, oci, cloud, middleware tutorial, hoc solaris tutorial, hoc linux tutorial, hoc aix tutorial, unix tutorial, securecrt, xshell, mobaxterm, putty

ĐỌC NHIỀU

Trần Văn Bình - Oracle Database Master