2009-09-07 17 views
1

我想创建一个自动递增函数,该函数允许我在多个表的指定列中保持唯一性。有助于在mysql中创建自定义自动递增函数

据我所知,这是不支持在MySQL的标准功能下,但似乎可以通过手工完成。有人能指出我正确的方向吗?

谢谢

回答

1

您有几个选择。一个,你可以使id为一个UUID(一个36+ varchar字段),并使用MySQL的UUID()函数。另一种选择是使用表格作为序列生成表的一种,使您可以使用auto_increment功能,并且只需使用在此表中作为关键字在其他位置插入时生成的任何内容。

就我个人而言,我会选择一个UUID,因为这是拥有全球唯一标识符的常见方式。一句警告:你可能更适合用客户端语言生成这些UID,而不是使用MySQL的实现。

0

将列(ID)设置为primary/unique和auto_increment有什么问题?

ps:此外,如果您需要多个表格之间的唯一性,您可能是在做一些不正确的事情。

+0

跨多个表使用的唯一性是不是我唯一的选择,但我宁愿它在合并两个表,并添加类型列。另外,这两个表包含两种信息的不同数据。合并数据集会导致多余的空值。 – dittle 2009-09-07 23:02:12

+0

我仍然不明白为什么你不能为每个子表使用主ID的主表。这就是为什么我们调用mysql关系。 – dusoft 2009-09-08 08:23:40

+0

我想这可以做到,如果我使用触发器来生成辅助表中的值。不过,将它全部在一个函数中处理将是很好的。 – dittle 2009-09-08 21:07:53

0

认为这是可以这样的

delimiter $$ 
CREATE PROCEDURE myProc() 
BEGIN 
DECLARE mid INT; 
START TRANSACTION; 
select MAX(id) + 1 INTO mid ( SELECT id FROM tbl1 UNION ALL SELECT id from tbl2 ...) tbls; 
INSERT INTO <somt_tbl> VALUES (mid, ...); 
COMMIT; 
END$$ 
+1

@Paul Svirin:我建议将这个签名行添加到你的个人资料中。 SO的标准做法是仅提供有助于人们解决问题的链接。无耻的自我插头是不鼓励的,没有人像你一样使用签名线。 – RSolberg 2009-09-15 15:15:49