我必须将 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在修改名称、数据类型和大小等的所有其他情况下都可以成功执行,但只有在这种情况下它不能正常工作。
最佳答案
显然,请在测试数据上尝试以下操作,而不是在生产环境中。
您的 IF 语句似乎存在错误,因此当您找到要修改的字段时,仅执行 select 1;
。您需要更改 IF 语句中子句的顺序。
alter table 语句还需要列定义,在您的情况下类似于
ALTER TABLE `product` CHANGE `date_madified` `date_modified` timestamp
更改上述内容以反射(reflect) date_madified 字段的字段类型。
关于mysql - 更改架构不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41220386/