有没有办法删除MySQL中重复键的记录?
假设我们在数据库中有一个具有特定主键的记录,我们尝试添加另一个具有相同键的记录 - ON DUPLICATE KEY UPDATE
只会更新记录,但是如果已存在则可以选择删除记录?点击按钮即可实现简单的输入/输出功能。
答案 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
中的主键。这将通过删除或跳过新的重复记录在表中插入多个值。
希望这能满足您的要求。