ไม่สามารถ สร้าง View และ Table ชื่อเดียวกันในฐานข้อมูลเดียวกันได้
สร้างตารางตัวอย่าง
mysql> CREATE TABLE view_Table_Demo (
-> Id INT,
-> Name VARCHAR(20)
-> );
เพิ่มข้อมูลตัวอย่าง
mysql> INSERT INTO view_Table_Demo VALUES (100, 'Larry'), (101, 'Mike'), (102, 'Sam');
แสดงข้อมูล
mysql> SELECT * FROM view_Table_Demo;
ผลลัพธ์:
+------+-------+ | Id | Name | +------+-------+ | 100 | Larry | | 101 | Mike | | 102 | Sam | +------+-------+
พยายามสร้าง View ชื่อเดียวกัน (Error)
mysql> CREATE VIEW view_Table_Demo AS SELECT * FROM view_Table_Demo; ERROR 1050 (42S01): Table 'view_Table_Demo' already exists
เหตุผล
- MySQL เก็บ View และ Table ใน namespace เดียวกัน (same namespace)
- ชื่อต้องไม่ซ้ำกันระหว่าง: TABLE, VIEW, TEMPORARY TABLE
- Error 1050: Table already exists (รวม View ด้วย)
วิธีแก้: ใช้ชื่อต่างกัน
-- เพิ่ม prefix/suffix CREATE VIEW v_view_Table_Demo AS SELECT * FROM view_Table_Demo; CREATE VIEW view_Table_Demo_view AS SELECT * FROM view_Table_Demo;
แนวทางตั้งชื่อแนะนำ
| ประเภท | Prefix/Suffix | ตัวอย่าง |
|---|---|---|
| Table | (ไม่มี) / _tbl | users, orders_tbl |
| View | v_ / _view | v_user_summary, order_details_view |
| Temporary Table | tmp_ / _temp | tmp_session_data |
| Stored Procedure | sp_ / proc_ | sp_get_user |
| Function | fn_ / func_ | fn_calculate_tax |
| Trigger | trg_ / trigger_ | trg_audit_log |
ตรวจสอบ View ที่มีอยู่
SHOW FULL TABLES WHERE Table_type = 'VIEW'; -- หรือ SELECT TABLE_NAME FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_SCHEMA = 'your_db';
ลบ View ก่อนสร้างใหม่ (ถ้าต้องการชื่อเดียว)
DROP VIEW IF EXISTS view_Table_Demo; CREATE VIEW view_Table_Demo AS SELECT * FROM some_table;
แต่ต้องลบ Table เดิมก่อน (เพราะชื่อซ้ำ)