本节就演示上节提到的主键6种生成方式
(一)主键值生成方式
①介绍
在实现分库分表的情况下,原来是一张表就分到多个库上面和多个表上面,各个表都有自增,无法保证数据库自增主键自增主键的全局唯一。为此,MyCat提供了全局sequence,并且提供了包含本地配置和数据库配置等多种实现方式。
CREATETABLEt_customer(
idBIGINTPRIMARYKEY,
namevarchar()notnull,
provinceintnotnull
);
tablename="t_customer"primaryKey="id"autoIncrement="true"dataNode="dn1,dn2,dn3"rule="sharding-by-province"/
②本地文件方式
原理:此方式MyCAT将sequence配置到文件中,当使用到sequence中的配置后,MyCAT会更新conf中的sequence_conf.properties文件中sequence当前的值。
配置方式:
1.在sequence_conf.properties文件中做如下配置
HISIDS历史ID
MIXID最小ID
MAXID最大ID
CURID当前ID
GLOBAL.HISIDS=
GLOBAL.MINID=1GLOBAL.MAXID=0000000GLOBAL.CURID=0
其中HISIDS表示使用过的历史分段(一般无特殊需要可不配置),MINID表示最小ID值,MAXID表示最大ID值,CURID表示当前ID值。
2.server.xml中配置
注:sequnceHandlerType需要配置为0,表示使用本地文件方式。
systempropertyname="sequnceHandlerType"0/property/system
使用示例:
缺点:当MyCAT重新发布后,配置文件中的sequence会恢复到初始值。优点:本地加载,读取速度较快。为表配置主键自增值的序列。如果需要重启,需要先将这个文件进行拷贝出来,修改后,在拷贝到这个位置。
insertintotable1(id,name)values(nextvalueforMYCATSEQ_GLOBAL,‘test’);
为表配置主键自增值的序列:
规则:在sequence_conf.properties中配置以表名为名的序列。
T_COMPANY.CURID=
T_COMPANY.MINID=1
T_COMPANY.MAXID=0000000
就可以使用了。
tablename="t_