MySQL插入重复键;删除?

时间:2012-07-15 19:49:53

标签: mysql key duplicate-removal sql-delete

有没有办法删除MySQL中重复键的记录?

假设我们在数据库中有一个具有特定主键的记录,我们尝试添加另一个具有相同键的记录 - ON DUPLICATE KEY UPDATE只会更新记录,但是如果已存在则可以选择删除记录?点击按钮即可实现简单的输入/输出功能。

5 个答案:

答案 0 :(得分:9)

这是一种解决方法,但它有效:

创建一个新列并将其命名为do_delete,或者其他任何内容,使其成为一个小型int。然后执行On Duplicate Key Update do_delete = 1;

根据您的MySQL版本/连接,您可以在同一语句中执行多个查询。但是,如果没有,只需在字词之后立即运行单独的查询。无论哪种方式,下一个查询都只是:Delete From [table] Where do_delete = 1;。这样,如果它是一个新条目,它将不会删除任何内容。如果它不是新条目,则会将其标记为删除,然后您可以将其删除。

答案 1 :(得分:4)

使用REPLACE INTO

replace into some_table
select somecolumn from othertable

将插入新数据,或者如果存在相同数据将删除数据并插入新数据

答案 2 :(得分:1)

最接近的解决方案是 REPLACE 声明。这是documentation for REPLACE

MySQL Forums上提出了类似的问题,而recommended(and only) answer则使用 REPLACE

答案 3 :(得分:0)

使用 mySql 更清楚:
值可以来自同一个表:
replace into table1 (column1,column2) select (val1,val2) from table1



值可以来自另一个表:
replace into table1 (column1,column2) select (val1,val2) from table2



值可以来自任何具有条件的表:
replace into table1 (column1,column2) select (val1,val2) from table1 where <br>column3=val3 and column4=val4 ...




还请记住,值可以是静态的,表名是同名的:
replace into table1 (column1,column2) select (123,"xyz") from table1

即使更新导致重复条目也不会抛出错误,因为它将被替换。
(记住)只有自动增量值会增加;



如果您有数据类型为“TIMESTAMP”且带有“on update CURRENT_TIMESTAMP”的列,则不会有任何影响;

答案 4 :(得分:-2)

是的,当然在MySQL中有针对您的问题的解决方案。

如果要删除或跳过新的插入记录,如果表的键列中已存在重复记录,则可以使用IGNORE,如下所示:

insert ignore into mytbl(id,name) values(6,'ron'),(7,'son');

此处id列是表mytbl中的主键。这将通过删除或跳过新的重复记录在表中插入多个值。

希望这能满足您的要求。