如何在SQLite中插入唯一的随机整数?

ig9co6j1  于 2023-03-03  发布在  SQLite
关注(0)|答案(3)|浏览(257)

假设我将用户保存在数据库中,并且希望每个用户都有一个唯一的随机ID(实际上并不是这样,只是一个简单的示例)。当我INSERT用户时,有没有办法插入一个唯一的随机ID?
我知道我可以很容易地创建一个自动递增的列,这样每一行都有一个唯一的整数,但是我需要一个专门用于这个系统的随机数。
我为新用户插入的标准查询示例:
INSERT INTO 'Users' VALUES ('RandomID', 'Bleh', 'Bleh2') (random value here, 1, 2)

0dxa2lsx

0dxa2lsx1#

我也想知道同样的问题,并在this article中找到了一个有趣的答案:请使用预填充的表格。
您可以使用任何方法(例如,尝试在UNIQUE字段中插入随机数,如果该数字不唯一,则静默失败,直到您获得所需的行数)预先创建一个包含n行的表,其中的行具有唯一的随机数。
一旦创建了这个表,您就可以100%确定其中的数字是唯一的,您可以简单地按顺序使用它们,并在使用(或不使用)之后丢弃它们。
在使用这种方法时,您需要有某种警报系统,当您接近预填充表中的行数限制时,这样您就可以重新生成一组新的值。

2cmtqfgy

2cmtqfgy2#

Sqlite有random(),它返回一个随机整数。但它不一定每次都是唯一的。你可以附加时间戳或row_id来获得唯一的随机数。

oipij1gg

oipij1gg3#

基于this documentation for the C API function sqlite3_randomness(),可以通过创建一个虚拟行并强制其主键值为最大可能的ROWID来使表的主键随机化,之后的任何新行都应该是随机的。
也就是说,我不知道这种行为是合同规定的还是当前的实现细节。使用风险自担。

相关问题