2010-03-08 52 views
3

这是一个正确的方式在MySQL的id生成?MySQL的id序列

INSERT INTO图片 (PictureId,First_pick,标题,描述,FILE_NAME,Is_Vertical)VALUES
((SELECT MAX(pictureid)+1图片),0,?,?,?,?)

我的意思是如果保证PictureId在这个查询由多个线程运行时是唯一的?

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

问候,米哈尔

回答

3

你通常会使用一个AUTO_INCREMENT字段会照顾那些东西给你:Manual

但问题是好不过,我想听到从一个深刻的答案mySQL专家就此。以所描述的方式做它有多可靠?

+0

谢谢。我知道AUTO_INCREMENT,但我宁愿不修改表结构。 – 2010-03-08 10:19:27

0

如果你真的不能使用AUTO_INCREMENT,那么你应该锁定表格进行写入。

+0

但是,执行内部SELECT时,MySQL是否可以执行一些索引锁定?这些查询在一个事务中执行。 (我使用InnoDB) – 2010-03-08 10:25:48

2

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