更改架构不起作用

时间:2016-12-19 10:21:02

标签: mysql schema alter

我必须将alter命令添加到我的架构中。

SET @s = (SELECT IF(
    (SELECT COUNT(*)
        FROM INFORMATION_SCHEMA.COLUMNS
        WHERE table_name = 'product'
        AND table_schema = DATABASE()
    AND column_name = 'date_madified'
    ) > 0,
    "SELECT 1;",
    "ALTER TABLE `product` CHANGE `date_madified` `date_modified`;"
));
PREPARE stmt FROM @s;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

以上执行时没有给出错误。但是列名不会改变。 当我试图检查下面发现的错误是原因。 1.没有选择正确的数据库。 2.即使我对数据库名称进行了硬编码,'IF'也不能得到正确的结果。

虽然上述格式的sql在修改名称,数据类型和大小等所有其他情况下都能成功执行,但在这种情况下,它无法正常工作。

1 个答案:

答案 0 :(得分:0)

显然,不要在生产环境中尝试以下测试数据。

您的IF语句似乎错误,因此只有在找到要修改的字段时才执行select 1;。您需要更改IF语句中子句的顺序。

另外,alter table语句需要一个列定义,在你的情况下需要类似

ALTER TABLE `product` CHANGE `date_madified` `date_modified` timestamp

更改上述内容以反映date_madified字段的字段类型。