是否有删除MySQL中重复键记录的方法?MySQL插入重复键;删除?
假设我们在数据库中有一个具有特定主键的记录,并且我们尝试使用相同的密钥添加另一个记录 - ON DUPLICATE KEY UPDATE
只会更新记录,但如果已存在,是否有删除记录的选项?这是用于点击按钮的简单的输入/输出功能。
是否有删除MySQL中重复键记录的方法?MySQL插入重复键;删除?
假设我们在数据库中有一个具有特定主键的记录,并且我们尝试使用相同的密钥添加另一个记录 - ON DUPLICATE KEY UPDATE
只会更新记录,但如果已存在,是否有删除记录的选项?这是用于点击按钮的简单的输入/输出功能。
最近可能的解决方案是REPLACE
声明。这里是documentation for REPLACE。
类似的问题,有人问MySQL Forums和recommended(and only) answer是使用REPLACE
。
是的,但那不是我正在寻找的东西 - 我不想替换数据库中的项目 - 如果它存在,我想一起摆脱它。 – 2012-07-15 19:56:16
我想唯一的选择(如果上述是唯一可能的解决方案)在这种情况下将运行单独的语句 - 首先检查是否找到记录,然后根据结果添加或删除它。 – 2012-07-15 19:57:58
或创建一个'BOOLEAN'或'ENUM'列并将其设置为0或1,具体取决于您是否需要。 – hjpotter92 2012-07-15 20:00:23
使用REPLACE INTO:
replace into some_table
select somecolumn from othertable
要么插入新的数据,或者是否存在THR相同的数据将删除数据,并插入新的
vs vs DUPLICATE UPDATE的性能不同。 REPLACE INTO不会更新记录 - 它会删除记录并重新添加,如果涉及大量数据和索引,则可能需要一段时间...最好使用ON DUPLICATE UPDATE,但他要求删除ON DUPLICATE DELETE – 2013-08-27 08:25:24
是当然还有MySQL中的解决方案,为您的问题。
如果你想删除或跳过新插入的记录,如果有已经重复记录在表中的键列存在,您可以用忽略这样的:
insert ignore into mytbl(id,name) values(6,'ron'),(7,'son');
这里id
列是主键在表mytbl
中。这将通过删除或跳过新的重复记录在表中插入多个值。
希望这能满足您的要求。
插入忽略不会删除任何东西 – 2015-09-25 13:59:35
这是一个变通办法,但它的工作原理:
创建一个新的列,并调用它do_delete
,或什么的,使其成为一个微小的-INT。然后做On Duplicate Key Update do_delete = 1;
根据你的MySQL版本/连接,你可以在同一个语句中执行多个查询。但是,如果不是,只需在后面单独运行一个单独的查询。无论哪种方式,下一个查询将只是:Delete From [table] Where do_delete = 1;
。这样,如果它是一个新的条目,它不会删除任何东西。如果它不是新条目,则会将其标记为删除,然后您可以将其删除。
我喜欢这个选项 - 并且不需要更改我的更新语句。 – ChiMo 2016-07-05 23:16:36
使用**触发器** – rekenerd 2012-07-15 20:03:24
谢谢 - 我认为这是唯一的选择。 – 2013-04-08 14:48:52