การสร้าง View ด้วย CREATE VIEW
View คือ virtual table ที่เก็บ query ไว้ ใช้สำหรับลดความซับซ้อน ความปลอดภัย หรือ abstraction
รูปแบบคำสั่ง
CREATE VIEW yourViewName AS SELECT yourColumnName1, yourColumnName2, ..., yourColumnNameN FROM yourTableName;
ตัวอย่างสร้างตารางและ View
mysql> CREATE TABLE ViewDemo (
-> Id INT,
-> Name VARCHAR(200),
-> Age INT
-> );
Query OK, 0 rows affected (0.58 sec)
mysql> CREATE VIEW LookUpTable AS SELECT Id, Name FROM ViewDemo;
Query OK, 0 rows affected (0.15 sec)
ตรวจสอบ View ที่สร้าง
mysql> SHOW CREATE TABLE LookUpTable;
+-------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------+----------------------+ | View | Create View | character_set_client | collation_connection | +-------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------+----------------------+ | lookuptable | CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`%` SQL SECURITY DEFINER VIEW `lookuptable` AS select `viewdemo`.`Id` AS `Id`,`viewdemo`.`Name` AS `Name` from `viewdemo` | utf8 | utf8_general_ci | +-------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------+----------------------+ 1 row in set (0.00 sec)
การใช้งาน View:
-- Query view เหมือนตารางทั่วไป SELECT * FROM LookUpTable; -- Join กับตารางอื่น SELECT l.*, v.Age FROM LookUpTable l JOIN ViewDemo v ON l.Id = v.Id; -- สร้าง View จาก View ได้ (Nested views)
ตัวเลือกเพิ่มเติม:
ALGORITHM = {MERGE | TEMPTABLE | UNDEFINED}- วิธีการประมวลผลDEFINER = user- ผู้เป็นเจ้าของ (security context)SQL SECURITY {DEFINER | INVOKER}- ตรวจสอบสิทธิ์แบบไหนWITH CHECK OPTION- บังคับให้ INSERT/UPDATE ผ่าน view ต้องผ่าน WHERE clause
คำสั่งจัดการ View:
-- ลบ view DROP VIEW IF EXISTS view_name; -- แก้ไข view (MySQL ไม่มี ALTER VIEW ต้อง DROP แล้ว CREATE ใหม่) -- หรือใช้ CREATE OR REPLACE VIEW CREATE OR REPLACE VIEW view_name AS SELECT ...;