【发布时间】:2011-02-20 16:19:53
【问题描述】:
删除 MySQL 表是否也会自动删除该表的索引?
【问题讨论】:
-
实际上,这并不像我在初读时所认为的那样奇怪。虽然 MySQL 的文档没有明确提到 DROP TABLE 会删除所有索引,但我认为这是隐含的。
删除 MySQL 表是否也会自动删除该表的索引?
【问题讨论】:
http://dev.mysql.com/doc/refman/5.1/en/drop-table.html
所有表格数据和表格 定义被删除,所以要小心 用这个声明!
【讨论】:
是的,确实如此。没有表,就没有理由保留索引。
您可以通过创建 MyISAM 表并在数据文件夹中查找 tablename.MYI 来确认这一点。一旦你放下表格,这个文件就会消失。
【讨论】:
是的。索引是其所有者表的一部分,并在删除时与行数据一起释放。
(引用它的其他表上的外键索引将防止该表被删除。)
【讨论】:
当一个表被删除时,所有数据、索引和链接信息也将被删除。 您可以将其视为行的级联删除,当您删除一行时,链接到它的所有信息也将被删除(外键等)
【讨论】:
是的。它删除索引。这可以验证:
创建表 table1 (foo INT); 创建索引 ix_table1_foo ON table1 (foo); 创建索引 ix_table1_foo ON table1 (foo); -- 失败:索引已经存在。 删除表表 1; 创建表 table1 (foo INT); 创建索引 ix_table1_foo ON table1 (foo); -- 成功:索引不存在。您也可以通过查看information schema 来验证它:
创建表 table1 (foo INT); 创建索引 ix_table1_foo ON table1 (foo); 选择计数(*) FROM information_schema.STATISTICS WHERE INDEX_NAME = 'ix_table1_foo'; -- 返回 1 删除表表 1; 选择计数(*) FROM information_schema.STATISTICS WHERE INDEX_NAME = 'ix_table1_foo'; -- 返回 0【讨论】: