如果是,则在SQLITE中是否存在UID数据类型,然后如何为其生成值

时间:2012-04-11 11:05:04

标签: sqlite uid

我正在创建这样的表:

CREATE TABLE foobar (id uniqueidentifier, foo text, bar text, PRIMARY  KEY (id))

如何在表foobar中插入或生成id字段的值?

5 个答案:

答案 0 :(得分:54)

你可以说SQLite根本不支持数据 types 。例如,在SQLite3中,您可以执行此操作。

sqlite> create table test (id wibblewibble primary key);

SQLite很乐意创建一个包含“数据类型”wibblewibble的列。 SQLite还将愉快地使用“数据类型”uuid,guid和SuperChicken创建列。

关键是你可能会自动生成一个uid。 SQLite对你帮助不大。

您可以将其完全留给客户端程序。如果您使用python进行编程,请使用uuid module。在红宝石中,你有SecureRandom.uuid function。其他语言也有类似的功能或解决方法。

你可以在C中编写自己的uid生成函数。(参见Create or Redefine SQL Functions。)我称之为相对极端的方法。

您可以将其存储为binarytext格式。


其他在线对话表明,人们普遍存在对UUID 的误解。 UUID不仅仅是128位随机数。 UUID具有结构和规则。请参阅RFC 4122

答案 1 :(得分:21)

Benjamin Berry的答案不对 - 它会产生格式错误的UUID - 但它显示了一种有趣的技术,使用子选择生成随机性,然后从中选择子串。这是我确认的类似的东西:

select substr(u,1,8)||'-'||substr(u,9,4)||'-4'||substr(u,13,3)||
  '-'||v||substr(u,17,3)||'-'||substr(u,21,12) from (
    select lower(hex(randomblob(16))) as u, substr('89ab',abs(random()) % 4 + 1, 1) as v);

一些示例输出:

c71122df-18e4-4a78-a446-fbf7b8f2969b
61e75f87-978b-4d9e-b587-bedcc2d23898
30eee0fa-2ff2-4ff5-b8ef-f99378272999

答案 2 :(得分:14)

这是类似的东西,可以直接用作表达式:

var loginButton = new Button
{
    BackgroundColor = Color.FromHex("689F38"),
    TextColor = Color.White,
    HeightRequest = 46,
    Text = "Log in",
    FontAttributes = FontAttributes.Bold,
    FontSize = 18,
    Margin = margin
};
例如,

作为列的默认值传递:

lower(hex(randomblob(4))) || '-' || lower(hex(randomblob(2))) || '-4' || substr(lower(hex(randomblob(2))),2) || '-' || substr('89ab',abs(random()) % 4 + 1, 1) || substr(lower(hex(randomblob(2))),2) || '-' || lower(hex(randomblob(6)))

答案 3 :(得分:3)

项目需要这个

select SUBSTR(UUID, 0, 8)||'-'||SUBSTR(UUID,8,4)||'-'||SUBSTR(UUID,12,4)||'-'||SUBSTR(UUID,16)
from (
select lower(hex(randomblob(16))) AS UUID 
);

答案 4 :(得分:-1)

我创建了一个用户定义的函数(以在我的C#应用​​程序中为guid / uuid列生成默认值)

var connection = new SqliteConnection("DataSource=:memory:");
connection.CreateFunction("newid", Guid.NewGuid);