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
PHPzke hadapan
2023-09-17 12:33:04941semak imbas

🎜🎜 . 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;

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)

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)

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)

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)

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)
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
#🎜 🎜#

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!

Kenyataan:
Artikel ini dikembalikan pada:tutorialspoint.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam