这是在 MySQL 中生成 id 的正确方法吗?
插入图片(PictureId,First_pick,Title,Description,File_Name,Is_Vertical)VALUES
((SELECT max(pictureid)+1 FROM Picture),0,?,?,?,?)
我的意思是,当这个查询由许多线程运行时,是否保证 PictureId 是唯一的?
我无法修改表结构。我应该使用任何特定的锁、索引或事务隔离级别吗?
问候, 迈克尔
这是在 MySQL 中生成 id 的正确方法吗?
插入图片(PictureId,First_pick,Title,Description,File_Name,Is_Vertical)VALUES
((SELECT max(pictureid)+1 FROM Picture),0,?,?,?,?)
我的意思是,当这个查询由许多线程运行时,是否保证 PictureId 是唯一的?
我无法修改表结构。我应该使用任何特定的锁、索引或事务隔离级别吗?
问候, 迈克尔
您通常会使用一个AUTO_INCREMENT
字段来为您处理这些事情:Manual
但是这个问题还是不错的,我想听听mySQL专家对此的深入回答。以所描述的方式进行操作有多可靠?
除非您已充分锁定表 - 这可能会通过阻止其他线程访问它而导致问题 - 如果多个线程尝试同时插入记录,您提出的方法将容易受到竞争条件的影响。
如果您真的不能使用 AUTO_INCREMENT,那么您绝对应该锁定表以进行写入。