【发布时间】:2011-06-06 05:52:33
【问题描述】:
我想知道是否有人可以帮助我。
我在发出 ALTER 命令时有一个奇怪的行为。该命令来自 MySQL Workbench 同步,但它失败了。我有一个包含字段的表格:
`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`
也可以单独使用。
我不明白为什么将两者组合在一个查询中时它不起作用并说“创建”不存在。我知道它肯定存在。
请注意,我并不担心“已创建”的更改列,它是由 MWB 在比较和准备同步时生成的。但只是想知道为什么不能将这两种操作都放在一个查询上。
我使用的是 MySQL 5.5.8
更新
我实际上可以做多个子句。我一直在其他桌子上做这件事。
我忘了提这个。但是当我删除 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`
【问题讨论】:
标签: mysql