Chế độ xem MySQL được tạo bằng cách sử dụng câu lệnh CREATE VIEW. Chế độ xem có thể được tạo từ một bảng, nhiều bảng hoặc một chế độ xem khác. Như chúng ta biết rằng để 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ể.
TẠO CHẾ ĐỘ XEM cơ bản cú pháp như sau -
Cú pháp
CREATE [OR REPLACE] [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}] [DEFINER = { user | CURRENT_USER }] [SQL SECURITY { DEFINER | INVOKER }] VIEW view_name [(column_list)] AS select_statement [WITH [CASCADED | LOCAL] CHECK OPTION]
Đây,
-
TẠO CHẾ ĐỘ XEM - Câu lệnh này tạo ra một dạng xem mới.
-
View_name - view_name là tên của khung nhìn. Một khung nhìn luôn thuộc về một cơ sở dữ liệu. Theo mặc định, một dạng xem mới được tạo trong cơ sở dữ liệu hiện được sử dụng.
-
Select_statement - Câu lệnh select_statement là một câu lệnh SELECT và cung cấp định nghĩa của khung nhìn. Select_statement có thể chọn dữ liệu từ các bảng cơ sở hoặc các chế độ xem khác.
-
Column_list - Phần column_list là tùy chọn. Nó cung cấp một danh sách tên cho các cột của khung nhìn ngay sau tên khung nhìn nơi các tên phải là duy nhất. Số lượng tên trong column_list phải giống với số cột được truy xuất bởi câu lệnh SELECT. Nếu chúng tôi muốn đặt tên khác cho cột chế độ xem của mình, chúng tôi có thể làm như vậy bằng cách thêm mệnh đề [AS name] vào danh sách đã chọn.
-
HOẶC THAY THẾ - Nếu mệnh đề OR REPLACE tùy chọn được thêm vào với câu lệnh CREATE VIEW, câu lệnh CREATE VIEW sẽ thay thế một khung nhìn hiện có và tạo một khung nhìn mới. Nếu chế độ xem không tồn tại, TẠO CHẾ ĐỘ XEM giống như TẠO HOẶC THAY THẾ CHẾ ĐỘ XEM.
-
THUẬT TOÁN - Mệnh đề THUẬT TOÁN là tùy chọn, nó ảnh hưởng đến cách MySQL xử lý chế độ xem. THUẬT TOÁN nhận ba giá trị:MERGE, TEMPTABLE hoặc UNDEFINED. Thuật toán mặc định là UNDEFINED.
-
[DEFINER ={người dùng | CURRENT_USER}] [BẢO MẬT SQL {DEFINER | INVOKER} ] - Các điều khoản DEFINER và SQL SECURITY chỉ định ngữ cảnh bảo mật sẽ được sử dụng khi kiểm tra các đặc quyền truy cập tại thời gian gọi xem. Nếu bạn chỉ định điều khoản DEFINER, các quy tắc sau sẽ xác định các giá trị người dùng DEFINER hợp pháp -
-
Nếu bạn không có đặc quyền SUPER, giá trị người dùng hợp pháp duy nhất là tài khoản của chính bạn và bạn không thể đặt trình xác định cho một số tài khoản khác.
-
Nếu bạn có SUPER đặc quyền, bạn có thể chỉ định bất kỳ tên tài khoản hợp pháp về mặt cú pháp nào.
-
Trong một quy trình được lưu trữ được xác định với đặc tính ĐỊNH NGHĨA BẢO MẬT SQL, CURRENT_USER trả về giá trị DEFINER của quy trình. Điều này cũng ảnh hưởng đến chế độ xem được xác định trong quy trình như vậy, nếu định nghĩa chế độ xem chứa giá trị DEFINER là CURRENT_USER.
-
8. [VỚI [CASCADED | ĐỊA PHƯƠNG] CHỌN KIỂM TRA] - Mệnh đề WITH CHECK OPTION có thể được cung cấp cho một dạng xem có thể cập nhật để ngăn chặn việc chèn hoặc cập nhật vào các hàng ngoại trừ những hàng mà mệnh đề WHERE trong select_statement là đúng. Trong mệnh đề LỰA CHỌN CÓ KIỂM TRA cho chế độ xem có thể cập nhật, các từ khóa LOCAL và CASCADED xác định phạm vi kiểm tra kiểm tra khi chế độ xem được xác định theo một chế độ xem khác. Từ khóa LOCAL chỉ giới hạn LỰA CHỌN KIỂM TRA ở chế độ xem đang được xác định. CASCADED cũng làm cho việc kiểm tra các chế độ xem cơ bản cũng được đánh giá. Khi cả hai từ khóa đều không được cung cấp, mặc định là CASCADED.
Ví dụ
Trong ví dụ này, chúng tôi đang tạo một chế độ xem có tên First_View trên bảng 'Khách hàng' có dữ liệu như sau -
mysql> Select * from Customers; +-------------+----------+ | Customer_Id | Name | +-------------+----------+ | 1 | Rahul | | 2 | Yashpal | | 3 | Gaurav | | 4 | Virender | +-------------+----------+ 4 rows in set (1.30 sec) mysql> Create view first_view AS SELECT * FROM Customers; Query OK, 0 rows affected (0.36 sec)
Bây giờ, nếu chúng ta chạy truy vấn bằng cách sử dụng tên của chế độ xem thì chúng ta sẽ nhận được thông tin chi tiết từ bảng mà nó được tạo.
mysql> Select * from first_view; +-------------+----------+ | Customer_Id | Name | +-------------+----------+ | 1 | Rahul | | 2 | Yashpal | | 3 | Gaurav | | 4 | Virender | +-------------+----------+ 4 rows in set (0.13 sec)