15

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

假设我们在数据库中有一条具有特定主键的记录,我们尝试添加另一个具有相同键ON DUPLICATE KEY UPDATE的记录 - 只会更新记录,但是如果已经存在,是否有删除记录的选项?它用于单击按钮时的简单输入/输出功能。

4

5 回答 5

12

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

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

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

于 2015-01-09T19:46:05.447 回答
5

使用替换成

replace into some_table
select somecolumn from othertable

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

于 2012-07-15T19:54:20.190 回答
1

最接近的可能解决方案是REPLACE语句。这是REPLACE 的文档

在MySQL 论坛上提出了类似的问题,推荐的(也是唯一的)答案是使用REPLACE.

于 2012-07-15T19:53:55.927 回答
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”,它将无效;

于 2021-02-25T18:20:59.700 回答
-2

是的,当然 MySQL 中有解决您问题的方法。

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

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

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

希望这将满足您的要求。

于 2013-12-02T10:40:34.230 回答