2010-03-08 16 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

除非您已充分鎖定表 - 這可能會導致問題阻止其他線程訪問它 - 如果多個線程試圖同時插入記錄,則建議的方法將容易受到競爭條件的影響。