mysql - 更改架构不起作用

标签 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在修改名称、数据类型和大小等的所有其他情况下都可以成功执行,但只有在这种情况下它不能正常工作。

最佳答案

显然,请在测试数据上尝试以下操作,而不是在生产环境中。

您的 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/

相关文章:

c# - 如何正确分组以下 MySql 表而不丢失数据?

mysql - PhpStorm 中的数据库架构未列出

php - mysql 将 "prefix"添加到列中的每个值

php - SQL Alter Table 语法错误

python - mySQL 加载数据 - 第 1 行不包含所有列的数据

python - 使用python和mssql插入特殊字符°

Erlang 确保 Mnesia 模式复制

ruby-on-rails - 如何比较 Heroku 生产模式与本地开发模式?

oracle - 如何使用一个Alter table语句重命名oracle中的多个列?

javascript - 使用 Javascript 搜索表格