Computer >> Máy Tính >  >> Lập trình >> MySQL

Trường hợp các khung nhìn MySQL có thể không nhất quán và làm thế nào chúng ta có thể đảm bảo tính nhất quán của chúng?


Trong trường hợp các dạng xem có thể cập nhật, rất có thể chúng ta cập nhật dữ liệu không hiển thị trong dạng xem vì chúng ta tạo dạng xem chỉ tiết lộ dữ liệu một phần của bảng. Loại cập nhật như vậy làm cho quan điểm không nhất quán. Chúng tôi có thể đảm bảo tính nhất quán của các chế độ xem bằng cách sử dụng VỚI LỰA CHỌN KIỂM TRA trong khi tạo hoặc sửa đổi các chế độ xem. Mặc dù mệnh đề WITH CHECK OPTION là một phần tùy chọn của câu lệnh CREATE VIEW nhưng nó rất hữu ích để làm cho các quan điểm nhất quán.

Về cơ bản, mệnh đề CÓ CHỌN KIỂM TRA ngăn chúng tôi cập nhật hoặc chèn các hàng không hiển thị trong chế độ xem. Theo nghĩa đơn giản, chúng ta có thể nói rằng sau khi sử dụng mệnh đề WITH CHECK OPTION, MySQL đảm bảo rằng thao tác chèn hoặc cập nhật được xác nhận bởi định nghĩa của khung nhìn. Sau đây là cú pháp của mệnh đề WITH CHECK OPTION -

Cú pháp

 TẠO HOẶC THAY THẾ XEM view_name NHƯ Select_statement VỚI CHỌN KIỂM TRA; 

Ví dụ

Để minh họa khái niệm trên, chúng tôi đang sử dụng dữ liệu sau từ bảng ‘Student_info’ -

 mysql> Chọn * từ student_info; + ------ + --------- + ------------ + --------- --- + | id | Tên | Địa chỉ | Chủ đề | + ------ + --------- + ------------ + ------------ + | 101 | YashPal | Amritsar | Lịch sử || 105 | Gaurav | Chandigarh | Văn học || 125 | Raman | Shimla | Máy tính || 130 | Ram | Jhansi | Máy tính | + ------ + --------- + ------------ + ------------ + 4 hàng trong bộ (0,08 giây) 

Bây giờ, với sự trợ giúp của truy vấn sau, chúng tôi sẽ tạo tên chế độ xem ‘Thông tin’. Ở đây chúng tôi không sử dụng VỚI LỰA CHỌN KIỂM TRA.

 mysql> Tạo HOẶC Thay thế XEM THÔNG TIN NHƯ Chọn Id, Tên, Địa chỉ, Chủ đề từ student_info WHERE Chủ đề ='Máy tính'; Truy vấn OK, 0 hàng bị ảnh hưởng (0,46 giây) mysql> Chọn * từ thông tin; + ---- - + ------- + --------- + ----------- + | Id | Tên | Địa chỉ | Chủ đề | + ------ + ------- + --------- + ----------- + | 125 | Raman | Shimla | Máy tính || 130 | Ram | Jhansi | Máy tính | + ------ + ------- + --------- + ----------- + 2 hàng trong bộ (0,00 giây)  

Vì chúng tôi chưa sử dụng VỚI CHỌN KIỂM TRA, vì vậy chúng tôi có thể chèn / cập nhật một hàng mới trong ‘Thông tin’, ngay cả khi hàng đó không khớp với định nghĩa của nó. Nó được minh họa trong truy vấn sau và kết quả của nó -

 mysql> CHÈN VÀO thông tin (Id, Tên, Địa chỉ, Chủ đề) các giá trị (132, 'Shyam', 'Chandigarh', 'Economics'); Truy vấn OK, 1 hàng bị ảnh hưởng (0,37 giây) mysql> Chọn * từ student_info; + ------ + --------- + ------------ + ------------ + | id | Tên | Địa chỉ | Chủ đề | + ------ + --------- + ------------ + ------------ + | 101 | YashPal | Amritsar | Lịch sử || 105 | Gaurav | Chandigarh | Văn học || 125 | Raman | Shimla | Máy tính || 130 | Ram | Jhansi | Máy tính || 132 | Shyam | Chandigarh | Kinh tế học | + ------ + --------- + ------------ + ------------ + 5 hàng trong bộ (0,00 giây) mysql> Chọn * từ thông tin; + ------ + ------- + --------- + ----------- + | Id | Tên | Địa chỉ | Chủ đề | + ------ + ------- + --------- + ----------- + | 125 | Raman | Shimla | Máy tính || 130 | Ram | Jhansi | Máy tính | + ------ + ------- + --------- + ----------- + 2 hàng trong bộ (0,00 giây)  

Tập hợp kết quả ở trên cho thấy rằng hàng mới không khớp với định nghĩa của 'Thông tin' do đó nó không hiển thị trong chế độ xem. Bây giờ, trong truy vấn sau, chúng tôi đang tạo cùng một chế độ xem ‘Thông tin’

Bằng cách sử dụng 'VỚI TÙY CHỌN KIỂM TRA' -

 mysql> Tạo HOẶC Thay thế XEM THÔNG TIN NHƯ Chọn Id, Tên, Địa chỉ, Chủ đề từ student_info WHERE Chủ đề ='Máy tính' CÓ CHỌN KIỂM TRA; Truy vấn OK, 0 hàng bị ảnh hưởng (0,06 giây) 

Bây giờ, nếu chúng ta cố gắng chèn một hàng phù hợp với định nghĩa của dạng xem ‘Thông tin’, thì MySQL cho phép chúng ta làm như vậy. Nó có thể được xóa khỏi truy vấn sau và kết quả của nó.

 mysql> CHÈN VÀO các giá trị thông tin (Id, Tên, Địa chỉ, Chủ đề) (133, 'Mohan', 'Delhi', 'Computers'); Truy vấn OK, 1 hàng bị ảnh hưởng (0,07 giây) mysql> Chọn * từ thông tin; + ------ + ------- + --------- + ----------- + | Id | Tên | Địa chỉ | Chủ đề | + ------ + ------- + --------- + ----------- + | 125 | Raman | Shimla | Máy tính || 130 | Ram | Jhansi | Máy tính || 133 | Mohan | Delhi | Máy tính | + ------ + ------- + --------- + ----------- + 3 hàng trong bộ (0,00 giây)  

Nhưng giả sử nếu chúng tôi cố gắng chèn hàng không khớp với định nghĩa của chế độ xem ‘Thông tin’, MySQL sẽ không cho phép chúng tôi làm và ném lỗi -

 mysql> CHÈN VÀO các giá trị thông tin (Id, Tên, Địa chỉ, Chủ đề) (134, 'Charanjeet', 'Amritsar', 'Geophysics'); LỖI 1369 (HY000):CHỌN KIỂM TRA không thành công