2012-05-30 63 views
2

我需要使用php在mysql中創建5-10個表,但我認爲有比創建10個查詢更好的方法,所以我的問題是,如何使用單個查詢執行此操作?它是可寫的嗎?每張桌子都不一樣。如何在單個查詢中創建少量表格。 MySQL

$sql = "CREATE TABLE IF NOT EXISTS `db_countries` (
      `countrykey` int(11) NOT NULL, 
      `countrynamelat` varchar(500) NOT NULL default '', 
      PRIMARY KEY (`countrykey`) 
     ) ENGINE=MyISAM DEFAULT CHARSET=utf8"; 

mysql_query($sql); 

    $sql2 = "CREATE TABLE IF NOT EXISTS `db_city`(
       `city_key` int(11) NOT NULL, 
       `city_name` varchar(500) NOT NULL, 
       `city_code` int(11) NOT NULL, 
       `city_country_key` int(11) NOT NULL, 
      PRIMARY KEY(`city_key`) 
     ) ENGINE=MyISAM DEFAULT CHARSET=utf8"; 
    mysql_query($sql2) or die(mysql_error()); 
+1

我認爲PDO可以支持多個語句。無論如何,你爲什麼要這樣做?正如某人在一分鐘前提到的(不記得他的名字),這是一個毫無意義的事情來嘗試優化。 – Corbin

+0

我正在爲joomla創建組件,因此如果有人想要安裝我的組件,我需要爲它們創建表格 –

回答

2

您可以創建一個存儲過程創建所有的表:

DELIMITER $$ 

CREATE PROCEDURE `localhost`.`sp_CreateTables`() 
BEGIN 
    CREATE TABLE IF NOT EXISTS `db_countries` (
    `countrykey` int(11) NOT NULL, 
    `countrynamelat` varchar(500) NOT NULL default '', 
     PRIMARY KEY (`countrykey`) 
) ENGINE=MyISAM DEFAULT CHARSET=utf8; 

    CREATE TABLE IF NOT EXISTS `db_city`(
    `city_key` int(11) NOT NULL, 
    `city_name` varchar(500) NOT NULL, 
    `city_code` int(11) NOT NULL, 
    `city_country_key` int(11) NOT NULL, 
    PRIMARY KEY(`city_key`) 
) ENGINE=MyISAM DEFAULT CHARSET=utf8; 
END 

接着剛剛從PHP調用存儲過程:

$sql = "call sp_CreateTables()"; 
mysql_query($sql) or die(mysql_error()); 
+0

在C API中,是的,mysql_query的行爲就像這樣,但在PHP中,它將不會。 http://php.net/manual/en/function.mysql-query.php – Corbin

+0

是的,多個查詢不支持 –

+0

哦你的權利。我已經更新了我的答案。 – papaiatis