SQL数据库列自动生成编号?

结论: 清理表会清除数据表并重置标识值。
DBCC CHECKIDENS存储的是标识值,请注意数据类型和取值范围。
IDENTITYCOL 关键字保存查询中标识列的位置。

postgresql生成随机id

UUID 方法是最可靠的。

pg_random_uuid() by pgcrypto,直接使用。
只需安装扩展即可。
如果不存在则创建扩展 pgrebase64 uuid;
uuid-ossp 的 uuid_generate_v4 () 是自带的。
创建表时直接使用默认值。
用户创建表(id UUID 主键默认 uuid_generate_v4 (),名称 VARCHAR(1 00));
不要使用自定义函数。
效率低下。
分布式场景可能会发生冲突。

谨慎使用其他方法。
操作系统命令在所有平台上都有问题。
设备文件处理比较复杂。

只需选择 pg_random_uuid() 或 uuid_generate_v4 ()。

电商系统中的 ID 是如何生成的?

记得有一次,我在电商平台上买了一件衣服。
下单后,系统自动生成订单号。
订单号是一长串数字。
我当时就在想,这一串数字是怎么来的呢?后来查了一下,发现电商平台常用的ID生成方式有很多。

比如我前面提到的数据库是自动递增的,就像我们小时候用的计数器每次下单就加一一样。
这种方法的优点是简单,但缺点也很明显。
如果电商平台有多个数据库节点,生成的ID可能会重复,这在分布式系统中是不可行的。

另一个是UUID,听起来很高级,就像我们的身份证号一样,全世界都是唯一的。
但这种方法的缺点是很长,而且没有顺序。
它可能不适合数据库搜索。

再比如时间戳,比较容易理解,记录了下单的具体时间。
但如果系统并发量较高,可能会同时产生多个订单号。

我还了解到现在很多电商平台都在使用SnowFlake算法。
这个算法很有趣。
它将时间戳、车号和序列号结合在一起,既保证了ID的唯一性,又保持了ID的规律性。
然而,这种算法也有缺点,比如依赖机器时钟。
如果时钟设置向后,可能会创建重复的 ID。

想到这里,我突然想到,如果电商平台能够结合多种ID生成策略,比如高峰期使用SnowFlake算法,非高峰期使用时间戳,是不是可以更好地平衡性能和安全性呢?但这涉及系统复杂性和运维成本。
值得吗?