2013-05-02 38 views
2

我在數據庫中有幾個表,我們假設它們被稱爲table1,表2等。 所有表都有一個帶自動遞增的主鍵列'id'。如何爲多個表中的行實現唯一的自動遞增ID?

在我目前的配置中,當插入到table1中時,生成的id是1. 之後,當插入到table2時,生成的id恰好也是1。

如何在數據庫中的所有表上強制絕對唯一的ID?我想插入到table1時,生成的id爲1,如果之後插入到table2中,生成的id是2?

我在一些機器上使用了mysql服務器,並沒有這個問題,但是當我在本地機器上安裝mysql時,它開始發生。所以我想它一定是某種應用於mysql配置的設置?

謝謝

+0

出於好奇,爲什麼你需要的是什麼? – 2013-05-02 11:28:31

+1

你需要一個id表。不是在每個單獨的表中自動生成id,而是從id表中獲取下一個id,然後在id表中增加值。 – 2013-05-02 11:30:40

+0

@legendinmaking由於應用程序層中的限制 – 2013-05-02 11:30:44

回答

3

您可以使用UUID。

INSERT INTO mytable(id, name) VALUES(SELECT UUID(), 'some data'); 

瞭解更多關於UUID:http://mysqlbackupnet.codeplex.com/wikipage?title=Using%20MySQL%20With%20GUID%20or%20UUID

+0

有沒有一種方法可以通過bigint類型的ID來實現這一點? – 2013-05-02 13:08:28

+0

@MartinAsenov如果你想使用bigint,你可以嘗試邁克爾加德納的建議。使用一個單獨的id表。 – mjb 2013-05-02 13:25:44

+0

謝謝。儘管如此,你的回答絕對正確:) – 2013-05-02 14:13:23

0

您可以創建序列,可以在全球使用。

CREATE SEQUENCE serial 
    INCREMENT 1 
    MINVALUE 0 
    MAXVALUE 200 
    START 364 
    CACHE 1; 

編輯:序列在Postgres的支持,但這樣可以在MySQL通過AUTO_INCREMENT設定值來實現和可以使用LAST_INSERT_ID()。 link

+0

在MySQL中沒有序列 – 2013-05-02 13:03:39

+0

@MartinAsenov:很好指出。我寫就像我爲Postgres寫的一樣。 – NullPointer 2013-05-02 13:16:51

相關問題