使用 ALTER 时 MySQL 未知列错误,不理解行为

标签 mysql

我想知道是否有人可以帮助我。

我在发出 ALTER 命令时有一个奇怪的行为。该命令来自 MySQL Workbench sync,但失败了。我有一个包含字段的表:

`id`  int(11) NOT NULL AUTO_INCREMENT ,
`text`  varchar(255) CHARACTER SET latin1 COLLATE latin1_swedish_ci NOT NULL ,
`updated`  datetime NULL DEFAULT NULL ,
`remote_addr`  varchar(45) CHARACTER SET latin1 COLLATE latin1_swedish_ci NULL DEFAULT NULL ,
`http_user_agent`  varchar(255) CHARACTER SET latin1 COLLATE latin1_swedish_ci NULL DEFAULT NULL ,
`user_id`  int(11) NULL DEFAULT NULL ,
`category`  varchar(20) CHARACTER SET latin1 COLLATE latin1_swedish_ci NULL DEFAULT NULL ,
`created`  datetime NULL DEFAULT NULL ,
PRIMARY KEY (`id`)

我想发出 ALTER 命令:

ALTER TABLE `logs`
ADD COLUMN `updated` DATETIME NULL DEFAULT NULL AFTER `created`,
CHANGE COLUMN `created` `created` DATETIME NULL DEFAULT NULL AFTER `category`

我得到回应:

Unknown column 'created' in 'logs'

但是

ALTER TABLE `logs`
ADD COLUMN `updated` DATETIME NULL DEFAULT NULL AFTER `created`

独立工作,并且:

ALTER TABLE `logs`
CHANGE COLUMN `created` `created` DATETIME NULL DEFAULT NULL AFTER `category`

也可以单独使用。

我不明白为什么当两者结合在一个查询中时它不起作用并且说'created'不存在。我知道它肯定存在。

请注意,我并不担心“已创建”的更改列,它是由 MWB 在比较和准备同步时生成的。但只是想知道为什么不能将这两个操作放在一个查询上。

我正在使用 MySQL 5.5.8

更新

我实际上可以做多个子句。我一直在其他 table 上做的很好。

我忘记说了。但是,当我删除 AFTER 部分时,它会起作用。

所以这是行不通的:

ALTER TABLE `logs`
ADD COLUMN `updated` DATETIME NULL DEFAULT NULL AFTER `created`,
CHANGE COLUMN `created` `created` DATETIME NULL DEFAULT NULL AFTER `category`

但是这样做:

ALTER TABLE `logs`
ADD COLUMN `updated` DATETIME NULL DEFAULT NULL,
CHANGE COLUMN `created` `created` DATETIME NULL DEFAULT NULL AFTER `category`

最佳答案

我遇到了同样的问题。我通过在添加列之前执行更改列(或修改列)来解决它。

在您的示例中,将给出以下 SQL 语句:

ALTER TABLE `logs`
CHANGE COLUMN `created` `created` DATETIME NULL DEFAULT NULL AFTER `category`,
ADD COLUMN `updated` DATETIME NULL DEFAULT NULL AFTER `created`;

关于使用 ALTER 时 MySQL 未知列错误,不理解行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6248224/

相关文章:

mysql - 这段sql代码有什么问题吗?

mysql - 如何在 NodeJs 中使用 Sequelize 在表模型中应用外键?

mysql - ERROR 1064 (42000) 即使在教科书代码中

java - 无法让我的 jsp 存储结果集中的整数值

php - 创建一个下拉列表,但 php 不起作用

android - 在android中上传图像到服务器而不使用String

mysql - 连接mysql中的三个表,但拥有一张表的所有数据

javascript - 如何在javascript中使用查询结果

php - PDO - 与手动执行相比,特定查询速度非常慢

mysql - 在perl程序中嵌入shell命令