mysql中的主键分为哪几种
mysql中的主键分为:1、自增序列;2、UUID函数生成的随机值;3、会员注册的独一性账号名称;4、基于一套机制生成相似自增的值,如序列生成器。
(针对InnoDB引擎)我们实际生产环境大概会使用四类属性作为主键:
(1). 自增序列;
(2). UUID()函数生成的随机值;
(3). 会员注册的独一性帐号名称,字符串类型,一样长度为:40个字符;
(4). 基于一套机制生成相似自增的值,比方序列生成器;
那么我们接下来,再剖析下这四类属性各自作为表主键的优缺陷:
(1)自增序列:从小到大 或从大到小的次序模式增添新值;数据类型也利于停止主键值比力;储备空间占用也相对最小,一样设定为:4个字节的INT类型或 8个字节的BIGINT类型;若是想停止数据水平拆分的话,也可以借助设定mysqld实例的2个参数:auto_increment_increment 和 auto_increment_offset;别的,独一缺陷就是自增序列是一个表级别的全局锁,在5.0系列大规模并发写的时候,因锁开释机制的问题容易显现瓶颈,但是5.1系列做了改善,根本上不存在此问题;
(2)UUID()函数:值为随机性+牢固部分,其值发生是无序的,且统一台效劳器上发生的值雷同部分为77.8%;发生的值字符个数为36,按utf8编码运算,占用的储备空间为36个字节;关于数据水平拆分支撑,无需非凡设定;
(3)使用会员注册的帐号名称,字符串类型,其值的发生依靠会员输入,为此数据根本上为无序增添,字符串的长度也是不定的,只能通过前段技术操纵最短最大长度值的限制,对水平拆分支撑,无需做非凡设定;
(4)序列生成器的架构,相似自增序列,不外需要借助额外的开发工作量,乃至供给一个第三方的效劳,可以躲避自增序列的字增全局锁的问题,提高并发,对数据水平拆分可以更好地支撑;
(5)双主复制架构的概率性碰到的场景:主效劳器的数据施行成功,而没有复制到在线备用效劳器时,出问题的概率确实存在,其他类型的做法,也必需人工干预解决,都无简便且合理的主动化方法,以上四种方法都没法躲避;
通过四种属性值作为主键的优缺陷剖析,乃至对照前面我们论述的主键需要的优异素养,若是不思考水平拆分的问题,带来额外设定上的费事,则自增序列是最好的主键字段选中;会员的注册帐号本身要求独一性且非空的场景下,则可以作为主键字段的选中;若是思考水平拆分的问题,则采纳自增序列生成器的架构,非常易用和可靠的实现方式,发生的值是最好主键字段的选中;
以上就是mysql中的主键分为哪几种的具体内容,更多请关注百分百源码网其它相关文章!