数据库如何生成这样特征的ID?

PostgreSQL中我们以创建一个表如下:

CREATE TABLE COMPANY(
   ID INT PRIMARY KEY     NOT NULL,
   NAME           TEXT    NOT NULL,
   AGE            INT     NOT NULL,
   ADDRESS        CHAR(50),
   SALARY         REAL
);

但是这个ID是纯数字自增长的。

我想要这样的ID 请问下如何做呢?
1.前面有固定字符串加上指定长度的自增长数字:

bg-0000000000000001
bg-0000000000000002
bg-0000000000000003
...

2.前面固定字符+指定字长度的随机字母数字:

bg-000857Y3EX
bg-00085ERU8y
...
阅读 2k
2 个回答

可以使用 PostgreSQL 的内置数据类型 SERIAL 和字符串连接函数 concat() 来实现该格式的 ID。
示例代码如下:

CREATE TABLE your_table_name (
    id TEXT PRIMARY KEY DEFAULT concat('bg-', LPAD(SERIAL, 16, '0'))
);
CREATE OR REPLACE FUNCTION next_company_id(void) RETURNS text AS $$
DECLARE
  serial_int integer;
  serial_text text;
BEGIN
  serial_int := nextval('company_id_seq');
  serial_value := CAST(serial_int AS text);
  RETURN concat('bg-', LPAD(serial_value, 16, '0'));
END;
$$ LANGUAGE plpgsql;

CREATE SEQUENCE company_id_seq AS integer;
CREATE TABLE COMPANY (
    id TEXT PRIMARY KEY DEFAULT next_company_id()
);
ALTER SEQUENCE company_id_seq OWNED BY COMPANY.id;

参考:
SQL 命令 - CREATE FUNCTION
PostgreSQL 序数类型
其他字符串函数

不建议第2种方案,数据库性能较差
2.前面固定字符+指定字长度的随机字母数字:

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题