我正在创建这样的表:
CREATE TABLE foobar (id uniqueidentifier, foo text, bar text, PRIMARY KEY (id))
Run Code Online (Sandbox Code Playgroud)
如何在表foobar中插入或生成id字段的值?
Mik*_*ll' 55
你可以说SQLite根本不支持数据类型.例如,在SQLite3中,您可以执行此操作.
sqlite> create table test (id wibblewibble primary key);
Run Code Online (Sandbox Code Playgroud)
SQLite很乐意创建一个具有"数据类型"wibblewibble的列.SQLite还将愉快地使用"数据类型"uuid,guid和SuperChicken创建列.
关键是你可能会自动生成一个uid.SQLite对你帮助不大.
您可以将其完全留给客户端程序.如果你在python中编程,请使用uuid模块.在ruby中,您有SecureRandom.uuid函数.其他语言具有类似的功能或解决方法.
您可以在C中编写自己的uid生成函数.(请参阅创建或重新定义SQL函数.)我称之为相对极端的方法.
其他网上对话表明,有大约UUID什么是广泛的误解是.UUID不仅仅是128位随机数.UUID具有结构和规则.请参阅RFC 4122.
Tim*_*ick 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);
Run Code Online (Sandbox Code Playgroud)
一些示例输出:
c71122df-18e4-4a78-a446-fbf7b8f2969b
61e75f87-978b-4d9e-b587-bedcc2d23898
30eee0fa-2ff2-4ff5-b8ef-f99378272999
Run Code Online (Sandbox Code Playgroud)
Mik*_*stö 17
这是类似的东西,可以直接用作表达式:
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)))
Run Code Online (Sandbox Code Playgroud)
例如,作为列的默认值传递:
sqlite> create table "table" (
"id" char(36) default (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)))),
"data" varchar(255), primary key ("id")
);
sqlite> insert into "table" ("data") values ('foo');
sqlite> insert into "table" ("data") values ('bar');
sqlite> select * from "table";
947efcc9-4212-442a-b68c-eb6fbd8a7128|foo
a2c3857b-1eb4-40bd-aed2-6e8d68cc2ab8|bar
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
26411 次 |
最近记录: |