我正在创建这样的表:
CREATE TABLE foobar (id uniqueidentifier, foo text, bar text, PRIMARY KEY (id))
如何在表foobar中插入或生成id字段的值?
答案 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。)我称之为相对极端的方法。
其他在线对话表明,人们普遍存在对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);