返回顶部
首页 > 资讯 > 数据库 >MySQL的server_uuid获取之uuid()函数和uuid_short()函数
  • 718
分享到

MySQL的server_uuid获取之uuid()函数和uuid_short()函数

2024-04-02 19:04:59 718人浏览 薄情痞子
摘要

1、uuid()函数 String *Item_func_uuid::val_str(String *str)   {  

1、uuid()函数
  1. Mysql> select uuid(),uuid();  
  2. +--------------------------------------+--------------------------------------+  
  3. | uuid()                               | uuid()                               |  
  4. +--------------------------------------+--------------------------------------+  
  5. | 50120c25-d75c-11e7-9484-000c29c9278a | 50120c53-d75c-11e7-9484-000c29c9278a |  
  6. +--------------------------------------+--------------------------------------+  
  7. 1 row in set (0.00 sec)  
  1. String *Item_func_uuid::val_str(String *str)  
  2. {  
  3.     ...  
  4.     Mac\rand get  
  5.     ...  
  6.     uint32 time_low=            (uint32) (tv & 0xFFFFFFFF);  
  7.     uint16 time_mid=            (uint16) ((tv >> 32) & 0xFFFF);  
  8.     uint16 time_hi_and_version= (uint16) ((tv >> 48) | UUID_VERSION);  
  9.     s[8]=s[13]='-';  
  10.     tohex(s, time_low, 8);  
  11.     tohex(s+9, time_mid, 4);  
  12.     tohex(s+14, time_hi_and_version, 4);  
  13.     strmov(s+18, clock_seq_and_node_str);  
  14.     ...  
  15. }  
详细产生uuid的过程,参考上面的函数进行分析。

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值获取不到,则是一个随机值。所以这个值可以认为是每次执行都不相同。并且不同实例之间也只有极微小概率重复。

2、uuid_short()函数

  1. mysql> select uuid_short(),uuid_short();  
  2. +--------------------+--------------------+  
  3. | uuid_short()       | uuid_short()       |  
  4. +--------------------+--------------------+  
  5. | 818004335832072194 | 818004335832072195 |  
  6. +--------------------+--------------------+  
  7. 1 row in set (0.00 sec)  
函数调用过程:
  1. main->init_common_variables()->  
  2.     server_start_time= flush_status_time= my_time(0);  
  3.     //获取server启动时的时间戳  
  1. ulonglong uuid_value;  
  2. main->init_common_variables->item_init->  
  3. void uuid_short_init()  
  4. {  
  5.   uuid_value= ((((ulonglong) server_id) << 56) +   
  6.                (((ulonglong) server_start_time) << 24));  
  7. }  
  1. longlong Item_func_uuid_short::val_int()  
  2. {  
  3.   ulonglong val;  
  4.   mysql_mutex_lock(&LOCK_uuid_generator);  
  5.   val= uuid_value++;  
  6.   mysql_mutex_unlock(&LOCK_uuid_generator);  
  7.   return (longlong) val;  
  8. }  
与uuid()函数返回固定字符串不同,uuid_short()函数返回的是ulonglong类型的值。mysql启动后第一次执行的值通过server_id<<56+server_start_time<<24来初始化,其中
server_start_time是server启动时的时间,单位是秒。之后每次执行该函数都+1

3、server启动时,会自动产生server_uuid
  1. main->init_server_auto_options:处理server_uuid  
  2.     my_load_defaults(fname, groups, &arGC, &argv, NULL)//fname:auto.cnf  
  3.     handle_options(&argc, &argv, auto_options, mysqld_get_one_option);  
  4.     if(uuid){  
  5.         strcpy(server_uuid, uuid);  
  6.     }else{  
  7.         flush= TRUE;  
  8.         generate_server_uuid();  
  9.     }  
  10.     if (flush)  
  11.         DBUG_RETURN(flush_auto_options(fname));  
  12.         //O_CREAT|O_RDWR形式open,即如果没有auto.cnf文件,  
  13.         //则创建一个并将生成的server_uuid写入文件并flush  
  1. generate_server_uuid:  
  2.     func_uuid= new (thd->mem_root) Item_func_uuid();  
  3.     func_uuid->fixed= 1;  
  4.     func_uuid->val_str(&uuid);  
  5.     strncpy(server_uuid, uuid.c_ptr(), UUID_LENGTH);  
其中val_str函数是Item_func_uuid::val_str。server启动时,会从auto.cnf文件中读取,如果没有这个文件,则新创建文件并自动产生server_uuid,写入文件并flush。


您可能感兴趣的文档:

--结束END--

本文标题: MySQL的server_uuid获取之uuid()函数和uuid_short()函数

本文链接: https://lsjlt.com/news/46013.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • MySQL的server_uuid获取之uuid()函数和uuid_short()函数
    1、uuid()函数 String *Item_func_uuid::val_str(String *str)   {   ...
    99+
    2024-04-02
  • MySQL JSON_EXTRACT()、JSON_UNQUOTE() 函数获取JSON串的值
    JSON_EXTRACT()函数作用是读取数据库储存的json值,已key、value的形式获取某个键值 如果json字符串是对象{Object} 1:第一个参数为需要查询的json字段 2:第二个...
    99+
    2023-10-28
    json mysql 数据库
  • MySQL 获取数据库最后的id last_insert_id()函数
    MySQL 获取数据库最后的id last_insert_id()函数,使用MySQL LAST_INSERT_ID函数来获取MySQL生成的最后一个插入ID的值。 1,函数的用法 ...
    99+
    2024-04-02
  • MySQL之函数
    关于函数的说明 概念:类似python中的方法,将一组逻辑语句封装在方法体中,对外暴露方法名 好处: 隐藏了实现细节 提高代码的重用性 调用:select 函数名(实参列表) [from 表] 分类: 单行...
    99+
    2018-12-21
    MySQL之函数
  • 关于mysql取余和取整的函数
    MySQL中整除和取余函数分别为:        1.整除函数:DIV 或者 / / (双斜杠) 使用方法: SELECT 10 DIV 3; -- 返回结果为 3SELECT 10 / / 3; -- 返回结果为 3         2....
    99+
    2023-09-24
    数据库 mysql
  • php 获取请求参数的函数
    在 PHP 中,可以使用 $_GET、$_POST 和 $_REQUEST 来获取请求参数。以下是介绍它们的一些细节: $_GET 用于获取通过 URL 传递的参数,一般用于获取请求方式为 GET ...
    99+
    2023-09-01
    php 开发语言
  • MySQL函数之字符串函数
    目录 1.concat:将两个或多个字符串组合成一个字符串 2.length和char_length函数:以字节和字符获取字符串的长度 3.left:返回具有指定长度的字符串的左边部分 4.right:回具有指定长度的字符串的右边部分 5....
    99+
    2023-09-13
    mysql 数据库
  • mysql获取指定日期函数应用
    下文主要给大家带来mysql获取指定日期函数应用,希望这些内容能够带给大家实际用处,这也是我编辑mysql获取指定日期函数应用这篇文章的主要目的。好了,废话不多说,大家直接看下文吧。获取指定日期当前月的天数...
    99+
    2024-04-02
  • PHP 函数如何获取参数?
    php 函数接收参数有两种方式:按值传递或按引用传递。按值传递将副本传递给函数,对副本的更改不会影响原始值;按引用传递将引传递给函数,对副本的更改会影响原始值。函数参数可以有默认值。 ...
    99+
    2024-04-10
    php 获取参数
  • PHP5和PHP7之间关于获取函数的区别是什么
    本篇内容主要讲解“PHP5和PHP7之间关于获取函数的区别是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“PHP5和PHP7之间关于获取函数的区别是什么”吧!PHP5和PHP7取数组元素作动...
    99+
    2023-06-25
  • PHP5和PHP7之间有哪些关于获取函数的区别
    这篇文章主要讲解了“PHP5和PHP7之间有哪些关于获取函数的区别”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“PHP5和PHP7之间有哪些关于获取函数的区别”吧!在 PHP5 和 PHP7...
    99+
    2023-06-25
  • MySQL数据库之内置函数和自定义函数 function
    目录1、内置函数1.1、字符串函数1.2、时间函数1.3、数学函数1.4、其他函数2、自定义函数2.1、创建函数2.2、查看函数2.3、调用函数2.4、删除函数2.5、注意事项3、函数流程结构案例前言: 函数分为两类:系...
    99+
    2022-06-15
    MySQL数据库 MySQL内置函数 MySQL自定义函数function
  • MySQL数据库之内置函数和自定义函数function
    目录1、内置函数1.1、字符串函数1.2、时间函数1.3、数学函数1.4、其他函数2、自定义函数2.1、创建函数2.2、查看函数2.3、调用函数2.4、删除函数2.5、注意事项3、函...
    99+
    2024-04-02
  • python如何获取函数名
    在python中获取函数名的方法在类内部获取函数名import sysclass testsqawd(object):def hello(self):print('the name of method is ## {}##'.format(...
    99+
    2024-04-02
  • python获取函数注释 __doc__
    使用 help  函数 可以查看 函数的注释内容 但是它也有点"添油加醋" 其实函数的注释被保存在 __doc__属性里面  PS 双下划线 def f(): """这里是f函数""" pass print('====...
    99+
    2023-01-30
    注释 函数 python
  • Go 函数中获取调用者的函数名和文件名及行号
    目录背景runtime.Caller获取调用者的函数名使用示例总结前言: 今天介绍了通过 runtime.Caller 回溯调用栈获取调用者的信息的方法,虽然强大,不过频繁获取...
    99+
    2022-06-07
    GO 调用 函数
  • mysql函数之截取字符串的实现
    目录一、mysql截取字符串函数二、mysql截取字符串的一些栗子mysql索引从1开始 一、mysql截取字符串函数 1、left(str,length) 从左边截取length 2、right(s...
    99+
    2022-08-14
    mysql截取字符串
  • mysql怎么获取当前时间戳函数
    在MySQL中,要获取当前时间戳,您可以使用NOW()函数或者CURRENT_TIMESTAMP函数。以下是如何使用这两个函数的示例...
    99+
    2024-05-21
    mysql
  • Mysql数据库函数之函数的用法小结
    目录函数的使用一. 单行函数:可以理解为向函数传入一个参数,返回一个值。单行函数1.字符串函数(String,StringBuilder)2.数值函数(Math)3.日期和时间函数4.流程函数(IF SWITCH)5.j...
    99+
    2024-04-02
  • MySQL函数和游标之初见
    MySQL函数 基本语法 函数申明要声明返回类型,用returns指定。 函数体中要有返回语句,return 返回值。 函数执行有别与存储过程执行,不需要Call关键字。 定义一个返回时间和uuid拼接字符串的函数 -- 创建函数 CR...
    99+
    2019-11-26
    MySQL函数和游标之初见
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作