MySql - 关于重复键插入

标签 mysql sql insert on-duplicate-key

我知道存在 INSERT IGNOREINSERT ... ON DUPLICATE KEY UPDATE。但是,当有重复键时,我想对临时表执行 INSERT 以记录已被违反的唯一键,以便我可以将其输出给用户.

有什么办法可以ON DUPLICATE INSERT吗?如果有帮助,我正在尝试进行批量插入。

最佳答案

使用 ON DUPLICATE KEY UPDATE,您不能插入另一个表 - 也没有可用的替代函数。

您可以通过两种自定义/替代方式实现此目的:

  1. 使用 stored procedure如该问题的已接受答案中所述:MySQL ON DUPLICATE KEY insert into an audit or log table

  2. 创建 trigger将您的表的每个 INSERT 记录到另一个表中,并在充满“日志”的表中查询任何重复项。

类似于此的东西应该可以工作:

CREATE TABLE insert_logs (
    id int not null
);

delimiter |
CREATE TRIGGER insert_logs_trigger BEFORE INSERT ON your_table
    FOR EACH ROW BEGIN
        INSERT INTO insert_logs SET id = NEW.id;
    END;
|

要获得表中重复项的列表,您可以:

SELECT id FROM insert_logs HAVING COUNT(id) > 1 GROUP BY id;

关于MySql - 关于重复键插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11940506/

相关文章:

java - 是否可以通过上传/通过上传的文件来攻击服务器?

java - 查询正在运行的容器内的数据库

c# - 使用 AutoMapper 进行映射时,是否有一种有效的方法仅保留子集合的单个元素?

c# - .NET Core 中的原始 SQL

php - 使用foreach循环检索记录,如果找不到则插入到表中

php - MySql查询错误(二)

mysql - Laravel 5 无法从 mysql 数据库获取更新数据

sql - 将 3 个步骤合并到一个 SQL 脚本中

function - LLVM 插入内在函数 Cos

sql - 在子查询中插入具有多个值的表