全球主机交流论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

CeraNetworks网络延迟测速工具IP归属甄别会员请立即修改密码
查看: 1479|回复: 26

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

[复制链接]
发表于 2022-5-1 18:53:45 | 显示全部楼层 |阅读模式
用火车采集数据库发布,sql语句时这样的:

INSERT INTO wp_posts (post_title,post_content) VALUES ('[标签:标题]','[标签:内容]')
INSERT INTO wp_term_relationships (object_id,term_taxonomy_id) VALUES ('[文章编号:wp_posts]',[termid变量])

如果开启多线程发布,
会不会导致第二条语句中的post的自增id,跟第一条语句对不上?

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

多线程插入的话,顺序是不是就混乱了?
发表于 2022-5-1 19:37:36 | 显示全部楼层
在多用户交替插入数据的情况下max(id)显然不能用。这时就该使用LAST_INSERT_ID了,因为LAST_INSERT_ID是基于Connection的,只要每个线程都使用独立的 Connection对象,LAST_INSERT_ID函数将返回该Connection对AUTO_INCREMENT列最新的insert or update 操作生成的第一个record的ID。这个值不能被其它客户端(Connection)影响,保证了你能够找回自己的 ID 而不用担心其它客户端的活动,而且不需要加锁。使用单INSERT语句插入多条记录, LAST_INSERT_ID返回一个列表

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

点评

这个正解  发表于 2022-5-1 19:56
发表于 2022-5-1 19:04:22 | 显示全部楼层
那你就别获取上一条自增ID, 获取这个执行结果的结果集然后拿ID就行!
 楼主| 发表于 2022-5-1 19:11:33 | 显示全部楼层
Salta 发表于 2022-5-1 19:04
那你就别获取上一条自增ID, 获取这个执行结果的结果集然后拿ID就行!

啊没懂。。。
怎么拿结果集的ID啊?
发表于 2022-5-1 19:34:08 | 显示全部楼层
igoogle 发表于 2022-5-1 19:11
啊没懂。。。
怎么拿结果集的ID啊?

https://www.runoob.com/php/func-mysqli-fetch-array.html
发表于 2022-5-1 19:47:09 | 显示全部楼层
mysql不是有自增的设置嘛,设置好后不需要填写ID字段,且mysql是单线程执行的,不用担心冲突
 楼主| 发表于 2022-5-1 20:03:28 | 显示全部楼层
nnt 发表于 2022-5-1 19:47
mysql不是有自增的设置嘛,设置好后不需要填写ID字段,且mysql是单线程执行的,不用担心冲突  ...

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

mysql只是在写阶段是单线程独占的吧,两条insert之间,也可能被其它线程插队插入的吧。。
发表于 2022-5-1 20:35:04 | 显示全部楼层
igoogle 发表于 2022-5-1 20:03
怎么设置啊大佬,wordpress不同表就是靠自增id来关联的啊。。

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

mysql有锁机制,创建表的时候主键交给mysql自增就可以了,没必要自己控制主键
发表于 2022-5-1 20:47:56 | 显示全部楼层
创建表的时候主键交给mysql自增就可以了
发表于 2022-5-1 21:28:29 来自手机 | 显示全部楼层
自增的id直接交给数据库处理就行了吧,插入时候自己不需要填写
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|全球主机交流论坛

GMT+8, 2026-5-11 07:39 , Processed in 0.075481 second(s), 14 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表