我正在使用 MySQL Workbench 创建一个大型数据库。
我不断得到:
ERROR: Error 1089: Incorrect prefix key; the used key part isn't a string, the used length is longer than the key part, or the storage engine doesn't support unique prefix keys
当尝试执行以下查询时:
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`
它仍然给我错误。
最佳答案
看起来您将索引字段类型从 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修改表奇怪的键错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14579868/