2011-05-25 42 views
1

我通過複製現有的表結構創建一個新表:MySQL變更表使用通配符更改所有字段類型?

CREATE TABLE IF NOT EXISTS `PeopleView` LIKE `People` 

然後我想用通配符來改變所有字段的數據類型:

ALTER TABLE `PeopleView` CHANGE * * VARCHAR(3) NOT NULL 

任何想法如何做這個?

我可以這樣做:

ALTER TABLE `PeopleView` CHANGE `FirstName` `FirstName` VARCHAR(3) NOT NULL 

但我需要我可以在許多不同的表,其中的字段名都是不同的運行功能。

目的:創建另一個表,其中包含用於決定顯示或隱藏哪些列的值。

PHP解決方案:

mysql_query("CREATE TABLE IF NOT EXISTS `PeopleView` LIKE `People`"); 

$cols = mysql_query("SHOW COLUMNS FROM `PeopleView`"); 

$sql = "ALTER TABLE `PeopleView` "; 
while($row = mysql_fetch_assoc($cols)) { 
    $sql .= "MODIFY `". $row['Field'] ."` VARCHAR(3) NOT NULL, "; 
} 
$sql = substr($sql, 0, -2); 
mysql_query($sql); 

我不喜歡,我必須跑3個數據庫查詢,一定有更好的辦法?

回答

0

然後我想改變使用通配符的所有字段的數據類型:

你不能這樣做。該語法只允許您通過逐個枚舉它們及其新定義來更改字段類型。

+0

有沒有辦法在聲明中自動生成它們? – Craig 2011-05-25 12:17:54

+0

您可以從information_schema獲得列的列表並使用它們來生成所需的語句。 – 2011-05-25 12:20:27

+0

好吧,先生成列表然後創建語句?我正在使用PHP我想我可以運行一個查詢來返回一個列名稱的數組。然後如何格式化ALTER TABLE語句?例如 ALTER TABLE'PeopleView' CHANGE'FirstName''FirstName' VARCHAR(3)NOT NULL,'LastName'' LastName' VARCHAR(3)NOT NULL 是否正確? – Craig 2011-05-25 12:24:00