Ở đây, tôi giải thích "chế độ xem" MySQL là gì và cách sử dụng chúng.
MySQL cung cấp cho chúng tôi khả năng tạo chế độ xem . Một chế độ xem được định nghĩa là một truy vấn được lưu trữ mà khi được gọi ra, sẽ tạo ra một tập kết quả. Một số dân gian gọi các quan điểm là "bảng ảo".
Trong như bùn? Hãy thử lại.
Chế độ xem là gì?
Dạng xem là một truy vấn mà bạn lưu vào cơ sở dữ liệu. Sau đó, bạn có thể chạy nó sau chỉ bằng cách gọi chế độ xem đó (thay vì viết lại truy vấn).
Dạng xem có thể bao gồm một truy vấn phức tạp nhưng nó sẽ hiển thị kết quả như thể nó là một bảng. Do đó, bạn có thể truy vấn dạng xem như thể nó là một bảng.
Ví dụ:bạn có thể có một truy vấn phức tạp chọn dữ liệu từ ba bảng khác nhau. Bạn có thể gõ truy vấn phức tạp này ra mỗi khi bạn cần chạy nó hoặc bạn có thể lưu truy vấn dưới dạng xem. Khi nó đã được lưu dưới dạng một dạng xem, bạn có thể chạy một SELECT
đơn giản câu lệnh để trả về kết quả của truy vấn phức tạp. Nhưng tất nhiên, bạn cũng có thể viết một truy vấn phức tạp đối với chế độ xem nếu cần.
Tạo chế độ xem
Việc tạo các khung nhìn rất đơn giản. Bạn chỉ cần thực hiện trước truy vấn của mình bằng một dòng mã và chạy nó. Chế độ xem sẽ ngay lập tức được tạo trong cơ sở dữ liệu của bạn.
Cú pháp
Để tạo một dạng xem, hãy nhập câu lệnh sau, theo sau là truy vấn:
CREATE VIEW view_name AS
Thay thế view_name với bất kỳ tên nào bạn muốn sử dụng cho chế độ xem.
Ví dụ
Nếu chúng tôi chạy mã sau với FruitShop cơ sở dữ liệu:
CREATE VIEW vFruitInventory AS SELECT Fruit.FruitName, Fruit.Inventory, Units.UnitName FROM Fruit INNER JOIN Units ON Fruit.UnitId = Units.UnitId;
Bây giờ chúng ta thấy một chế độ xem có tên là vFruitInventory được liệt kê trong Lượt xem (bạn có thể cần nhấp vào Làm mới nút cho SCHEMAS menu đầu tiên):
Bạn nên nghĩ về một quy ước đặt tên cho các khung nhìn của bạn (như với bất kỳ đối tượng cơ sở dữ liệu nào khác) và tuân theo nó. Nhiều nhà phát triển đặt tiền tố cho tên chế độ xem của họ bằng v
, vw
, v_
hoặc vw_
để có thể dễ dàng phân biệt các dạng xem từ các bảng trong các truy vấn của chúng. Tuy nhiên, các nhà phát triển khác không đồng ý với quy ước này và muốn tên bảng và chế độ xem của họ có thể hoán đổi cho nhau.
Truy vấn chế độ xem
Bây giờ chúng ta có thể truy vấn chế độ xem giống như chúng ta truy vấn một bảng:
SELECT * FROM vFruitInventory;
Kết quả:
Tất nhiên, chúng tôi cũng có thể sử dụng một truy vấn cụ thể hơn. Ví dụ:cái này chỉ chọn những bản ghi có khoảng không quảng cáo lớn hơn hoặc nhỏ hơn 10:
SELECT FruitName FROM vFruitInventory WHERE Inventory <= 10;
Nhưng chúng tôi không thể các cột truy vấn không được tham chiếu trong dạng xem (ngay cả khi chúng nằm trong các bảng bên dưới mà dạng xem truy vấn).
Ví dụ:chúng ta có thể truy vấn Fruit bảng như thế này:
SELECT * FROM Fruit WHERE FruitId = 1;
Nhưng chúng tôi không thể truy vấn vFruitInventory ở trên xem như thế này:
SELECT * FROM vFruitInventory WHERE FruitId = 1;
Điều này là do chế độ xem không trả về FruitId cột. Chúng tôi đã chỉ định các cột chính xác trong chế độ xem và đó là tất cả những gì được trả về. Như đã đề cập, tập kết quả của khung nhìn chỉ giống như một bảng và một số người thích gọi nó là "bảng ảo". Nếu "bảng" không bao gồm các cột đó, bạn không thể truy vấn chúng.
Thay vì là một giới hạn, đây thực sự là một tính năng trong tổng số lượt xem. Tính năng này có nghĩa là chúng tôi có thể cấp cho người dùng quyền truy cập vào một số các cột của một bảng chứ không phải các cột khác (thông qua dạng xem). Nói cách khác, chúng tôi có thể cấp cho người dùng quyền truy cập vào một dạng xem mà không cấp cho người dùng đó quyền truy cập vào các bảng bên dưới mà dạng xem đó truy cập. Một số bảng có thể lưu trữ thông tin nhạy cảm mà người dùng không được phép truy cập. Nhưng các bảng tương tự cũng có thể lưu trữ thông tin không nhạy cảm mà chúng cần để truy cập. Để làm gì? Tạo một chế độ xem! Và dạng xem đó chỉ có thể chọn thông tin không nhạy cảm từ các bảng đó.
Sửa đổi chế độ xem
Đây là hai phương pháp khác nhau để sửa đổi chế độ xem của bạn.
Tùy chọn 1:Sử dụng ALTER VIEW
Tuyên bố
Bạn có thể sửa đổi chế độ xem bằng cách sử dụng ALTER VIEW
tuyên bố. Như thế này:
ALTER VIEW view_name AS
Thay thế view_name với tên của chế độ xem mà bạn muốn thay đổi.
Ví dụ
Hãy thêm Fruit.FruitId trường để xem:
ALTER VIEW vFruitInventory AS SELECT Fruit.FruitId, Fruit.FruitName, Fruit.Inventory, Units.UnitName FROM Fruit INNER JOIN Units ON Fruit.UnitId = Units.UnitId;
Bây giờ, khi chúng tôi cố gắng trả về FruitId trong các truy vấn của chúng tôi, chúng tôi sẽ nhận được kết quả.
Nhưng lưu ý rằng chúng tôi không thể cố gắng truy cập trường này bằng Fruit.FruitId
. Chúng tôi chỉ có thể truy cập nó với tên FruitId
. Và đây là cách nó phải như vậy. Rốt cuộc, chế độ xem là một "bảng ảo" và chúng ta không cần biết cấu trúc của các bảng mà nó truy vấn.
Tùy chọn 2:Sử dụng CREATE OR REPLACE
Lưu ý rằng chế độ xem phải tồn tại trước khi bạn chạy ALTER VIEW
tuyên bố. Nếu nó không tồn tại, bạn sẽ nhận được lỗi. Bạn có thể tránh sự cố này bằng cách sử dụng CREATE OR REPLACE
tuyên bố. Thao tác này sẽ tạo chế độ xem nếu nó không tồn tại hoặc thay thế nó nếu có.
Vì vậy, chúng tôi có thể tạo chế độ xem ở trên như thế này:
CREATE OR REPLACE VIEW vFruitInventory AS SELECT Fruit.FruitName, Fruit.Inventory, Units.UnitName FROM Fruit INNER JOIN Units ON Fruit.UnitId = Units.UnitId;
Và sau đó chúng tôi có thể cập nhật nó bằng cách sử dụng cùng một CREATE OR REPLACE
nhưng chỉ sửa đổi định nghĩa. Ví dụ:thêm vào Fruit.FruitId
lĩnh vực:
CREATE OR REPLACE VIEW vFruitInventory AS SELECT Fruit.FruitId, Fruit.FruitName, Fruit.Inventory, Units.UnitName FROM Fruit INNER JOIN Units ON Fruit.UnitId = Units.UnitId;
Bỏ chế độ xem
Bạn thả một lượt xem bằng cách sử dụng DROP VIEW
tuyên bố. Như thế này:
DROP VIEW vFruitInventory
Câu lệnh trên sẽ xóa chế độ xem có tên vFruitInventory .
Giảm nhiều lượt xem
Bạn có thể thả nhiều chế độ xem bằng cùng một DROP VIEW
tuyên bố. Chỉ cần tách từng tên chế độ xem bằng dấu phẩy. Như thế này:
DROP VIEW view_1, view_2 ...
IF EXISTS
Mệnh đề
Bạn cũng có thể sử dụng IF EXISTS
mệnh đề ngăn lỗi xảy ra nếu chế độ xem không tồn tại:
DROP VIEW IF EXISTS view_1, view_2 ...