Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.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表添加列_Mysql_Loops_Alter_Sequential - Fatal编程技术网

使用循环向mySQL表添加列

使用循环向mySQL表添加列,mysql,loops,alter,sequential,Mysql,Loops,Alter,Sequential,我是mySQL的新手。假设我正在向表中添加列,如下所示: ALTER TABLE table ADD client_input_2.0_1 LONGTEXT; 我想添加一些类似的连续列,即 ALTER TABLE table ADD client_input_2.0_2 LONGTEXT; ALTER TABLE table ADD client_input_2.0_3 LONGTEXT; ALTER TABLE table ADD client_input_2.0_4 LONGTEXT;

我是mySQL的新手。假设我正在向表中添加列,如下所示:

ALTER TABLE table ADD client_input_2.0_1 LONGTEXT;
我想添加一些类似的连续列,即

ALTER TABLE table ADD client_input_2.0_2 LONGTEXT;
ALTER TABLE table ADD client_input_2.0_3 LONGTEXT;
ALTER TABLE table ADD client_input_2.0_4 LONGTEXT;
等等,一直到一个足够大的数字,这将需要相当长的时间,如果我这样做手动。在我的例子中,2.0代表一个章节/部分,最后一个数字代表一个问题编号,根据章节的不同,问题编号可以是1-50左右,因此手动创建此表将花费大量时间

有没有一种方法可以让我在脚本中使用某种循环,每次增加col#


非常感谢,

我认为您应该使用另一种方法:

ALTER TABLE TABLE ADD col LONGTEXT,ADD col_index INT

并使用col_索引跟踪col的用途

编辑的代码

尝试使用存储过程

DELIMITER $$
DROP PROCEDURE IF EXISTS RepeatLoopProc$$
CREATE PROCEDURE RepeatLoopProc()
  BEGIN
          DECLARE x  INT;
          DECLARE str  VARCHAR(255);
          Declare @sql nvarchar(4000);
          SET x = 0;

          REPEAT
                      SET str =  '';
                      SET  str = CONCAT(str,'client_input_2.0_',x);
                      SET  x = x + 1;
                      set @sql='ALTER TABLE table_name ADD '+ str +' column-definition';
                      exec sp_executesql @sql;
          UNTIL x  > 50
          END REPEAT;

  END$$
DELIMITER ;

希望这能对您有所帮助。

虽然我非常喜欢这种方法,但我不确定这种方法是否适合我的情况(我的问题简化了一点)。我的桌子比那更可怕一点。。。我的真实列名是client_input_2.0_13_c,其中2代表一个部分编号,'.0'代表该部分,'.13'代表问题编号,一个部分中最多可能有50个问题编号…这将节省我几次按键,手动计算我需要的列数仍然需要相当长的时间。有没有一种方法可以稍微程序化一点?