有没有办法删除 MySQL 中重复键的记录?
假设我们在数据库中有一条具有特定主键的记录,我们尝试添加另一个具有相同键ON DUPLICATE KEY UPDATE
的记录 - 只会更新记录,但是如果已经存在,是否有删除记录的选项?它用于单击按钮时的简单输入/输出功能。
有没有办法删除 MySQL 中重复键的记录?
假设我们在数据库中有一条具有特定主键的记录,我们尝试添加另一个具有相同键ON DUPLICATE KEY UPDATE
的记录 - 只会更新记录,但是如果已经存在,是否有删除记录的选项?它用于单击按钮时的简单输入/输出功能。
这是一种解决方法,但它有效:
创建一个新列并将其命名为do_delete
,或其他任何内容,使其成为一个小整数。然后做On Duplicate Key Update do_delete = 1;
根据您的 MySQL 版本/连接,您可以在同一语句中执行多个查询。但是,如果没有,只需在之后立即运行单独的查询。无论哪种方式,下一个查询都只是:Delete From [table] Where do_delete = 1;
。这样,如果它是一个新条目,它不会删除任何东西。如果它不是新条目,则会将其标记为删除,然后您可以将其删除。
最接近的可能解决方案是REPLACE
语句。这是REPLACE 的文档。
在MySQL 论坛上提出了类似的问题,推荐的(也是唯一的)答案是使用REPLACE
.
为了更清楚地使用 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”,它将无效;
是的,当然 MySQL 中有解决您问题的方法。
如果表的键列中已经存在重复记录,则要删除或跳过新的插入记录,可以像这样使用 IGNORE:
insert ignore into mytbl(id,name) values(6,'ron'),(7,'son');
这里id
的列是表中的主键mytbl
。这将通过删除或跳过新的重复记录在表中插入多个值。
希望这将满足您的要求。