MySQL修改表奇怪的键错误

标签 mysql database-design foreign-keys mysql-workbench

我正在使用 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/

相关文章:

java - 我们应该将调试信息存储在应用程序的数据库中吗

php - 我可以使用外键限制来使用 PHP 返回有意义的 UI 错误吗

postgresql - Postgres 运行缓慢的删除查询

php - 用新外键替换列值的方法?

mysql - Apache2 Perl vHosts 错误

mysql - 无法从导入的 MySQL 数据库获取地理定位结果

php - Symfony 删除实体从不刷新

mysql - 如何构建分类投票数据库?

php - 完整的日历事件数据

数据库设计问题——需要说明