[MySQL] View 的匯出

昨天想從 MySQL 的 A 資料庫匯出 View 到 B 資料庫,在 B 資料庫匯入 SQL 時一直出現 Table ‘xxx’ already exists ,但是怎麼檢查 B 資料庫都沒有 xxx 這個表單。


原來是匯出的 View SQL 裡面加上了 table name。

就像這樣:

CREATE ALGORITHM = UNDEFINED DEFINER = `xyz`@`localhost` SQL SECURITY DEFINER VIEW `A`.`xxx` AS ….

而且整串 View 的 SQL 語法都加上了 table name,這是因為有時候會有跨資料庫 View 的關係 MySQL 只好這樣處理。如果沒有跨資料庫 View 的話,拿到這樣的檔案只好先手動改 SQL,或許 MySQL 有選項可以控制不要這樣輸出吧。

另外這是題外話..有時 View 跟 View 之間會有交互參照的關係,如果匯出的順序不對,找不到參照的 View 一樣會出現 Table ‘yyy’ doesn’t exist。在過去這個問題過去困擾我很久,每次遇到這種狀況只好人工把 View 的 SQL 順序排一次。但現在匯出的 SQL 會在建立 View 前會用 CREATE TABLE 的方式把 View 建起來,等要建立 View 的時候再 DROP TABLE,這樣就可以解決 View 匯出時的交互參照問題了。

3 comments On [MySQL] View 的匯出

  • 感謝前輩經驗分享 學到一招

  • 請問你是不是要說明,匯出的語法包含了 “資料庫” 的名字了呀? 因為在B資料庫執行Create View A.view1. 系統當然會說資料庫A已經有view1了.

    另外雖然說View跟Table很像,不過MySQL應該是認為兩種東西吧? Create Table 與 Create View 應該不是一樣的語法吧?

    MySQL跟我不太熟拉~只是細心研讀LAMP前輩的文章所提出的疑問..

  • http://www.strongd.net/blog/show/159

    看起來 View 很類似一種巨集, 但是卻沒有 index, primary key, 動作是 full table scan

    似乎看不出它有什麼價值??

Leave a reply:

Your email address will not be published.

Site Footer

Sliding Sidebar