Can we use Guid as a Primary Key in Sqlite Database

被刻印的时光 ゝ 提交于 2019-12-17 22:18:37

问题


Is is possible to use GUID as primary Keys in SQLITE Database?If Possible which datatype can be used?


回答1:


SQLite itself does not support GUID as internal type.

Except that, it does! (sort of). Remember, in SQLite any string can be used as type name, and that includes GUID or UUID (read more about SQLite datatypes).

According to those rules, GUID type has affinity NONE, which is the same as for BLOB fields. With this in mind, you can create column of GUID type, and use following rules to access it:

  • Store it as string like X'01020304050607080910111213141516' (X notation is used to represent 16 byte BLOB value). To insert, use:

    INSERT INTO mytable (uuid)
    VALUES (X'01020304050607080910111213141516');
    
  • Read it as 16-byte BLOB. quote(uuid) can be used to format output using X notation:

    SELECT quote(uuid)
    FROM mytable
    

Such column can be also used as primary key. Unfortunately, there is no AUTOINCREMENT functionality like it exists for integer primary keys - you will have to handle it yourself. You can use something as simple as randomblob(16) for that, but it is not quite UUID as defined by standard.

Confusingly, you can also store text representation of UUID in the same field (SQLite won't stop you from doing that), but it will take at least 2x more space: BLOB is 16 bytes, UUID as text is at least 32 bytes.




回答2:


sqlite3 does not have a native UUID 128-bit format, per se.

However, GUIDs can be used as keys in SQLite as either a TEXT or a binary BLOB representation.

Based on the performance numbers posted in answer to a similar question, both binary and string UUIDs can be efficient in SQLite for Create and Query when indexed.

see table in: https://stackoverflow.com/a/11337522/3103448

SQLite can genarate either BLOB or TEXT UUIDs with randomblob(16) and hex(X) For example: lower(hex(randomblob(16)))

With similar index perfomance, a significant trade-off becomes whether a human readable string is preferred to the smaller binary data size.



来源:https://stackoverflow.com/questions/18954130/can-we-use-guid-as-a-primary-key-in-sqlite-database

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!