如何为 MySQL 查询中的所有记录生成唯一的 UUID?

How can I generate a unique UUID for all my records on a MySQL query?

我有一个非常简单的 MySQL table 我正在查询。但是,我想 return 为查询中的每个结果行生成 UUID

我是运行 SELECT 声明:

SELECT REPLACE(UUID(),'-','') as id, employee_id, store_id FROM employee_store;

我看到了结果:

id                                 employee_id  store_id
617de8d416e711ea91c552540047b61e   123          4
617de8d416e711ea91c552540047b61e   134          3
617de8d416e711ea91c552540047b61e   43           3
617de8d416e711ea91c552540047b61e   333          1
617de8d416e711ea91c552540047b61e   544          2

我原以为所有 id 字段都不同。

如何执行 SELECT 并让查询为每个结果行生成唯一的 UUID?

当我 运行 你在 this MySQL 5.7 DB Fiddle 中的查询时,它给了我:

id                               | employee_id | store_id
:------------------------------- | ----------: | -------:
c6c54bdd16e911ea976c00163ec888bf |         123 |        4
c6c54c1e16e911ea976c00163ec888bf |         134 |        3
c6c54c3116e911ea976c00163ec888bf |          43 |        3
c6c54c3f16e911ea976c00163ec888bf |         333 |        1
c6c54c4c16e911ea976c00163ec888bf |         544 |        2

如果仔细查看结果,您会发现 UUID 不同的。这在检查前 8 个字符时更容易看到

c6c54bdd
c6c54c1e
c6c54c31
c6c54c3f
c6c54c4c

运行 MySQL 5.6 和 8.0 中的相同查询,我得到的 UUID 也略有不同。所以我假设您确实得到了相同类型的结果(与示例数据中显示的结果不同)。

如果你想生成更明显不同的id,你可以散列它们,如下:

SELECT REPLACE(MD5(UUID()),'-','') as id, employee_id, store_id FROM employee_store;
id                               | employee_id | store_id
:------------------------------- | ----------: | -------:
e1ae8f1d052c0132d1c111d221acd464 |         123 |        4
91ea4f39657204a4c53ed9f1da53c89b |         134 |        3
9b66fe7957723cf1f581b81d892e798e |          43 |        3
a1240b02775fcc3fca0e1739a27a39fe |         333 |        1
8672b220f28050f9c8680248ded4ccd4 |         544 |        2