关于MYSQL多线程插入,自增id的疑问
侧边栏壁纸
  • 累计撰写 56,740 篇文章
  • 累计收到 0 条评论

关于MYSQL多线程插入,自增id的疑问

James
2022-05-03 / 0 评论 / 52 阅读 / 正在检测是否收录...

用火车采集数据库发布,sql语句时这样的:

INSERTINTOwp_posts(post_title,post_content)VALUES([标签:标题],[标签:内容])

INSERTINTOwp_term_relationships(object_id,term_taxonomy_id)VALUES([文章编号:wp_posts],[termid变量])

如果开启多线程发布,

会不会导致第二条语句中的post的自增id,跟第一条语句对不上?

我理解的是

[文章编号:wp_posts]获取的是最后一次插入post的自增id。

多线程插入的话,顺序是不是就混乱了?


-----------------------------------------------------
网友回复:

在多用户交替插入数据的情况下max(id)显然不能用。这时就该使用LAST_INSERT_ID了,因为LAST_INSERT_ID是基于Connection的,只要每个线程都使用独立的Connection对象,LAST_INSERT_ID函数将返回该Connection对AUTO_INCREMENT列最新的insertorupdate操作生成的第一个record的ID。这个值不能被其它客户端(Connection)影响,保证了你能够找回自己的ID而不用担心其它客户端的活动,而且不需要加锁。使用单INSERT语句插入多条记录,LAST_INSERT_ID返回一个列表

用这个LAST_INSERT_ID函数即可! 这个函数执行效率更高


网友回复:

那你就别获取上一条自增ID,获取这个执行结果的结果集然后拿ID就行!


网友回复:

引用:Salta发表于2022-5-119:04

那你就别获取上一条自增ID,获取这个执行结果的结果集然后拿ID就行!


网友回复:

引用:igoogle发表于2022-5-119:11

啊没懂。。。

怎么拿结果集的ID啊?


网友回复:

mysql不是有自增的设置嘛,设置好后不需要填写ID字段,且mysql是单线程执行的,不用担心冲突


网友回复:

引用:nnt发表于2022-5-119:47

mysql不是有自增的设置嘛,设置好后不需要填写ID字段,且mysql是单线程执行的,不用担心冲突 ...


网友回复:

引用:igoogle发表于2022-5-120:03

怎么设置啊大佬,wordpress不同表就是靠自增id来关联的啊。。

mysql只是在写阶段是单线程独占的吧,两条...


网友回复:

自增的id直接交给数据库处理就行了吧,插入时候自己不需要填写


网友回复:

第一、自增ID用primarykey自增。

第二、LAST_INSERT_ID

第三、id设置uniq,用trycatch来获取maxid




网友回复:

这么简单的问题wp早考虑到了 用wp自带的方法就可以了


网友回复:

引用:Salta发表于2022-5-119:37

在多用户交替插入数据的情况下max(id)显然不能用。这时就该使用LAST_INSERT_ID了,因为LAST_INSERT_ID是基...


网友回复:

引用:cnly1987发表于2022-5-121:32

第一、自增ID用primarykey自增。

第二、LAST_INSERT_ID

第三、id设置uniq,用trycatch来获取maxid


网友回复:

引用:委员发表于2022-5-121:32

这么简单的问题wp早考虑到了 用wp自带的方法就可以了


网友回复:

引用:Salta发表于2022-5-119:37

在多用户交替插入数据的情况下max(id)显然不能用。这时就该使用LAST_INSERT_ID了,因为LAST_INSERT_ID是基...


网友回复:

引用:igoogle发表于2022-5-121:46

感谢大佬解惑,涨姿势了。

还有一点疑问,火车采集使用的系统标签[文章编号:xxx],应该用的就是maxid吧...


网友回复:

引用:蜗牛也是牛发表于2022-5-123:27

作为菜鸟,我看的似懂非懂,但大受震撼


网友回复:

引用:Salta发表于2022-5-119:37

在多用户交替插入数据的情况下max(id)显然不能用。这时就该使用LAST_INSERT_ID了,因为LAST_INSERT_ID是基...


网友回复:

引用:Salta发表于2022-5-119:37

在多用户交替插入数据的情况下max(id)显然不能用。这时就该使用LAST_INSERT_ID了,因为LAST_INSERT_ID是基...


网友回复:

没问题,你这担心多虑了。我前几天刚刚三线程发布,一点问题都没有


网友回复:

引用:chable发表于2022-5-307:03

没问题,你这担心多虑了。我前几天刚刚三线程发布,一点问题都没有


网友回复:

引用:igoogle发表于2022-5-312:26

有问题的,你同时多个任务,发布同一个数据库,多条语句

就会发现出问题了。。

我就遇到了


网友回复:

引用:chable发表于2022-5-312:34

我就是多个任务,每个任务多线程,同时发布,没什么问题。检查过了。

0