2013-02-11 64 views
-2

我有大约50k条目,我通过PHP插入到MySQL中。由于该系统允许多个用户同时登录并执行相同的插入数据操作,所以我们假设USER1启动“插入”并且在相同的毫秒内,USER2开始在同一个表中插入数据 - 我很好奇MySQL是否会等待USER1完成处理并处理USER2条目,否则它会同时插入?在PHP中插入大量的行和自动增加ID

因此,遵循该逻辑,USER1的插入ID将从50k到100k从1到50k和USER2,或者在另一方面将它们洗牌?

...如果它会做“洗牌”有没有办法来防止这种情况?

P.S.我知道 - 我可以用user_id添加额外的字段,这样我就可以区分哪个用户做了实际的“输入”,但是在这种情况下,我真的很想保留1-50k的空间用于USER1,50k-100k空间用于USER2。 ...

回答

1

要保留表格并自动为您自动增加id,您应该在开始插入之前使用LOCKLOCK表格。否则,很可能会对id进行“洗牌”。

虽然注意什么也没有,甚至锁定,保证了自动增量ID的连续性。我知道用一个连续的ID来插入块会是一个“很好的接触”,但这不是它们的目的,系统中也没有保证这么做。所以不要依赖它或以任何方式期待它。

+0

但是,如果他确实锁定了表格,USER2的动作会给出错误,不会吗? – 2013-02-11 18:27:28

+0

@Marco不,它只会延迟用户2,直到用户1解锁桌子为止。 (除非用户2明确地想要失败,如果表被锁定或用户2发生超时) – deceze 2013-02-11 18:28:13

+0

感谢您的回复。 – Peter 2013-02-11 18:44:44

1

你不应该在意这一点。
Id是一个唯一创建的标识符,没有特殊含义
无论何时您对此标识符赋予特殊含义,您都将面临灾难。

+0

我知道,但这只是一个“很好的接触”,让一切排序整齐:) – Peter 2013-02-11 18:43:35