มุมมอง 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)