Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Chế độ xem MySQL

Ở đâ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 ...

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Kết xuất tất cả các bảng ở định dạng CSV bằng cách sử dụng 'mysqldump'

  2. Làm cách nào để CẬP NHẬT một hàng trong bảng hoặc CHÈN hàng nếu nó không tồn tại?

  3. Cách bật nhật ký truy vấn chậm MySQL trong MySQL

  4. MySQL JOIN với LIMIT 1 trên bảng đã tham gia

  5. Bao gồm các tiêu đề khi sử dụng SELECT INTO OUTFILE?