2013-05-02 78 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

相关问题