假设我将用户保存在数据库中,并且希望每个用户都有一个唯一的随机ID(实际上并不是这样,只是一个简单的示例)。当我INSERT用户时,有没有办法插入一个唯一的随机ID?我知道我可以很容易地创建一个自动递增的列,这样每一行都有一个唯一的整数,但是我需要一个专门用于这个系统的随机数。我为新用户插入的标准查询示例:INSERT INTO 'Users' VALUES ('RandomID', 'Bleh', 'Bleh2') (random value here, 1, 2)
INSERT
INSERT INTO 'Users' VALUES ('RandomID', 'Bleh', 'Bleh2') (random value here, 1, 2)
0dxa2lsx1#
我也想知道同样的问题,并在this article中找到了一个有趣的答案:请使用预填充的表格。您可以使用任何方法(例如,尝试在UNIQUE字段中插入随机数,如果该数字不唯一,则静默失败,直到您获得所需的行数)预先创建一个包含n行的表,其中的行具有唯一的随机数。一旦创建了这个表,您就可以100%确定其中的数字是唯一的,您可以简单地按顺序使用它们,并在使用(或不使用)之后丢弃它们。在使用这种方法时,您需要有某种警报系统,当您接近预填充表中的行数限制时,这样您就可以重新生成一组新的值。
2cmtqfgy2#
Sqlite有random(),它返回一个随机整数。但它不一定每次都是唯一的。你可以附加时间戳或row_id来获得唯一的随机数。
random()
row_id
oipij1gg3#
基于this documentation for the C API function sqlite3_randomness(),可以通过创建一个虚拟行并强制其主键值为最大可能的ROWID来使表的主键随机化,之后的任何新行都应该是随机的。也就是说,我不知道这种行为是合同规定的还是当前的实现细节。使用风险自担。
sqlite3_randomness()
3条答案
按热度按时间0dxa2lsx1#
我也想知道同样的问题,并在this article中找到了一个有趣的答案:请使用预填充的表格。
您可以使用任何方法(例如,尝试在UNIQUE字段中插入随机数,如果该数字不唯一,则静默失败,直到您获得所需的行数)预先创建一个包含n行的表,其中的行具有唯一的随机数。
一旦创建了这个表,您就可以100%确定其中的数字是唯一的,您可以简单地按顺序使用它们,并在使用(或不使用)之后丢弃它们。
在使用这种方法时,您需要有某种警报系统,当您接近预填充表中的行数限制时,这样您就可以重新生成一组新的值。
2cmtqfgy2#
Sqlite有
random()
,它返回一个随机整数。但它不一定每次都是唯一的。你可以附加时间戳或row_id
来获得唯一的随机数。oipij1gg3#
基于this documentation for the C API function
sqlite3_randomness()
,可以通过创建一个虚拟行并强制其主键值为最大可能的ROWID来使表的主键随机化,之后的任何新行都应该是随机的。也就是说,我不知道这种行为是合同规定的还是当前的实现细节。使用风险自担。