mysql 更改表的索引

本文旨在提供MySQL中更改和建立索引的常用语句,帮助开发者高效地管理数据库索引,避免因频繁建表而遗忘操作语句的困扰。

写这篇文章其实就是为了让自己记住mysql更改索引和建索引的语句,因为经常建表的时候搞错了,想修改索引,总是忘记语句,我向大家都遇到过这种事情吧,可能很多人说,直接用可视化的设计表的软件重新生成一个见表语句不就行了嘛,这杨虽然可以,可是我们是工程师啊,改个索引还要那么搞得话太丢脸了,而且速度也不快,更别说里面已经有数据的情况了,所以这里列出一些常用的更改索引的语句。

 

  • 添加PRIMARY KEY(主键索引)
    mysql>ALTER TABLE `table_name` ADD PRIMARY KEY ( `column` )
     
  • 添加唯一索引

    mysql>ALTER TABLE `table_name` ADD UNIQUE (`column`)
     
  •  添加普通索引

    mysql>ALTER TABLE `table_name` ADD INDEX index_name ( `column` )
     
  • 添加全文索引

    mysql>ALTER TABLE `table_name` ADD FULLTEXT (`column`)
    
     
  • 多列索引

    mysql>ALTER TABLE `table_name` ADD INDEX index_name ( column1`, `column2`, `column3` )
     

 

### 修改 MySQL 索引结构 MySQL 中无法直接修改索引的字段、长度或类型,必须通过删除旧索引并重新创建新索引的方式来实现。此过程涉及 `ALTER TABLE` 语句与 `DROP INDEX` 和 `ADD INDEX` 的组合使用[^1]。 #### 修改索引字段 若需更改索引所依赖的字段,需先删除原索引,再为新字段添加索引。例如: ```sql -- 删除原索引 ALTER TABLE your_table DROP INDEX idx_old; -- 为新字段添加索引 ALTER TABLE your_table ADD INDEX idx_new (new_column); ``` #### 修改索引长度 对于 `VARCHAR` 类型字段,若使用 `utf8mb4` 字符集,每个字符最多占用 4 字节,因此索引长度受 InnoDB 引擎限制(默认 767 字节),通常只能对前 191 个字符建立完整索引。若字段长度超过该限制,可使用前缀索引,例如: ```sql -- 修改索引长度(前缀索引ALTER TABLE your_table DROP INDEX idx_business_id; ALTER TABLE your_table ADD INDEX idx_business_id (business_id(255)); ``` 若需支持更长的索引长度,可启用 `innodb_large_prefix` 配置项,并将的行格式设为 `DYNAMIC` 或 `COMPRESSED`,从而将索引键长度限制提升至 3072 字节: ```sql -- 修改的行格式 ALTER TABLE your_table ROW_FORMAT=DYNAMIC; -- 启用大前缀后,可创建更长的索引 ALTER TABLE your_table ADD INDEX idx_business_id (business_id(768)); ``` #### 修改索引类型 MySQL 不支持直接更改索引类型(如从普通索引改为唯一索引),需先删除索引再以新类型重新创建。例如: ```sql -- 删除原索引 ALTER TABLE your_table DROP INDEX idx_name; -- 添加唯一索引 ALTER TABLE your_table ADD UNIQUE INDEX idx_name (column_name); ``` #### 示例:完整修改索引流程 ```sql -- 原有索引 KEY `app_user_question_answer_BUSINESS_ID` (`business_id`(768)) -- 修改为 KEY `app_user_question_answer_BUSINESS_ID` (`business_id`(255)) -- 删除原索引 ALTER TABLE app_user_question_answer DROP INDEX app_user_question_answer_BUSINESS_ID; -- 添加新索引 ALTER TABLE app_user_question_answer ADD INDEX app_user_question_answer_BUSINESS_ID (business_id(255)); ``` 此操作确保索引长度适配当前字符集与存储引擎的限制,同时保持查询性能[^1]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值