2015-11-16 47 views
0

我想在一個MySQL數據庫中創建一個視圖,該數據庫與另一個數據庫中的視圖具有相同的名稱,在php中使用這一行代碼。如何在MySQL中創建一個使用PHP中另一個數據庫視圖名稱的視圖?

mysql_query('CREATE VIEW `' . $targetDB . '`.`' . $row[0] . '` LIKE `' . $sourceDB . '`.`' . $row[0] . '`') or die(mysql_error()); 

然而,當我運行我的代碼,我得到這個錯誤

您的SQL語法錯誤;檢查與您的MySQL服務器版本相對應的手冊,在'LIKE copyinrdb'附近使用正確的語法。 abnormal_limit_view「在1號線

我在做什麼錯了我完整的代碼,如果有幫助:

<?php 
set_time_limit(0); 
function duplicateTables($sourceDB=NULL, $targetDB=NULL) { 
    $link = mysql_connect('my_host', 'my_user', 'my_pass') or die(mysql_error()); // connect to database 
           $results = mysql_query('SHOW FULL TABLES FROM copyinrdb WHERE TABLE_TYPE= "VIEW"') or die(mysql_error()); 
     while($row = mysql_fetch_row($results)) { 
      mysql_query('CREATE VIEW `' . $targetDB . '`.`' . $row[0] . '` LIKE `' . $sourceDB . '`.`' . $row[0] . '`') or die(mysql_error()); 
      mysql_query('INSERT INTO `' . $targetDB . '`.`' . $row[0] . '` SELECT * FROM `' . $sourceDB . '`.`' . $row[0] . '`') or die(mysql_error()); 
     } 
     mysql_free_result($results); 

    mysql_close($link); 
} // end duplicateTables() 
duplicateTables('copyinrdb', 'copytest1'); 
?> 

回答

0

CREATE VIEW db1.viewname LIKE db2.viewname根本就不是有效的MySQL的代碼。

LIKE關鍵字不能在那裏使用。

的語法是這樣的:

CREATE 
    [OR REPLACE] 
    [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}] 
    [DEFINER = { user | CURRENT_USER }] 
    [SQL SECURITY { DEFINER | INVOKER }] 
    VIEW view_name [(column_list)] 
    AS select_statement 
    [WITH [CASCADED | LOCAL] CHECK OPTION] 

[http://dev.mysql.com/doc/refman/5.7/en/create-view.html]

0

有一個在MySQL中CREATE VIEW聲明沒有LIKE條款,這就是爲什麼你會得到錯誤信息。在循環處理過程中,視圖列表通過發出並解析SHOW CREATE VIEW實例,或查詢的view_definition列,並使用適當的創建視圖語法預先設置,獲取視圖的創建視圖語句。

如果您直接從information_schema.views中查看包含view_definition的視圖列表,而不是使用show full tables命令,它甚至會更快。

相關問題