mysql 插入重复数据的处理

2019-01-22  本文已影响74人  云龙789

mysql手册
-廖雪峰-mysql

方案一、 insert into table (字段,索引字段) values (字段,索引字段值) on duplicate key update 主键=主键

以上写法是在遇到唯一值的数据可以更新的时候,不要更新,只把主键的值加1
当然了,语法是这个语法,更新的处理可以自己处理,也可以是 id=id 或者 uid=uid+1 自己随便处理
总之,结果是其实没有更新数据,原始数据是不变的,只更新了 key update 后面的字段
前提是要有唯一字段的值,否则是会正常插入数据的
适用于不需要更新,但想知道一共处理了多少条数据的场景,比如抓取数据
当然啦,最好还是不要更新主键,因为你原来对应的主键再加1,可能那个数字会跟下一条数据重复

CREATE TABLE `test` (
    `content` VARCHAR(50) NULL DEFAULT NULL COLLATE 'utf8mb4_unicode_ci',
    `uid` INT(11) UNSIGNED NOT NULL,
    `id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT,
    PRIMARY KEY (`id`),
    UNIQUE INDEX `unique` (`uid`)
)
COLLATE='utf8mb4_unicode_ci'
ENGINE=InnoDB;
执行更新前.png

执行 insert into test (uid,content) values (2,'four') on duplicate key update id=id+1 之后,发现只更新了 id 其他的数据并没有更新

执行更新后

方案二、 replace into

执行前
运行sql replace into test (uid,content) values (3,'three')
执行后
改变字段值

总结

方案三、 insert ignore into 这个语法会忽略报错

方案四,先查询,再做插入还是更新的判断。

四是最不推荐的方案,个人是推荐平时项目中使用 方案二

上一篇 下一篇

猜你喜欢

热点阅读