我必须将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在修改名称,数据类型和大小等所有其他情况下都能成功执行,但在这种情况下,它无法正常工作。
答案 0 :(得分:0)
显然,不要在生产环境中尝试以下测试数据。
您的IF语句似乎错误,因此只有在找到要修改的字段时才执行select 1;
。您需要更改IF语句中子句的顺序。
另外,alter table语句需要一个列定义,在你的情况下需要类似
ALTER TABLE `product` CHANGE `date_madified` `date_modified` timestamp
更改上述内容以反映date_madified字段的字段类型。