我有一个数据库表中的一个索引,其中的键名是首要的,类型为BTREE,独特之处是YES,盒装是NO,列是ID,基数是728,和校对是A.
我有上,增加了条目到MySQL数据库表,并从数据库中删除表的重复页面加载运行的脚本。
下面是删除重复的脚本部分:
// Removes Duplicates from the MySQL Database Table
// Removes Duplicates from the MySQL Database Table based on 'Entry_Date' field
mysql_query("Alter IGNORE table $TableName add unique key (Entry_Date)");
// Deletes the added index created by the Removes Duplicates function
mysql_query("ALTER TABLE $TableName DROP INDEX Entry_Date");
使用删除重复以上命令,一个附加的索引被添加到该表。 下一行命令是假设删除添加的指标。
问题是,有时也被删除重复命令创建的添加索引没有得到通过以下删除添加索引命令删除,从而造成更多的索引被添加到表中。 这些额外的索引防止脚本添加额外的数据到数据库中,直到我用手工删除已添加的指标。
我的问题:是否有一个命令或短的功能,我可以添加到要删除除在这篇文章的开头提到的原始索引的所有索引的脚本?
我看过以下职位,但我不知道这是否是使用正确的脚本: 如何删除所有索引,除了单查询主键
我不这么认为,你所能做的就是创建副本但不会复制指数。 例如,如果你让创建如表1(选择TABLE_2 *),才能使自己的副本,但没有索引或PK。
所有的评论后,我想我知道发生了什么。 你居然允许在数据库中的重复。 你只是想清理他们一些时间。 问题是,你选择清除它们的方法是通过创造一个独特的密钥,并使用此忽略选项导致重复的行会被丢弃,而不是失败的唯一密钥创建。 然后你把唯一的钥匙,这样重复的行可以再次添加。 你的问题是,有时唯一键没有被删除。
我建议你以另一种方式删除重复。 假设你的表名是“MY_TABLE”和你的主键是my_mey_column则:
delete from my_table where my_key_column not in (select min(my_key_column) from my_table group by Entry_Date)
编辑 :由@a_horse_with_no_name如上面指出将无法正常工作,由于在MySQL限制
尝试以下三种查询代替:
create temporary table if not exists tmp_posting_data select id from posting_data where 1=2
insert into tmp_posting_data(id) select min(id) from posting_data group by Entry_Date
delete from Posting_Data where id not in (select id FROM tmp_posting_data)
最后要注意,尽量考虑需要允许复制也行通过@a_horse_with_no_name的建议。 而不是允许输入行,然后删除,你可以在数据库中像曾经创造了独特的键:
Alter table posting_data add unique key (Entry_Date)
然后,当你从RSS插入新的数据使用以下,而不是“插入”用“替换”将删除旧行,如果它是主键或唯一索引重复
replace into posting_data (......) values(.....)