vps交流

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


用火车采集数据库发布,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。

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

在多用户交替插入数据的情况下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函数 即可!  这个函数执行效率更高

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

Salta 发表于 2022-5-1 19:04
那你就别获取上一条自增ID, 获取这个执行结果的结果集然后拿ID就行!

啊没懂。。。
怎么拿结果集的ID啊?

igoogle 发表于 2022-5-1 19:11
啊没懂。。。
怎么拿结果集的ID啊?

https://www.runoob.com/php/func-mysqli-fetch-array.html

mysql不是有自增的设置嘛,设置好后不需要填写ID字段,且mysql是单线程执行的,不用担心冲突 关于MYSQL多线程插入,自增id的疑问关于MYSQL多线程插入,自增id的疑问

nnt 发表于 2022-5-1 19:47
mysql不是有自增的设置嘛,设置好后不需要填写ID字段,且mysql是单线程执行的,不用担心冲突  …

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

mysql只是在写阶段是单线程独占的吧,两条insert之间,也可能被其它线程插队插入的吧。。

igoogle 发表于 2022-5-1 20:03
怎么设置啊大佬,wordpress不同表就是靠自增id来关联的啊。。

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

mysql有锁机制,创建表的时候主键交给mysql自增就可以了,没必要自己控制主键

创建表的时候主键交给mysql自增就可以了