同一表中的MySQL同时插入:如何操作?

5

首先,我的问题与这个没有任何关系。

当查询MySQL数据库以进行插入操作时:假设几个用户尝试在相同的时间向同一个数据库表中插入行:MySQL RDBMS是否会在一个插入正在进行时锁定插入过程?还是允许多个同时进行的插入?

我提出这个问题是因为我正在使用时间戳为用户插入的图像命名。然而,时间戳使用秒数。所以如果50个用户在同一秒钟内插入图像:MySQL会如何处理它们?我会得到50张具有相同名称的图像吗?


2
另请参阅dev.mysql.com关于并发插入的链接:http://dev.mysql.com/doc/refman/5.0/en/concurrent-inserts.html - Mark Silverberg
3
有点不清楚你在问什么。你能详细说明你可能正在担心的是什么吗?是的,多个进程可以同时向一张表中插入数据,没有问题。 - deceze
4
如果50个用户在同一秒钟内插入图片,如果文件名没有唯一值约束,就会有50个名称相同的图片,否则第一个插入将成功,其他49个将失败。 - bansi
4
这其实与MySQL无关,那只是无关紧要的细节。即使插入不是同时进行的,而是一个接一个地进行,计算机每秒可以执行数百万个单独的一次性插入操作。你的问题在于你正在使用时间戳作为唯一标识符,但实际上这并不是唯一的。请使用其他东西作为标识符,就这样。 - deceze
2
当然可以。为什么不行呢?只有在文件名列上设置了“UNIQUE”约束条件时,如果文件名不唯一,这种方法才不会起作用,但是如果您设置了该约束条件,那么您已经知道了。 - deceze
显示剩余10条评论
1个回答

1

是的,你(几乎肯定)会得到多个具有相同时间戳的图像。

你可以使用AUTO_INCREMENTUUID()或其他方法来生成唯一值,但时间戳(即使是微秒精度的)并不是唯一的。


1
你能给我一个官方链接来证明你所说的吗?我真的需要准确的信息。 - user3522371
3
我在手册中添加了一些内置方法的链接。至于时间戳的非唯一性 - 我认为这是非常明显的:没有什么可以阻止两个线程同时插入两条记录,这实际上是一个期望的特性。 - Vatev
3
不要考虑“同时”的概念 - 你所说的不是“在同一个CPU周期内”,而是“在同一秒钟内”。我不知道有哪个关系型数据库无法每秒插入2行数据,无论它是否真正并行。 - Basic

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接