3

这是在 MySQL 中生成 id 的正确方法吗?

插入图片(PictureId,First_pick,Title,Description,File_Name,Is_Vertical)VALUES
((SELECT max(pictureid)+1 FROM Picture),0,?,?,?,?)

我的意思是,当这个查询由许多线程运行时,是否保证 PictureId 是唯一的?

我无法修改表结构。我应该使用任何特定的锁、索引或事务隔离级别吗?

问候, 迈克尔

4

3 回答 3

3

您通常会使用一个AUTO_INCREMENT字段来为您处理这些事情:Manual

但是这个问题还是不错的,我想听听mySQL专家对此的深入回答。以所描述的方式进行操作有多可靠?

于 2010-03-08T10:17:18.060 回答
2

除非您已充分锁定表 - 这可能会通过阻止其他线程访问它而导致问题 - 如果多个线程尝试同时插入记录,您提出的方法将容易受到竞争条件的影响。

于 2010-03-08T10:29:20.960 回答
0

如果您真的不能使用 AUTO_INCREMENT,那么您绝对应该锁定表以进行写入。

于 2010-03-08T10:22:40.003 回答