Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

เราจะสร้างมุมมอง MySQL ได้อย่างไร


มุมมอง MySQL ถูกสร้างขึ้นโดยใช้คำสั่ง CREATE VIEW มุมมองสามารถสร้างได้จากตารางเดียว หลายตาราง หรือมุมมองอื่น ดังที่เราทราบดีว่าในการสร้างมุมมอง ผู้ใช้ต้องมีสิทธิ์ของระบบที่เหมาะสมตามการใช้งานเฉพาะ

พื้นฐานสร้างมุมมอง ไวยากรณ์มีดังนี้ −

ไวยากรณ์

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]

ที่นี่

  • สร้างมุมมอง - คำสั่งนี้สร้างมุมมองใหม่

  • View_name − view_name เป็นชื่อของมุมมอง มุมมองเป็นของฐานข้อมูลเสมอ โดยค่าเริ่มต้น มุมมองใหม่จะถูกสร้างขึ้นในฐานข้อมูลที่ใช้อยู่ในปัจจุบัน

  • Select_statement − select_statement เป็นคำสั่ง SELECT และให้คำจำกัดความของมุมมอง Select_statement สามารถเลือกข้อมูลจากตารางฐานหรือมุมมองอื่นๆ ได้

  • Column_list - ส่วน column_list เป็นทางเลือก ซึ่งจะแสดงรายการชื่อสำหรับคอลัมน์ของมุมมองหลังชื่อมุมมองซึ่งชื่อต้องไม่ซ้ำกัน จำนวนชื่อใน column_list ต้องเท่ากับจำนวนคอลัมน์ที่เรียกโดยคำสั่ง SELECT หากเราต้องการให้ชื่อคอลัมน์มุมมองของเราเป็นชื่ออื่น เราสามารถทำได้โดยเพิ่มคำสั่งย่อย [ชื่อ AS] ในรายการที่เลือก

  • หรือแทนที่ - หากส่วนคำสั่งทางเลือก OR REPLACE ถูกเพิ่มด้วยคำสั่ง CREATE VIEW คำสั่ง CREATE VIEW จะแทนที่มุมมองที่มีอยู่และสร้างมุมมองใหม่ หากไม่มีมุมมอง CREATE VIEW จะเหมือนกับ CREATE OR REPLACE VIEW

  • อัลกอริทึม - ส่วนคำสั่ง ALGORITHM เป็นทางเลือก ซึ่งจะมีผลกับวิธีที่ MySQL ประมวลผลข้อมูลพร็อพเพอร์ตี้ ALGORITHM ใช้ค่าสามค่า ได้แก่ MERGE, TEMPTABLE หรือ UNDEFINED อัลกอริทึมเริ่มต้นคือ UNDEFINED

  • [DEFINER ={ ผู้ใช้ | CURRENT_USER }] [SQL SECURITY { DEFINER | ผู้เรียกใช้ } ] − ส่วนคำสั่ง DEFINER และ SQL SECURITY ระบุบริบทความปลอดภัยที่จะใช้เมื่อตรวจสอบสิทธิ์การเข้าถึง ณ เวลาเรียกใช้มุมมอง หากคุณระบุอนุประโยค DEFINER กฎต่อไปนี้จะกำหนดค่าผู้ใช้ DEFINER ตามกฎหมาย -

    • หากคุณไม่มีสิทธิ์ SUPER ค่าผู้ใช้ที่ถูกต้องตามกฎหมายเท่านั้นคือบัญชีของคุณเอง และคุณไม่สามารถตั้งค่าตัวกำหนดเป็นบัญชีอื่นได้

    • หากคุณมีสิทธิ์ SUPER คุณสามารถระบุชื่อบัญชีทางกฎหมายแบบวากยสัมพันธ์ได้

ภายในรูทีนที่เก็บไว้ซึ่งกำหนดด้วยคุณสมบัติ SQL SECURITY DEFINER CURRENT_USER จะส่งกลับค่า DEFINER ของรูทีน สิ่งนี้ยังส่งผลต่อมุมมองที่กำหนดภายในรูทีนดังกล่าว หากการกำหนดมุมมองมีค่า DEFINER เป็น CURRENT_USER

  • 8. [ด้วย [CASCADED | ท้องถิ่น] ตัวเลือกการตรวจสอบ] – สามารถกำหนดส่วนคำสั่ง WITH CHECK OPTION สำหรับมุมมองที่อัพเดตได้เพื่อป้องกันการแทรกหรืออัพเดตแถว ยกเว้นที่ส่วนคำสั่ง WHERE ใน select_statement เป็นจริง ในส่วนคำสั่ง WITH CHECK OPTION สำหรับมุมมองที่อัพเดตได้ คีย์เวิร์ด LOCAL และ CASCADED จะกำหนดขอบเขตของการทดสอบการตรวจสอบเมื่อมุมมองถูกกำหนดในแง่ของมุมมองอื่น คีย์เวิร์ด LOCAL จำกัด CHECK OPTION เฉพาะกับมุมมองที่กำหนด CASCADED ทำให้การตรวจสอบมุมมองพื้นฐานได้รับการประเมินเช่นกัน เมื่อไม่มีการระบุคีย์เวิร์ด ค่าเริ่มต้นคือ CASCADED

ตัวอย่าง

ในตัวอย่างนี้ เรากำลังสร้างมุมมองที่ชื่อ First_View บนตาราง 'ลูกค้า' โดยมีข้อมูลดังนี้ -

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)

ตอนนี้ หากเราจะเรียกใช้แบบสอบถามโดยใช้ชื่อของมุมมอง เราก็จะได้รับรายละเอียดจากตารางที่สร้างคำค้นหานั้น

mysql> Select * from first_view;
+-------------+----------+
| Customer_Id | Name     |
+-------------+----------+
| 1           | Rahul    |
| 2           | Yashpal  |
| 3           | Gaurav   |
| 4           | Virender |
+-------------+----------+
4 rows in set (0.13 sec)