2012-10-15 25 views
0

比方說在我的訂單表中的最後一行是如何保證併發線程不會在MYSQL中獲得相同的值?

Order_ID  Product 
    555   Apple 

我怎樣才能確保2項目在準確的時間發生的事情不會得到相同的同在Order_ID即556的下一個訂單,因爲這是發生了什麼我。我的表使用INNODB。

其實Order_ID是一個自動增加的字段。我使用Show Table Status查詢並使用[Auto-increment]獲取下一個Order_iD。有什麼建議麼?

+0

在MyISAM中使用表鎖和在InnoDB中鎖行 –

+0

默認情況下INNODB不是行鎖嗎? –

+0

不,你必須執行它閱讀http://dev.mysql.com/doc/refman/5.0/en/innodb-locking-reads.html –

回答

1

AUTO_INCREMENT屬性定義Order_ID列,讓MySQL的賦值爲你(你然後檢索通過詢問的last_insert_id司機成功插入後):

ALTER TABLE orders MOFIFY Order_ID BIGINT UNSIGNED NOT NULL AUTO_INCREMENT; 

然後,插入記錄你根本不提供Order_ID值,它會自動分配:

INSERT INTO orders (Product) VALUES ('Apple'); 
+0

這將只適用於當id是一個整數值 –

+1

@wisdom:哪個確實這是在問題中。 – eggyal

+0

@wisdom我認爲,order_ID這是一個整數值,也可以結合整數+東西來保持唯一ID – jcho360

1

我相信你AR E「硬編碼」的ORDER_ID + 1 ...

請您表中使用AUTO_INCREMENT,它會向你保證它不會是在Order_ID重複

http://dev.mysql.com/doc/refman/5.0/en/example-auto-increment.html

在你的情況,使副本你表(備份),修改你的表並添加一個auto_increment,然後再次導入

+0

其實在Order_ID是一個自動遞增字段.... ???我使用Show Table Status查詢並使用[Auto-increment]獲取下一個Order_iD。有什麼建議麼? –

+0

@ManishPradhan:你可以嘗試閱讀的手冊,其中兩個jcho360和我在我們的答案鏈接... – eggyal

+0

@ManishPradhan如果你有一個自動遞增字段,則'last_insert_id'是所有你需要 –

相關問題