2011-11-07 85 views
0

我想有很长的随机数作为我的数据库中的主键。我正在使用mysql和doctrine2。如何获得随机ID的

如何做到这一点的聪明的方式?我是否创建一个mysql存储函数或者我应该创建一个Model函数?

我认为MySQL的效果会更好,因为ID必须是唯一的,这样的工作更接近数据库应该会更好。你怎么看?

+0

你有没有考虑使用GUID? –

+1

考虑使用常规auto_incrementing的标识,并使用一些填充/盐析和'AES_ENCRYPT()'在MySQL生成随机前瞻性密钥。 aes版本看起来像垃圾,但如果需要的话,可以轻松地转回到原始的简单数字键。 –

+0

不知道我的问题的答案是什么,所以我只是分散点。你在哪里都有帮助。看起来我的问题不是,嗯。 – PiTheNumber

回答

2

使用UUID()

+0

UUID是一个不错的主意,但我不喜欢它们的样子;)我认为我和Marc B一起建议使用散列函数分隔生成公共ID。尽管如此,UUID()在那里仍然有用。 Somethink like sha1(UUID()+ primary_id) – PiTheNumber

+0

mySQL是否将UUID内部存储为字符串或字节[16]?只是好奇,因为我使用UUID相当多,但我是一个Postgres家伙.. –

1

我不是MySQL用户,但它令我着迷,你为什么会想添加长数字的压力。

我找遍四周,发现这是在MySQL数据库中的唯一ID字段:

新表:

CREATE TABLE table_name 
(
    id INTEGER AUTO_INCREMENT PRIMARY KEY 
) 

现有表:

ALTER TABLE table_name ADD COLUMN id INTEGER AUTO_INCREMENT UNIQUE KEY; 
+1

自动递增ID的问题是你可以猜到它们。这就是为什么Facebook这样的大型网页对所有对象都使用随机ID的原因。 – PiTheNumber