最近碰到要删除一个MySQL数据库索引的需求,按照Oracle的思维,"drop index index_name"会提示错误,MySQL删除索引,有两种形式,
(1) 使用DROP INDEX语句
语法格式,
DROP INDEX <索引名> ON <表名>
复制
语法说明如下,
<索引名>:要删除的索引名。
<表名>:指定该索引所在的表名。
(2) 使用ALTER TABLE语句
根据ALTER TABLE语句的语法可知,该语句可以用于删除索引。具体使用方法是将ALTER TABLE语句的语法中部分指定为以下子句中的某一项。
DROP PRIMARY KEY:表示删除表中的主键。一个表只有一个主键,主键也是一个索引。
DROP INDEX index_name:表示删除名称为 index_name 的索引。
DROP FOREIGN KEY fk_symbol:表示删除外键。
注意:如果删除的列是索引的组成部分,那么在删除该列时,也会将该列从索引中删除;如果组成索引的所有列都被删除,那么整个索引将被删除。
猜想一下,之所以在MySQL中不支持"drop index index_name"的操作,应该是说index_name不能唯一标识一个索引,很容易进行验证,在如下这两张表上各创建一个同名的索引,这是可行的,
root@mysqldb 14:41: [test]> create table t1(id int);
Query OK, 0 rows affected (0.29 sec)
root@mysqldb 14:41: [test]> create table t2(id int);
Query OK, 0 rows affected (0.06 sec)
root@mysqldb 14:41: [test]> create index idx_t on t1(id);
Query OK, 0 rows affected (0.17 sec)
Records: 0 Duplicates: 0 Warnings: 0
root@mysqldb 14:41: [test]> create index idx_t on t2(id);
Query OK, 0 rows affected (0.03 sec)
Records: 0 Duplicates: 0 Warnings: 0
复制
从数据字典可以看到,确实两张表,有相同名称索引,
root@mysqldb 14:50: [test]> select t1.name index_name, t2.name table_name
-> from information_schema.innodb_indexes t1, information_schema.innodb_tables t2
-> where t1.table_id=t2.table_id and t1.name='idx_t';
+------------+------------+
| index_name | table_name |
+------------+------------+
| idx_t | test/t1 |
| idx_t | test/t2 |
+------------+------------+
2 rows in set (0.04 sec)
复制
这说明了MySQL并不是通过索引名称唯一标识一个索引的,而在Oracle中,创建一个同名的索引,就会提示ORA-00955,
SQL> create index idx_01 on a(object_id);
create index idx_01 on a(object_id)
*
ERROR at line 1:
ORA-00955: name is already used by an existing object
复制
MySQL和Oracle在一些技术细节的设计上,还是存在差异。其实不只是这两种数据库,随着信创改造,我们接触的数据库可能越来越多,不同数据库之间的差异性,是我们日常工作中需要积累的财富。
近期更新的文章:
《最近碰到的问题》
《推荐一款小游戏》
文章分类和索引:
文章转载自bisal的个人杂货铺,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
相关阅读
Oracle RAC ASM 磁盘组满了,无法扩容怎么在线处理?
Lucifer三思而后行
972次阅读
2025-03-17 11:33:53
MySQL8.0统计信息总结
闫建(Rock Yan)
580次阅读
2025-03-17 16:04:03
Oracle DataGuard高可用性解决方案详解
孙莹
412次阅读
2025-03-26 23:27:33
MySQL生产实战优化(利用Index skip scan优化性能提升257倍)
chengang
399次阅读
2025-03-17 10:36:40
MySQL数据库当前和历史事务分析
听见风的声音
365次阅读
2025-04-01 08:47:17
墨天轮个人数说知识点合集
JiekeXu
355次阅读
2025-04-01 15:56:03
XTTS跨版本迁移升级方案(11g to 19c RAC for Linux)
zwtian
345次阅读
2025-04-08 09:12:48
MySQL 生产实践-Update 二级索引导致的性能问题排查
chengang
337次阅读
2025-03-28 16:28:31
Oracle SQL 执行计划分析与优化指南
Digital Observer
314次阅读
2025-04-01 11:08:44
Oracle 19c RAC更换IP实战,运维必看!
szrsu
290次阅读
2025-04-08 23:57:08