Rumah > pangkalan data > tutorial mysql > Di manakah pandangan MySQL mungkin tidak konsisten, dan bagaimana untuk memastikan konsistensinya?

Di manakah pandangan MySQL mungkin tidak konsisten, dan bagaimana untuk memastikan konsistensinya?

PHPz
Lepaskan: 2023-09-17 12:33:04
ke hadapan
927 orang telah melayarinya

🎜🎜 . Kemas kini ini menjadikan paparan tidak konsisten. Kami boleh memastikan ketekalan paparan dengan menggunakan

WITH CHECK OPTIONDi manakah pandangan MySQL mungkin tidak konsisten, dan bagaimana untuk memastikan konsistensinya? semasa mencipta atau mengubah suai paparan. Walaupun klausa WITH CHECK OPTION ialah bahagian pilihan bagi pernyataan CREATE VIEW, ia sangat berguna untuk menjadikan pandangan itu konsisten.

Pada asasnya, klausa WITH CHECK OPTION menghalang kami daripada mengemas kini atau memasukkan baris yang tidak kelihatan melalui paparan. Secara ringkas, kita boleh mengatakan bahawa selepas menggunakan klausa WITH CHECK OPTION, MySQL memastikan bahawa operasi sisipan atau kemas kini disahkan oleh definisi paparan. Berikut ialah sintaks klausa WITH CHECK OPTION -

Tatabahasa

CREATE OR REPLACE VIEW view_name AS Select_statement WITH CHECK OPTION;
Salin selepas log masuk

Contoh

Untuk menggambarkan konsep "jadual" di atas, pelajar_pelajar menggunakan konsep di atas. Mengikuti data -

mysql> Select * from student_info;
+------+---------+------------+------------+
| id   | Name    | Address    | Subject    |
+------+---------+------------+------------+
| 101  | YashPal | Amritsar   | History    |
| 105  | Gaurav  | Chandigarh | Literature |
| 125  | Raman   | Shimla     | Computers  |
| 130  | Ram     | Jhansi     | Computers  |
+------+---------+------------+------------+
4 rows in set (0.08 sec)
Salin selepas log masuk

Sekarang dengan bantuan pertanyaan berikut kami akan mencipta nama paparan "Maklumat". Di sini kami tidak menggunakan WITH CHECK OPTION.

mysql> Create OR Replace VIEW Info AS Select Id, Name, Address, Subject from student_info WHERE Subject = 'Computers';
Query OK, 0 rows affected (0.46 sec)

mysql> Select * from info;
+------+-------+---------+-----------+
| Id   | Name  | Address | Subject   |
+------+-------+---------+-----------+
| 125  | Raman | Shimla  | Computers |
| 130  | Ram   | Jhansi  | Computers |
+------+-------+---------+-----------+
2 rows in set (0.00 sec)
Salin selepas log masuk

Sebab, kami tidak menggunakan WITH CHECK OPTION, jadi kami boleh memasukkan/mengemaskini baris baru dalam "Info" walaupun tidak sepadan dengan definisinya. Pertanyaan berikut dan keputusannya menggambarkan ini -

mysql> INSERT INTO Info(Id, Name, Address, Subject) values(132, 'Shyam','Chandigarh', 'Economics');
Query OK, 1 row affected (0.37 sec)

mysql> Select * from student_info;
+------+---------+------------+------------+
| id   | Name    | Address    | Subject    |
+------+---------+------------+------------+
| 101  | YashPal | Amritsar   | History    |
| 105  | Gaurav  | Chandigarh | Literature |
| 125  | Raman   | Shimla     | Computers  |
| 130  | Ram     | Jhansi     | Computers  |
| 132  | Shyam   | Chandigarh | Economics  |
+------+---------+------------+------------+
5 rows in set (0.00 sec)

mysql> Select * from info;
+------+-------+---------+-----------+
| Id   | Name  | Address | Subject   |
+------+-------+---------+-----------+
| 125  | Raman | Shimla  | Computers |
| 130  | Ram   | Jhansi  | Computers |
+------+-------+---------+-----------+
2 rows in set (0.00 sec)
Salin selepas log masuk

Hasil yang ditetapkan di atas menunjukkan bahawa baris baharu tidak sepadan dengan takrifan "Maklumat", jadi ia tidak kelihatan dalam paparan. Sekarang, dalam pertanyaan berikut, kami akan mencipta pandangan yang sama "Maklumat"

dengan menggunakan "WITH CHECK OPTION" -

mysql> Create OR Replace VIEW Info AS Select Id, Name, Address, Subject from student_info WHERE Subject = 'Computers' WITH CHECK OPTION;
Query OK, 0 rows affected (0.06 sec)
Salin selepas log masuk

Now , jika kami cuba memasukkan baris yang sepadan dengan definisi pandangan "Maklumat", MySQL membenarkan kami berbuat demikian. Ini boleh dikosongkan daripada pertanyaan di bawah dan hasilnya.

mysql> INSERT INTO Info(Id, Name, Address, Subject) values(133, 'Mohan','Delhi','Computers');
Query OK, 1 row affected (0.07 sec)

mysql> Select * from info;
+------+-------+---------+-----------+
| Id   | Name  | Address | Subject   |
+------+-------+---------+-----------+
| 125  | Raman | Shimla  | Computers |
| 130  | Ram   | Jhansi  | Computers |
| 133  | Mohan | Delhi   | Computers  |
+------+-------+---------+-----------+
3 rows in set (0.00 sec)
Salin selepas log masuk
Tetapi anggaplah jika kita cuba memasukkan baris yang tidak sepadan dengan definisi pandangan "Info", MySQL tidak akan membenarkan kita berbuat demikian dan membuang ralat -
mysql> INSERT INTO Info(Id, Name, Address, Subject) values(134, 'Charanjeet','Amritsar','Geophysics');
ERROR 1369 (HY000): CHECK OPTION failed
Salin selepas log masuk
#🎜 🎜#

Atas ialah kandungan terperinci Di manakah pandangan MySQL mungkin tidak konsisten, dan bagaimana untuk memastikan konsistensinya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:tutorialspoint.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan