視圖是虛擬表,不存儲物理數據,內容由 SELECT 定義動態生成。作用:安全隔離(隱藏敏感列)、簡化復雜查詢、邏輯復用。
CREATE [OR REPLACE]
[ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]
VIEW view_name [(column_list)]
AS select_statement
[WITH [CASCADED | LOCAL] CHECK OPTION];
ALGORITHM:MERGE(合併查詢,可更新)、TEMPTABLE(物化臨時表、不可更新)、UNDEFINED(默認,優化器決定)。WITH CHECK OPTION:插入/更新時檢查是否符合視圖定義條件。DROP VIEW [IF EXISTS] view_name [, view_name] ... [RESTRICT | CASCADE];
SHOW CREATE VIEW view_name;
SHOW TABLES; -- 混合顯示表與視圖
SHOW FULL TABLES WHERE Table_type = 'VIEW'; -- 僅視圖
<?php
$mysqli = new mysqli("localhost", "root", "123456", "xiaoqiangdb");
$sql = "SELECT * FROM myview ORDER BY chengji";
$result = $mysqli->query($sql);
echo '<table align="center" border="1">';
while ($row = $result->fetch_assoc()) {
echo '<tr>';
foreach ($row as $col) {
echo '<td>' . htmlspecialchars($col) . '</td>';
}
echo '</tr>';
}
echo '</table>';
$mysqli->close();
?>
CREATE VIEW 權限。SELECT 權限(基表也需)。INSERT/UPDATE/DELETE 權限。DROP 權限。視圖可更新需滿足:無聚合/去重/分組/聯合/子查詢(FROM 子句)、無非確定性函數、基表有主鍵且視圖包含主鍵列等。詳細見官方文檔「Updatable Views」。