Mysql 用UUID做主键可行么
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Mysql 用UUID做主键可行么相关的知识,希望对你有一定的参考价值。
在mysql中可以把UUID作为逻辑主键,物理主键依然使用自增ID1、UUID定义
UUID含义是通用唯一识别码 (Universally Unique Identifier),这 是一个软件建构的标准,也是被开源软件基金会 (Open Software Foundation, OSF) 的组织应用在分布式计算环境 (Distributed Computing Environment, DCE) 领域的一部分。UUID是指在一台机器上生成的数字,它保证对在同一时空中的所有机器都是唯一的。
2、UUID优点
1) 能够保证独立性,程序可以在不同的数据库间迁移,效果不受影响。
2) 保证生成的ID不仅是表独立的,而且是库独立的,这点在你想切分数据库的时候尤为重要。
3) 在oracle做数据迁移的时候不会因为表的sequence不连续而出现问题
3、UUID缺点
1) 比较占地方,和INT类型相比,存储一个UUID要花费更多的空间。
2) 使用UUID后,URL显得冗长,不够友好。 参考技术A 当然可以使用uuid做主键,前提是 主键字段的长度要够 uuid的长度,你可以选择后台生成主键,也可以mysql 使用函数uuid()生成主键.本回答被提问者采纳
Mysql:企业中的SQL规范
- 创建表必须要有主键。单体数据库可以使用bigint自增id,也可以使用递增uuid做主键。水平拆分的数据库必须使用全局发号器生成的uuid做主键。
- MySQL一律采用InnoDB存储引擎,utf8mb4字符集。
- 表和表中的字段,必须添加必要的注释。
- 在创建核心表时,必须添加行数据的最后更新时间字段lastupdate_time,便于后期维护查找问题,该字段由数据库自动填充,程序不允许修改。
- 数据库内禁止存放图片以及文件等大字段。
- 禁止使用外键,业务的逻辑关系,应在应用程序端处理。
- 严禁使用MySQL关键字作为字段名称,参考https://dev.mysql.com/doc/refman/5.7/en/keywords.html、
https://dev.mysql.com/doc/refman/8.0/en/keywords.html - 所有字段均定义为NOTNULL并有DEFAULT值,如果必须为NULL需要特殊说明
- 一般索引命名规则为:idx_列名,联合索引列名太长可使用列名索引或使用数字编号;唯一索引命名规则 为:uk_列名。
- 禁止创建重复索引
- 联表查询时,JOIN列的数据类型必须相同,必须建立索引
- 所有的DDL语句中,严禁添加AFTER关键字
- 同一张表的DDL语句必须合并成一条
- DDL不允许回滚
- 禁止隐式转换。字符串类型必须加单引号
- 避免在MySQL数据库中进行数学运算和函数运算
- INSERT语句必须指定字段列表,禁止使用INSERT INTO
TABLE(…) - 禁止单条SQL语句同时update多个表
- 禁止使用存储过程、触发器、视图、自定义函数等
- 禁止使用“%”前导查询,例如:like“%abc”,无法利用到素引,看实际应用场景考虑综合考虑,例如利用es等其他中间件进行解决列表多处需要模糊匹配,按条件查询的
- 避免大事务,一次修改不要超过2000条数据
- 避免长事务。
- 禁止修改字段类型,禁止修改已上线表字段名。
- 禁止在表中明文存储密码,请把密码加密后存储。
- 数据库事务应保证幕等,避免重复操作导致数据重复更新
- insert into…values(XX),(XX),(XX).这里XX的值禁止超过1000个,过多的值易引起主从同步延迟或失败回滚时间较长等问题
- 使用datetime而不是timestamp,后者会根据mysql设定的时区自动转换
以上是关于Mysql 用UUID做主键可行么的主要内容,如果未能解决你的问题,请参考以下文章
数据库主键为什么要用递增的序列?UUID为什么不适合做主键?
MySQL 使用自增ID主键和UUID 作为主键的优劣比较详细过程(从百万到千万表记录测试)