2017-01-11 1 views
0

私はテーブルがあると私は列を追加したいが、列の名前が変数になります。このようなテーブルに動的列を追加するにはどうすればよいですか?

$coulName = col_1_2; 
ALTER TABLE `table name` ADD `$coulmName` DOUBLE NOT NULL DEFAULT '0' AFTER `col2`; 

私はそれをどのように行うことができますか?

+0

[動的SQL](http://stackoverflow.com/questions/190776/how-to-have-dynamic-sql-in-mysql-stored-procedure#5728155)を作成する必要があります。 –

答えて

2

あなたはこのためprepared statement使用する必要があります:あなたは、テーブルまたは列名に変数を結びつけることができないので、あなただけのプリペアドステートメントを使用して、これを達成することができますMySQLの中で

SET @colName = 'col_1_2'; 

SET @s = CONCAT('ALTER TABLE `mytable` ADD `', @colName, 
       '` DOUBLE NOT NULL DEFAULT 0 AFTER `col2`'); 
PREPARE stmt1 FROM @s; 

EXECUTE stmt1; 
DEALLOCATE PREPARE stmt1; 
+0

私の友人の作品に感謝します – AboYousef16

1

を。これは、SQL文を文字列でアセンブルして実行する必要があることを意味します。

しかし、アプリケーションコードからもこれを実行できます。変数名は、PHPを使用する可能性があることを示しています。同じことが適用されます:SQL文の文字列を連結しなければならず、パラメータを使用できません。

コードは、以下のMySQLのようにSGになります:

@coulName = 'col_1_2'; 
@sql = 'ALTER TABLE `table name` ADD `',@coulmName,'` DOUBLE NOT NULL DEFAULT '0' AFTER `col2`; 
PREPARE stmt1 FROM @sql; 
EXECUTE stmt1; 
DEALLOCATE PREPARE stmt1; 

をしかし、私はわからないんだけど、それは本当に良いアイデアを定期的かつ動的に既存のデータ構造を変更した場合。これは通常、データベース設計が貧弱であることを示します

関連する問題