生成19位数字Id给bigint

在MySQL数据库中,通常我们会使用bigint类型来存储较大的整数数据,比如超过int类型的范围。如果我们需要生成一个19位数字的Id,并且想要保证其唯一性,可以通过一些方法来实现。

使用UUID

一种常见的方法是使用UUID(Universally Unique Identifier)来生成唯一的Id。UUID是一个128位的数字,通常以32个十六进制数字(8-4-4-4-12)的形式表示,可以保证全球范围内的唯一性。

CREATE TABLE my_table (
    id CHAR(32) PRIMARY KEY
);

INSERT INTO my_table (id) VALUES (REPLACE(UUID(), '-', ''))

这样就可以生成一个32位的UUID,并将其中的-去掉,得到一个不含-的32位字符串作为Id。但是在存储空间上,UUID并不是最优选择,因为它比较长。

生成19位数字Id

如果我们希望生成一个19位数字的Id,并且又想要保证其唯一性,可以使用MySQL中的自增长整数(auto_increment)结合一些计算方法来实现。

我们可以创建一个id_generator表,用于存储自增长的整数值。

CREATE TABLE id_generator (
    id BIGINT AUTO_INCREMENT PRIMARY KEY
);

然后,我们可以通过以下SQL语句来生成一个19位数字Id:

SELECT FLOOR(RAND() * 9) AS a,
       FLOOR(RAND() * 10) AS b,
       FLOOR(RAND() * 10) AS c,
       FLOOR(RAND() * 10) AS d,
       FLOOR(RAND() * 10) AS e,
       FLOOR(RAND() * 10) AS f,
       FLOOR(RAND() * 10) AS g,
       FLOOR(RAND() * 10) AS h,
       FLOOR(RAND() * 10) AS i,
       FLOOR(RAND() * 10) AS j,
       FLOOR(RAND() * 10) AS k,
       FLOOR(RAND() * 10) AS l,
       FLOOR(RAND() * 10) AS m,
       FLOOR(RAND() * 10) AS n,
       FLOOR(RAND() * 10) AS o,
       FLOOR(RAND() * 10) AS p,
       FLOOR(RAND() * 10) AS q,
       FLOOR(RAND() * 10) AS r,
       id
FROM id_generator;

上述SQL语句中,通过FLOOR(RAND() * 10)来生成0-9之间的随机整数,拼接成一个19位数字。

类图

下面是生成19位数字Id给bigint的类图示例:

classDiagram
    IdGenerator <|-- MyTable
    IdGenerator : +id : BIGINT
    MyTable : +id : BIGINT

在这个类图中,IdGenerator类用于生成唯一的Id,而MyTable类则是使用这个Id的表。

通过以上方法,我们可以在MySQL中生成一个19位数字Id,并将其存储到bigint类型的字段中,保证了唯一性和数据完整性。当然,根据实际需求,我们可以根据具体情况选择合适的方法来生成唯一的Id。