我唯一还算熟悉的数据库就算是MySQL了,大概使用MySQL的人,百分之九九以上的人会使用Autoincrement ID做主键,这是可以理解的,因为MySQL的自增ID效率很高,使用也很方便。那么剩下的百分之一的人使用什么做主键呢?可能是自己做的KeyGenerator,也可能是我们下面要说的UUID。

据说在Oracle的圈子里,如果谁用自增ID做主键是要被鄙视的,主键最自然的选择就是UUID。我不了解Oracle,这些道听途说的结论是否正确不做承诺。

那么我们先看看什么是UUID?简单的说,UUID是指在一台机器上生成的数字,它保证对在同一时空中的所有机器都是唯一的。在UUID的算法中,可能会用到诸如网卡MAC地址,IP,主机名,进程ID等信息以保证其独立性。

如果你的MySQL版本不太老的话,键入 SELECT UUID(); 输出的就是UUID,如下:

mysql> select uuid(); +--------------------------------------+ | uuid()                               | +--------------------------------------+ | 54b4c01f-dce0-102a-a4e0-462c07a00c5e | +--------------------------------------+

现在大家应该对UUID有一个比较直观的认识了,我们来看看UUID的优缺点分别是什么。

优点:

能够保证独立性,程序可以在不同的数据库间迁移,效果不受影响。

保证生成的ID不仅是表独立的,而且是库独立的,这点在你想切分数据库的时候尤为重要。

缺点:

比较占地方,和INT类型相比,存储一个UUID要花费更多的空间。

使用UUID后,URL显得冗长,不够友好。

下面针对上述UUID的缺点说说我的看法,比较占地方这个缺点我不是很在乎,现在最不值钱的就是硬盘了,略过此条缺点无妨。至于说使用UUID后,URL显得不友好,我觉得这多少是你的INT情结造成的惯性思维,其实,和INT类型相比,UUID才是最自然的主键选择,注意,我这里用的是自然这个形容词,仔细体会一下你能理解我的意思。另外,很多时候,URL本身就不需要友好,比如,一个电子商务网站,按照INT友好的URL说法,她的订单URL大概是下面这个形式的:/order.php/id/123,我要说明的是,这样是很友好,但是有些太友好了,友好的甚至不安全,比如说,我早晨下一个订单,发现URL是/order.php/id/1000,晚上再下一个订单发现URL是/order.php/id/2000,那么我就可以估计出此网站一天的订单数大致是1000左右,甚至能大体估计出它的销售额,而这些数据往往都是重要的商业秘密。使用UUID就没有这个顾虑。

效率?

如果上面说的UUID的所谓缺点都不成立的话,那么是否使用UUID做主键,唯一的问题就是效率了。据说在PostgreSQL等数据库里,都有专门的UUID类型,在这样的数据库里,使用UUID做主键,效率没有任何问题,可惜在MySQL里没有这样的字段,如果想在MySQL里保存UUID做主键,一般是使用CHAR(36)来模拟,因为不是一个原生的UUID类型,所以主键的效率到底如何有待测试,另外,UUID做主键的效率和UUID本身的算法实现也有很大关系。

我本来想在我自己的电脑上插入1000000条数据测试一下看看来着,可惜一测试,硬盘灯就一直亮,让我很担心它会挂,虽然硬盘不值钱,但是我重要的数据都在上面,一旦坏了,损失就大了,所以,测试只好作罢。

至于在MySQL上使用UUID(用char(36)存储)做主键,效率到底如何,我也不知道,抱歉 -_-!!!

参考链接 (

)(

)(

)(

)(

)

mysql数据库uuid()_数据库_MySQL_uuid()相关推荐

  1. MySQL数据库变量_数据库参数_MySQL变量_系统变量_用户变量

    文章目录 MySQL 变量分类 系统变量 查看系统变量 设置系统变量 如何通过配置文件来设置变量值 通过命令行选项来设置变量值 动态设置全局级的系统变量 设置静态的系统变量 设置会话级的系统变量 引用 ...

  2. mysql账目表_数据库1(数据库、表及表数据、SQL语句)

    01数据库概念 A: 什么是数据库 数据库就是存储数据的仓库,其本质是一个文件系统,数据按照特定的格式将数据存储起来, 用户可以对数据库中的数据进行增加,修改,删除及查询操作. B: 什么是数据库管理 ...

  3. mysql数据库算法_数据库:MySQL索引背后的数据结构及算法原理【转】

    原文:http://blog.codinglabs.org/articles/theory-of-mysql-index.html 摘要 本文以MySQL数据库为研究对象,讨论与数据库索引相关的一些话 ...

  4. mysql sqlite转换_数据库转换工具(SqliteToMysql)

    SqliteToMysql是一款用于SQLITE和MYSQL之间的数据库转换工具.它能够将SQLITE数据转换成MYSQL数据库,让用户自主配置转换条件,满足用户的数据库格式需要.. 相关软件软件大小 ...

  5. mysql 时间 设计模式_数据库时间设计模式

    {"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],&q ...

  6. mysql变红_数据库变成红色紧急

    {"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],&q ...

  7. java mysql数据库回退_数据库事务及Java中的处理

    事 务是指一组相互依赖的操作行为,举一个举得不能再被举的例子就是银行交易,当然还有其他像网上购物,电子货币交易等等,事务的成功取决于这些相互依赖的操 作行为是否都能执行成功,只要有一个操作行为失败,就 ...

  8. mysql设计包括_数据库设计一般分为哪几个阶段

    数据库设计一般分为需求分析.结构设计.数据库实施.数据库运行和维护四个阶段.结构设计包括概念设计.逻辑设计和物理设计.数据库实施的主要任务和目标是,在实际的计算机系统中建立数据库应用系统. 数据库设计 ...

  9. mysql数据转换英文_数据库转换工具下载_SqliteToMysql英文版2.5 - 系统城

    SqliteToMysql是一款专门用来完成数据库数据转换的软件,通过该软件,我们可以将Sqlite数据库和Mysql数据库数据的互相转换,这样你就可以将一些重要的数据快速完成转换和备份,有需要的小伙 ...

最新文章

  1. 使用OpenCV和Imutils构建图像的蒙太奇效果
  2. 微酒店微信界面返回信息有html源码
  3. 反编译华为U8825D“framework-res.apk”出现的错误提示(1)
  4. mysql gbk支持_让MYSQL支持GBK
  5. jQuery框架风云榜案例
  6. 用Python找出数组中出现次数超过一半的数
  7. 【二】Drupal 入门之新建主题
  8. 所选元素非联通_非固化橡胶沥青防水涂料与耐根穿刺防水卷材(沥青基)施工要点...
  9. 用户遭骚扰质疑隐私被航旅纵横泄露 回应:用户有开启关闭的自主权
  10. mysql客户端重庆_MySQL:MySQL工具以及5.7mysqlbinlog|mysql速度极慢问题
  11. 《Spring 揭秘》读书笔记
  12. liunx命令大全建议粘贴到word文档可方便查询
  13. Automatic Detection of Welding Defects Using Faster R-CNN
  14. 导致计算机重启的原因,电脑自动重启的原因分析
  15. 计算机网络技术不会拼音,我爸不会拼音,怎样在电脑上学打字阿?
  16. conda关于频道和存储包pkgs的详解(副pytorch环境安装)
  17. python简单代码画皮卡丘-用python画一只可爱的皮卡丘
  18. java节假日算法_java处理节假日和工作时间的工具类
  19. AI强度相关的研究:MCTS 蒙特卡洛树搜索 Monte Carlo Tree Search
  20. Python Signal 信号

热门文章

  1. linux如何判断是文件还是目录
  2. xp、2003开3389+非net创建管理用户+Shift后门+自删除脚本+提权VBS 整理收集
  3. idevice demo
  4. 【JAVA学习】如何创建数组?
  5. Java进阶篇设计模式之十一 ---- 策略模式和模板方法模式
  6. 比悲伤更悲伤的故事——前面笑的有多开心,后面哭的就有多惨!!
  7. 2023腾讯云轻量应用服务器性能评测
  8. Linux lrzsz 详解
  9. .net开发安卓入门 - Activity
  10. word,ppt,excel转换为html