<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></title> 
<link>https://jackxiang.com/index.php</link> 
<description><![CDATA[赢在IT，Playin' with IT,Focus on Killer Application,Marketing Meets Technology.]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></copyright>
<item>
<link>https://jackxiang.com/post//</link>
<title><![CDATA[MySQL UUID函数的详解]]></title> 
<author>jack &lt;xdy108@126.com&gt;</author>
<category><![CDATA[数据库技术]]></category>
<pubDate>Fri, 10 May 2013 03:55:09 +0000</pubDate> 
<guid>https://jackxiang.com/post//</guid> 
<description>
<![CDATA[ 
	背景：在一些做唯一值时，有些视频网站用UUID来做视频的唯一值，所以这个是怎么保持不重复的哩？<br/><br/><br/>MySQL UUID函数的详解<br/>MySQL中可以有二类用于生成唯一值性质的工具：UUID()函数和自增序列，那么二者有何区别呢？我们就此对比下各自的特性及异同点：<br/>l&nbsp;&nbsp;都可以实现生成唯一值的功能；<br/>l&nbsp;&nbsp;UUID是可以生成时间、空间上都独一无二的值；自增序列只能生成基于表内的唯<br/>一值，且需要搭配使其为唯一的主键或唯一索引；<br/>l&nbsp;&nbsp;实现方式不一样，UUID是随机+规则组合而成的，而自增序列是控制一个值逐步增长的；<br/>l&nbsp;&nbsp;UUID产生的是字符串类型值，固定长度为：36个字符，而自增序列产生的是整数类型值，长度由字段定义属性决定；<br/> <br/>接下来，详细讲解下UUID()函数产生的值：<br/>oot@localhost : (none) 06:09:40&gt; SELECT UUID(),UUID(),LENGTH(UUID()),CHAR_LENGTH(UUID())&#92;G<br/>*************************** 1. row ***************************<br/>UUID(): de7ee638-4322-11e0-85ab-842b2b4a7e75<br/>UUID(): de7ee642-4322-11e0-85ab-842b2b4a7e75<br/>LENGTH(UUID()): 36<br/>CHAR_LENGTH(UUID()): 36<br/>1 row in set (0.00 sec)<br/> <br/>从上面的执行结果部分的信息看：<br/>l&nbsp;&nbsp;同一个SQL语句中，多处调用UUID()函数得到的值不相同；<br/>l&nbsp;&nbsp;得到的随机值由5个部分组成，且分隔符位为：中划线；<br/>l&nbsp;&nbsp;多次调用或执行得到的后2组值相同，若把mysqld服务器关闭，重新启动之后，会发现第四组的组与未重启前的值发生变化，然后一直不变化，只要重新启动mysqld服务就会发生变化。另外，对于同一台机器，第五组值始终不会发生变化；<br/>l&nbsp;&nbsp;字符个数为：36，占字节数为：36（注：系统默认字符集编码：utf8）；<br/> <br/>针对UUID产生的值组成部分，作如下解说：<br/>l&nbsp;&nbsp;前三组值是时间戳换算过来的；<br/>l&nbsp;&nbsp;第四组值是暂时性保持时间戳的唯一性。例如，使用夏令时；<br/>l&nbsp;&nbsp;第五组值是一个IEE 802的节点标识值，它是空间上唯一的。若后者不可用，则用一个随机数字替换。假如主机没有网卡，或者我们不知道如何在某系统下获得机器地址，则空间唯一性就不能得到保证，即使这杨，出现重复值的机率还是非常小的。<br/> <br/>UUID函数对复制的支持：<br/>UUID函数属于不确定性函数，为此不支持MySQL 复制的STATEMENT模式，但是支持MIXED、ROW二种模式，大家可以设置2组测试模式，以5.1.系列版本为例。<br/>测试基于命令行模式复制：<br/>tx_isolation = REPEATABLE-READ<br/>binlog_format = STATEMENT<br/> <br/>测试基于命令行/混合模式复制：<br/>tx_isolation = REPEATABLE-READ<br/>binlog_format = MIXED&nbsp;&nbsp;OR ROW<br/> <br/>在主服务器上执行同一个SQL语句：<br/>INSERT INTO&nbsp;&nbsp;test_uuid(username) VALUES(UUID());<br/>然后再比对主从服务器上表中存储的值，会发现基于命令行模式的：主从不一致，基于行/混合模式的：主从数据时一致；<br/> <br/>建议：在复制模式下，需要用到UUID()函数，则一定要使用基于行/混合模式复制方式。<br/>名词解释：<br/>对于输入参数相同，且同一时间执行或一个SQL中多处调用，而得到不同值得函数，我们就称其为：不确定性函数。<br/>备注：<br/>在MySQL 5.1.*及更高版本有一个变种的UUID()函数，名称：UUID_SHORT()，生成一个64位无符号的整数，例如：<br/>root@localhost : (none) 02:46:42&gt; SELECT UUID_SHORT()&#92;G<br/>*************************** 1. row ***************************<br/>UUID_SHORT(): 6218676250261585921<br/>1 row in set (0.00 sec)<br/> <br/>后续加注：<br/>UUID()函数产生的值，并不适合作为InnoDB引擎表的主键，至于详细的原因，请阅读文章InnoDB引擎表的主键选型[http://www.mysqlops.com/2011/09/10/innodb-primary.html]。<br/><br/>转自：http://www.mysqlops.com/2011/03/01/mysql-uuid.html
]]>
</description>
</item><item>
<link>https://jackxiang.com/post//#blogcomment</link>
<title><![CDATA[[评论] MySQL UUID函数的详解]]></title> 
<author> &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate> 
<guid>https://jackxiang.com/post//#blogcomment</guid> 
<description>
<![CDATA[ 
	
]]>
</description>
</item>
</channel>
</rss>