Mysql 重复添加唯一键导致索引数目超出mysql范围-Too many keys specified; max 64 keys allowed

前言:

今天跑脚本的时候,发现了一个错误:Too many keys specified; max 64 keys allowed,开始一脸懵逼,看脚本去。

环境:

mysql8

分析:

ALTER TABLE `table_t` ADD UNIQUE(`c`);这句话简单的将字段c添加了唯一约束。如果脚本只是这样写的话,没执行一次这个sql语句,数据库都会新增一个新的索引值,c,c_1.c_2直到超出了mysql索引数目64,然后报错:Too many keys specified; max 64 keys allowed。

解决:

编写sql脚本的时候必须严格按照要求规范来写:

DROP PROCEDURE IF EXISTS aaa;
DELIMITER //
CREATE PROCEDURE aaa()
  BEGIN
   IF NOT EXISTS(SELECT * FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE WHERE TABLE_SCHEMA= 'database_name' AND TABLE_NAME = 'table_name' AND CONSTRAINT_NAME = 'column_name')
    THEN
ALTER TABLE `database_name`.`table_name` ADD UNIQUE KEY `index_name` (`column_name`);
END IF;
  END //
DELIMITER ;
CALL aaa();

脏数据的处理:

这个处理网上搜了比较的资料了,还没有一个好的批量修改的方式。暂时解决就是手动删除索引。

SELECT DISTINCT(CONCAT('drop index ', INDEX_NAME, ' on ', TABLE_NAME, ';')) 
FROM information_schema.`STATISTICS` WHERE TABLE_SCHEMA= 'database_name' AND TABLE_NAME='table_name' AND INDEX_NAME LIKE '%index_name%'; 

这个sql可以得到多个删除索引的语句,但咋跑起来,暂时还没弄,有空再来吧(虽然不大可能了,除非工作必要,哈哈)。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值