2012-02-11 39 views

回答

40

你可以從視圖中做CREATE TABLE SELECT來構建它。這應該將視圖的結構複製爲包含所有視圖行的新表。這是這個聲明的MySQL syntax reference

CREATE TABLE tbl_from_view AS  
    SELECT 
    col1, 
    col2, 
    col3, 
    col4, 
    col5 
    FROM your_view; 

請注意,您希望在列選擇中非常明確。從源視圖執行SELECT *不可取。確保你有任何計算或聚合列的別名,如COUNT(*), MAX(*), (col1 + col2)等。

+4

爲什麼不是最好什麼也別'SELECT *'? – 2013-11-15 19:25:47

+4

@MartinBurch在生產代碼中'SELECT *'通常是不宜使用的,而寧願明確表示檢索的列及其順序。在CTAS的情況下,您可能希望指定列順序。如果你肯定知道你需要所有列,他們是首選順序已,然後用'SELECT *'繼續,但最好要明確,避免surpirses(如由你的同事加入大型二進制BLOB列,瞞着您) – 2013-11-15 19:30:39

1

我還發現,在mysqldump輸出中,有一些語句會在定義視圖之前將表視圖創建爲表。我可以解析出來並將它們作爲查詢運行。