次のようなテーブルを作成しています。
CREATE TABLE foobar (id uniqueidentifier, foo text, bar text, PRIMARY KEY (id))
テーブルfoobarにidフィールドの値を挿入または生成する方法は?
SQLite はデータ型をまったくサポートしていないと主張できます。たとえば、SQLite3ではこれを行うことができます。
sqlite> create table test (id wibblewibble primary key);
SQLite は喜んで「データ型」が wibblewibble の列を作成します。SQLite は、uuid、guid、および SuperChicken の「データ型」を持つ列も喜んで作成します。
あなたにとって重要なポイントは、おそらく uid を自動的に生成する方法です。そこでは、SQLite はあまり役に立ちません。
クライアント プログラムに完全に任せることができます。Python でプログラミングしている場合は、uuid モジュールを使用します。ruby にはSecureRandom.uuid 関数があります。他の言語にも同様の機能または回避策があります。
独自の uid 生成関数を C で記述できます (「SQL 関数の作成または再定義」を参照してください)。私はこれを比較的極端なアプローチと呼んでいます。
オンラインでの他の会話は、UUIDとは何かについて広く誤解されていることを示唆しています。UUID は単なる 128 ビットの乱数ではありません。UUID には構造と規則があります。RFC 4122を参照してください。
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
プロジェクトのためにこれが必要でした
select SUBSTR(UUID, 0, 8)||'-'||SUBSTR(UUID,8,4)||'-'||SUBSTR(UUID,12,4)||'-'||SUBSTR(UUID,16)
from (
select lower(hex(randomblob(16))) AS UUID
);
ユーザー定義関数を作成しました (C# アプリケーションで guid/uuid 列の既定値を生成するため)
var connection = new SqliteConnection("DataSource=:memory:");
connection.CreateFunction("newid", Guid.NewGuid);