我正在为 MariaDB 创建一个代码生成器,以根据给定的 JSON 创建数据库。
在该 JSON 中,还存在一些初始数据。因此,我循环数据并将它们插入数据库。
某些列具有
uuid()
默认值。
这是我的代码将数据插入到这样的表中的结果:
Id,Guid,Key,Order
1,5c52e1db-6809-11ec-982c-0242c0a81003,New,
2,5c530e55-6809-11ec-982c-0242c0a81003,WaitingForBusinessResponse,
3,5c533551-6809-11ec-982c-0242c0a81003,WaitingForUserResponse,
4,5c536433-6809-11ec-982c-0242c0a81003,UnderInvestigation,
5,5c538ba5-6809-11ec-982c-0242c0a81003,Closed,
如您所见,UUID 值彼此“非常非常”接近。该列有唯一索引,因此不允许重复条目。但这些值使得追踪它们变得困难,并且很容易将它们相互混淆。 有办法改变这种行为吗?我想告诉 MariaDB 更随机地创建 UUID。
”,除非你编写自己的 uuid 函数,该函数提供了一种从随机或伪随机数创建 uuid() 的算法,如 RFC 4122 第 4.4 章所述 MariaDB(和 MySQL)的 uuid() 函数是根据 RFC 4122 实现的,但使用创建基于时间的 uuid 的算法(参见第 4.2 章)
由于所有算法(基于名称、基于时间、随机)都提供一个在空间和时间上全局唯一的通用唯一标识符,我真的不明白为什么你想将算法从时间更改为随机。
使用 uuidgen 和 mariadb 基于时间的 uuid:
~$ uuidgen -t;uuidgen -t
a5d3c032-6865-11ec-bd1f-1740cb8be951
a5d42d24-6865-11ec-bd1f-1740cb8be951
~$ mariadb -e"select uuid()\G";mariadb -e"select uuid()\G"
*************************** 1. row ***************************
uuid(): 45aca397-683c-11ec-a913-d83bbf89f2e2
*************************** 1. row ***************************
uuid(): 45ad94dd-683c-11ec-a913-d83bbf89f2e2