การสร้างและแสดงข้อมูลจาก VIEW ใน MySQL
VIEW เป็นตารางเสมือน (virtual table) ที่เก็บคำสั่ง SELECT ไว้ ใช้งานเหมือนตารางทั่วไปด้วย SELECT * FROM view_name
สร้างตารางฐานข้อมูล
mysql> create table DemoTable1388 (
-> StudentId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> StudentName varchar(40)
-> );
Query OK, 0 rows affected (0.71 sec)
mysql> insert into DemoTable1388(StudentName) values('Chris');
mysql> insert into DemoTable1388(StudentName) values('Bob');
mysql> insert into DemoTable1388(StudentName) values('David');
mysql> insert into DemoTable1388(StudentName) values('Mike');
ข้อมูลในตารางหลัก
+-----------+-------------+ | StudentId | StudentName | +-----------+-------------+ | 1 | Chris | | 2 | Bob | | 3 | David | | 4 | Mike | +-----------+-------------+
สร้าง VIEW
mysql> create view view1388 as select * from DemoTable1388 where StudentId = 3; Query OK, 0 rows affected (0.13 sec)
แสดงข้อมูลจาก VIEW
mysql> select * from view1388;
ผลลัพธ์
+-----------+-------------+ | StudentId | StudentName | +-----------+-------------+ | 3 | David | +-----------+-------------+
คำสั่งที่เกี่ยวข้องกับ VIEW
| คำสั่ง | คำอธิบาย |
|---|---|
CREATE VIEW name AS SELECT ... | สร้าง view |
CREATE OR REPLACE VIEW name AS SELECT ... | สร้างใหม่หรือแทนที่ view เดิม |
SHOW CREATE VIEW name | ดูคำสั่งสร้าง view |
DROP VIEW name | ลบ view |
SELECT * FROM information_schema.VIEWS WHERE TABLE_NAME = 'name' | ข้อมูลเมตาของ view |
ข้อดีของ VIEW
- ลดความซับซ้อนของ query ซ้ำๆ
- ความปลอดภัย: ให้เข้าถึงเฉพาะคอลัมน์/แถวที่อนุญาต
- Abstraction: ซ่อนโครงสร้างตารางจริง
ข้อจำกัด
- ไม่สามารถสร้าง INDEX บน VIEW ได้ (MySQL)
- VIEW บางประเภทไม่รองรับ UPDATE/INSERT (non-updatable views)
- ประสิทธิภาพ: optimizer อาจไม่ optimize ได้ดีเท่ากับ query ตรงๆ