|  |      1holajamc      2018-12-26 14:59:25 +08:00 虽然我不懂你说了什么,但是 INSERT 数据难道 ID 不应该自增? | 
|  |      2bestie      2018-12-26 15:03:51 +08:00 不懂你说了什么,插了数据当然会自增,不知道你是怎么判断重复的,重复的跳过就是了 | 
|  |      3Vegetable      2018-12-26 15:28:57 +08:00 我猜是说,判断重复的数据后并灭有插入,但是 ID 却消耗掉了.可能和 on duplicate key update 的问题类似吧. | 
|  |      4xkeyideal      2018-12-26 15:37:41 +08:00 难道爬虫都不过滤重复数据了么,布隆过滤器了解一下 | 
|      6gouchaoer2      2018-12-26 15:43:13 +08:00 用框架就意味着你失去灵活性,就这么简单的任务都无法搞定,所以少用框架 | 
|      7lihongjie0209      2018-12-26 15:43:49 +08:00 @mon3 你数据能设置唯一索引, 你代码过滤不了? 数据库不是代码?? | 
|      8loveCoding      2018-12-26 15:52:09 +08:00 这是业务问题,跟框架没什么关系 | 
|  |      9Mac      2018-12-26 15:55:39 +08:00 你该去好好看看 INSERT 语句 ON DUPLICATE 时的用法了。 | 
|  |      10EvilCult      2018-12-26 15:58:11 +08:00 同意 3 楼.... 是不是写入的时候用的是“ replace into ” 而不是 “ on duplicate key update ” | 
|      11xpresslink      2018-12-26 16:21:11 +08:00 以前用过 scrapy+django+djangoitem  爬到内容直接用 django ORM 入库,每条信息都会有一个唯一索引用识别, 再爬的时候 Foo.objects.get_or_create(defaults__exact='bar', defaults={'defaults': 'baz'}) | 
|      14xpresslink      2018-12-26 16:45:21 +08:00 @xpresslink #11,写错了应该是用 .objects.update_or_create,没有就新建,有就更新。 | 
|      16mon3 OP @xpresslink  表的数据有的不能更新的,所以这个办法不太适合我。。 | 
|      17xpresslink      2018-12-26 16:57:23 +08:00 | 
|      18mon3 OP @xpresslink  有重复数据的话直接丢弃,这步 mysql 自动执行了,但是 ID 也会增长,我需要的是 ID 不增长,数据直接丢。 | 
|  |      21realpg PRO innodb 不重复都会出现跳 ID 事务机制导致的 | 
|      22xpresslink      2018-12-26 17:10:36 +08:00 @mon3  alter table tablename drop column id; alter table tablename add id mediumint(8) not null primary key auto_increment first; | 
|      23xpresslink      2018-12-26 17:11:32 +08:00 我觉得没有必要执念于此。 | 
|  |      25gaius      2018-12-26 17:22:18 +08:00 是自增主键跳了吗,正常,多线程插入就会跳。 | 
|  |      26hikarugo      2018-12-26 17:22:37 +08:00 @gouchaoer2 ??? | 
|      27gouchaoer2      2018-12-26 17:57:41 +08:00 @fyxtc ???!!! | 
|      28tingfang      2018-12-26 18:02:01 +08:00 on duplicate key update 重复是会跳号的。 | 
|  |      29EvilCult      2018-12-26 18:39:19 +08:00 | 
|  |      30rocketman13      2018-12-26 18:48:03 +08:00 看 mysql 日志就可以了,应该是先写入,再删除 | 
|  |      31chinvo      2018-12-26 18:55:08 +08:00 自己实现 UPDATE OR INSERT 啦 如果你用 orm,一般 orm 会提供的 没提供的话也就是查询两次的事,一次查 ID 是否存在,一次插入 /更新数据 | 
|  |      34ooh      2018-12-26 19:46:59 +08:00 lz 是发现主键 ID 不连续吧,MySQL InnoDB 插入数据是先自增主键 ID,然后再写入数据,因为你有唯一键,所以重复的时候插入失败,但是主键 ID 已经自增了,如果你没办法保证插入不重复的数据,那么把 InnoDB 换成 MyISAM 即可 | 
|  |      36Mac      2018-12-26 19:55:36 +08:00 via Android @mon3 哦,我理解题目错了,我以为是出现重复记录。原来是自增跳号。innodb 就是这样的,myisam 没有这个问题。 | 
|  |      37EvilCult      2018-12-26 20:27:03 +08:00 via iPhone @aborigine 等下,看了 34 楼,我发现我好像看错题了…………囧………… 你们说的是 on duplicate update 后再查数据自增 ID 不连续吧…………[手动捂脸] | 
|  |      38chengxiao      2018-12-26 20:45:19 +08:00 加一层 redis set 去重啊 入库前先判断 set 里有没有 有了 pass 没有了 set+1 入库 另外你不要爬一条插一条啊 肯定是到最后一起提交的 | 
|  |      39Nick2VIPUser      2018-12-26 23:51:34 +08:00 很早遇到这个问题,不过我觉得这不算问题,id 只是一个唯一标识而已,跳号其实没有影响; 如果可以的话,在数据爬完之后另外找一个库重新写入一遍也是可以的。 | 
|      40pan404      2018-12-27 09:57:11 +08:00 你是想说数据重复了没清洗掉吧 | 
|      41qaz564172564      2019-01-14 13:06:24 +08:00 去重啊,偷懒的话 url 设为主键不久 ok 了 |