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

时间:2009-02-13 21:40:36

标签: 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 
THEN
alter table MYTABLE add column MYNAME MYTYPE; 
end;

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

2 个答案:

答案 0 :(得分:6)

不知道为什么地球上你会想要它,但它有可能:

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

答案 1 :(得分:2)

简短回答我为什么要这样做。

在已发布产品中架构版本发生更改时更新已部署的数据库。对于跨平台代码来说,Shell脚本是一个糟糕的选择,因此SQL中的脚本很棒,只需记住在使用后删除这些程序。如果我已经部署了1.1但是在更新时是1.4,我只是按顺序运行1.1-> 1.2,1.2-> 1.3和1.3-> 1.4脚本。