MySQL Alter table 奇怪的键错误

Posted

技术标签:

【中文标题】MySQL Alter table 奇怪的键错误【英文标题】:MySQL Alter table strange key error 【发布时间】:2013-01-12 20:15:35 【问题描述】:

我正在使用 mysql Workbench 创建一个大型数据库。

我不断得到:

错误:错误 1089:前缀键不正确;使用的键部分不是字符串,使用的长度比键部分长,或者存储引擎不支持唯一前缀键

尝试执行以下查询时:

ALTER TABLE `view4`.`entities` DROP COLUMN `resellerType` ,
DROP COLUMN `industrTypeId` ,
DROP COLUMN `paymentTermsId` ,
ADD COLUMN `paymentTermsId` INT(11) NOT NULL  AFTER `vatRateId` ,
ADD COLUMN `industrTypeId` INT(11) NOT NULL  AFTER `paymentTermsId` ,
ADD COLUMN `resellerType` INT(11) NOT NULL  AFTER `industrTypeId` ,
DROP FOREIGN KEY `fk_entities_grades1`

我尝试过更改各种 INT 列的长度,但没有效果。我在其他几张桌子上也遇到了这个错误。

工作台做错了什么?


我把它简化了一点:

ALTER TABLE `view4`.`entities` DROP COLUMN `resellerType` ,
DROP COLUMN `industrTypeId`  , 
ADD COLUMN `industrTypeId` INT(11) NOT NULL  AFTER `paymentTermsId` ,
ADD COLUMN `resellerType` INT(11) NOT NULL  AFTER `industrTypeId` 

它仍然给我错误。

【问题讨论】:

"workbench 做错了什么?" - 你的意思是它在 mysql 控制台中工作? =) 句子分成小块。隔离错误。 我相信问题是您试图删除一列“paymentTermsId”(以及更多),并且您要求 mysql 在“paymentTermsId”(以及更多)之后添加一列。你有什么想法? @Reno Jones 它在任何控制台中都不起作用,所以它是工作台以错误的顺序做事?有什么解决办法? 您可以先添加列,然后将它们放到不同的查询中吗?这将为您完成这项工作。 【参考方案1】:

看起来您将索引字段类型从 CHAR/VARCHAR 更改为 INT,使用的索引是使用前缀长度创建的。脚本重新创建此字段 - DROP COLUMN + ADD COLUMN,这会导致错误。

尝试使用这种方式更改字段 -

ALTER TABLE `view4`.`entities`
  CHANGE COLUMN `industrTypeId` `industrTypeId` INT(11) NOT NULL
    AFTER `paymentTermsId`,
  CHANGE COLUMN `resellerType` `resellerType` INT(11) NOT NULL
    AFTER `industrTypeId`;

【讨论】:

以上是关于MySQL Alter table 奇怪的键错误的主要内容,如果未能解决你的问题,请参考以下文章

mysql ERROR 1062: ALTER TABLE causes auto_increment resequen

MySQL--常见ALTER TABLE 操作

mysql alter table修改表命令整理

sql ALTER TABLE if列不存在。来自http://stackoverflow.com/questions/24571611/mysql-alter-table-if-column-not

MySQL从库Error:“You cannot ‘Alter‘ a log table...“

MYSQL 5.7 alter table 小记