有同学问到MySQL的uuid这个函数。简要介绍一下。
用法
简单看到,这个值,每次执行都是不同的。
生成规则
第1 2 3 段是与时间有关的。
time_low、time_mid、time_high_and_version转成16进制后分别对应第1 2 3段。这个时间是从1582-10-15 00:00:00.00到当前时间的100ns值。(实际上系统只能取到精确us,再乘以10)。所以你短时间连续执行的话,比较可能只有第一个值在改,实际上1 2 3都可能会改变。
第4段是你启动这个MySQL后第一次执行select uuid()时的随机数,每次重启会改变。
第5段是mac值转过来的,同一个机器多实例的一般相同。如果mac值获取不到,则是一个随机值。
所以这个值可以认为是每次执行都不相同。并且不同实例之间也只有极微小概率重复。
Uuid_short
与uuid返回固定长度字符串不同, uuid_short的返回值是一个unsigned long long类型。MySQL启动后第一次执行的值是通过server_id << 56 + server_start_time << 24来初始化。server_start_time单位是秒。 之后每次执行都加1。
由于每次加1都会加全局mutex锁,因此多线程安全,可以当作sequence来用,只是初始值有点大。
Sequence
MySQL没有Oracle那样的sequence,在不是很精确的情况下,可以考虑上面提到的uuid_short。有一些不足:
1、初始值太大,无法重设
2、存在一个问题是每次重启后第一次执行的值不是重启前的那个值+1
3、而且如果重启在1s内完成,可能出现不单调递增(虽然这个可能性微乎其微)。
要满足上面的需求,可以考虑用udf实现。
- 大小: 43.7 KB
- 大小: 19.9 KB
- 大小: 39.6 KB
分享到:
相关推荐
4. **转换和打印**:生成的UUID是二进制形式,需要通过`uuid_unparse()`函数将其转换为字符串形式,便于显示和使用。 标签中的“c获得uuid”、“uuid_c”、“c生成uuid”、“c语言生成uuid”都强调了这是关于C语言...
- `uuid.c`可能包含一个C语言的实现,它可能包含了UUID的生成、解析和比较等操作的函数定义。 - 通过分析`uuid.c`源代码,我们可以深入理解UUID的内部工作原理,如何确保其唯一性,并学习如何在自己的C项目中集成...
可能包含了如`uuid_generate()`用于生成新的UUID,`uuid_parse()`解析字符串形式的UUID,以及`uuid_compare()`比较两个UUID是否相同等函数。这些函数的实现通常基于RFC 4122,这是一个定义UUID生成和格式的标准。 ...
在Java中,UUID是通过java.util.UUID类来生成和操作的。 UUID由16个字节组成,通常用16进制表示,分为5个部分,形式为8-4-4-4-12的32个字符,例如:`123e4567-e89b-12d3-a456-426655440000`。这五个部分分别代表...
MySQL 5.6是数据库管理系统MySQL的一个重要版本,它提供了丰富的内置函数,使得数据库操作更加灵活和高效。这些内置函数涵盖了数学、字符串、日期时间、比较、类型转换等多个领域,对于开发人员和数据库管理员来说是...
这个名为"jasper-1.700.2.uuid_supporth2k_Vc_"的项目,提供了Jasper库的版本1.700.2,特别强调了对UUID(Universally Unique Identifier)的支持以及在Visual C++(Vc)环境下的编译和构建。 JPEG 2000是一种先进...
这段代码中,`create_uuid()`函数首先通过`md5(uniqid(mt_rand(), true))`生成一个基于当前时间戳和随机数的128位字符串,然后根据UUID的格式(32位分为5段,每段之间用'-'分隔)进行切割并拼接。最后,如果提供了...
- 生成UUID通常涉及调用`uuid_generate()`函数,然后使用`uuid_unparse()`将其转换为字符串格式。 - 针对不同版本的UUID,可能需要实现不同的生成逻辑,比如V1需要获取当前时间戳和硬件地址,V4则需要大量随机数。...
MySQL中的Server UUID...总的来说,理解并掌握如何修改MySQL Server UUID是数据库管理的关键技能之一,尤其是对于需要进行数据同步和扩展的环境。通过上述步骤,你可以安全地更新UUID,避免因标识冲突导致的问题。
cpp文件一般包含实现函数和类的方法,而h文件则定义了接口和类的结构。这里,uuid.cpp可能实现了UUID生成器的具体算法,而uuid.h则可能包含了相关类的声明,以便其他模块可以引用和使用。 UUID的设计标准有多种版本...
UUID(Universally Unique Identifier)和GUID(Globally Unique Identifier)是计算机编程中用于标识唯一对象的128位数字。在Windows系统中,UUID和GUID通常被互换使用,尽管在技术上它们存在微小差异。UUID是开放...
在MySQL中,UUID(Universally Unique Identifier)是一种广泛使用的全局唯一标识符,通常表现为36个字符...这样,当你需要在MySQL中存储和检索UUID时,就可以方便地利用这些自定义函数,提高数据库操作的效率和性能。
16位UUID是一种通用唯一标识符,用于标识蓝牙设备中的服务、特征和特征描述符。它是一个16位的二进制数字,通常用十六进制表示法表示。16位UUID是一种广泛使用的标识符,在蓝牙技术中扮演着重要角色。 蓝牙技术的...
ACPI Device Properties UUID For _DSD The specification for _DSD, (Device Specific Data) as a way to annotate devices with platform specific information.
- 编写自定义脚本:由于Cocos Creator没有提供直接刷新文件夹内所有资源UUID的功能,开发者通常会利用Cocos Creator的API和命令行工具来编写自定义脚本,遍历指定文件夹下的所有资源,调用相应API进行UUID的刷新。...
直接通过 dbo.[FunGetUUID32](NEWID())即可获取到32位UUID,非常简单方便。
极路由1s和1没法获取uuid,需要刷本固件才能通过 http://www.hiwifi.wtf/ 这个网站开启临时ssh,刷入breed不死引导系统,后续就可以随便刷固件了,不用担心变砖了
uuid_random $uuid_random ; uuid_time $uuid_time ; uuid_time_safe $uuid_time_safe ; set $not_empty_var "not empty" ; uuid $not_empty_var ; uuid_random $not_empty_var ; uuid_time $not_empty_var ; uuid_...