我想知道是否有人可以帮助我。
我在发出 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/