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個數據庫查詢,一定有更好的辦法?
有沒有辦法在聲明中自動生成它們? – Craig 2011-05-25 12:17:54
您可以從information_schema獲得列的列表並使用它們來生成所需的語句。 – 2011-05-25 12:20:27
好吧,先生成列表然後創建語句?我正在使用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