是否可以通过存储过程更改mySql中的表?

是否可以通过存储过程更改mySql中的表?,mysql,stored-procedures,Mysql,Stored Procedures,下面是我想在mySQL中做的事情。。。我觉得这根本不可行,但我希望是错误的 create procedure foo(IN MYTABLE varchar(50) , IN COLNAME varchar (50), IN MYTYPE varchar(50)) begin IF (select count(*) from information_schema.columns where table_name =MYTABLE and column_name = COLNAME) = 0

下面是我想在mySQL中做的事情。。。我觉得这根本不可行,但我希望是错误的

create procedure foo(IN MYTABLE varchar(50) , IN COLNAME varchar (50), IN MYTYPE varchar(50)) 
begin 
IF (select count(*) from information_schema.columns where table_name =MYTABLE and column_name = COLNAME) = 0 
THEN
alter table MYTABLE add column MYNAME MYTYPE; 
end;

call foo( 'table_foo' , 'column_bar' , 'varchar(100)' );

我不知道你到底为什么想要它,但这是可能的:

DELIMITER //
DROP PROCEDURE foo//
CREATE PROCEDURE foo(IN MYTABLE varchar(50) , IN COLNAME varchar (50), IN MYTYPE varchar(50))
BEGIN
  SET @ddl = CONCAT('alter table ', MYTABLE, ' add column (', COLNAME, ' ', MYTYPE, ')');
  PREPARE STMT FROM @ddl;
  EXECUTE STMT;
END;
//

简单回答我为什么要这么做


在发布的产品中架构的版本更改时更新已部署的数据库。Shell脚本编写对于跨平台代码来说是一个不好的选择,因此SQL脚本编写非常好,请记住在使用后删除这些过程。如果我部署了1.1,但在更新时处于1.4,我只需依次运行1.1->1.2、1.2->1.3和1.3->1.4脚本。

哇,说说SQL注入吧!我绝对不会建议我的孩子们做什么,但这仍然是可能的:)