我将在 Vertica 数据库中创建一些表,我必须在该表上提供全局唯一标识符来唯一标识每一行。请建议怎么做?
问问题
1049 次
2 回答
0
请参考文档:
递增值对象的类型
- 命名序列是按升序或降序生成唯一数字的数据库对象。当应用程序需要表或表达式中的唯一标识符时,它们最常使用。一旦命名序列返回一个值,它就再也不会返回相同的值。命名序列是独立的对象,虽然您可以在表中使用它们的值,但它们并不从属于它们。
- 自动递增列值:仅适用于数字列类型的序列。当向表中添加新行时,自动递增序列会自动为该列分配下一个递增序列值。
- 标识列:仅可用于数字列类型的序列。
于 2014-11-25T08:50:30.180 回答
0
您正在寻找一个命名序列。您可以对多个表使用相同的序列:
-- 2 tables...
CREATE TABLE tst (id INT, value varchar(10));
CREATE TABLE tst2 (id INT, value varchar(10));
-- 1 sequence...
CREATE SEQUENCE tst_seq;
-- ... said sequence is used by both tables
ALTER TABLE tst ALTER COLUMN id set default NEXTVAL('tst_seq');
ALTER TABLE tst2 ALTER COLUMN id set default NEXTVAL('tst_seq');
-- testing...
INSERT INTO tst (value) VALUES ('tst');
INSERT INTO tst2 (value) VALUES ('tst2');
-- success!
=> SELECT * FROM tst;
id | value
----+---------
1 | tst
(1 row)
=> SELECT * FROM tst2;
id | value
----+----------
2 | tst2
(1 row)
那么NEXTVAL('named_sequence')
,这里用在建表的时候,就相当于NEWID()
你要找的了。
于 2014-11-25T11:49:11.143 回答