Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在mysql的表exists中添加动态列?_Mysql - Fatal编程技术网

如何在mysql的表exists中添加动态列?

如何在mysql的表exists中添加动态列?,mysql,Mysql,我有一个表,我想添加列,但列的名称将是可变的 像这样: $coulName = col_1_2; ALTER TABLE `table name` ADD `$coulmName` DOUBLE NOT NULL DEFAULT '0' AFTER `col2`; 我如何才能做到这一点?您需要为此使用: SET @colName = 'col_1_2'; SET @s = CONCAT('ALTER TABLE `mytable` ADD `', @colName,

我有一个表,我想添加列,但列的名称将是可变的

像这样:

$coulName = col_1_2;
ALTER TABLE `table name` ADD `$coulmName` DOUBLE NOT NULL DEFAULT '0' AFTER `col2`;
我如何才能做到这一点?

您需要为此使用:

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;
为此,您需要使用一个:

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;

在MySQL中,您只能使用准备好的语句来实现这一点,因为您不能将变量绑定到表或列名。这意味着您必须将sql语句组装成字符串并执行它

但是,您也可以通过应用程序代码来实现这一点——变量名表明您可以使用php。同样适用:您必须连接sql语句字符串,不能使用参数

MySQL中的代码如下所示:

@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;

但是,我不确定定期动态更改现有数据结构是否真的是个好主意。这通常表明数据库设计很差。

在MySQL中,您只能使用准备好的语句来实现这一点,因为您无法将变量绑定到表或列名。这意味着您必须将sql语句组装成字符串并执行它

但是,您也可以通过应用程序代码来实现这一点——变量名表明您可以使用php。同样适用:您必须连接sql语句字符串,不能使用参数

MySQL中的代码如下所示:

@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;

但是,我不确定定期动态更改现有数据结构是否真的是个好主意。这通常表明数据库设计很差。

您可能需要编写。您可能需要编写。