主库在远程服务器上的mysql,主键id是自增的,同时有记录中的其它字段(如parent)需要以这个ID关联。
现在,要做一个桌面版的,方便离线的时候使用,所以,没法直接操作主库上的数据,使用本地sqlite的数据库,就要在主从库间同步这个数据。如果从库也自增就会与主库ID冲突。
方案一:主从库都使用时间戳作ID,并且到毫秒级,其假设是用户不会在同一时间点同时在web端和桌面端操作。
javascript
const timestampId = Math.floor(Date.now() / 1000);
因为要到毫秒级,mysql的主键字段要使用
sqlit要使用。
方案二:
在表中除主键字段外,增加一个从键字段,在桌面端数据新增时,按桌面端的规则生成主键ID,并在外键上使用的这个ID,而从键也备份主键的值。
同步到主库时,
(1)使用INSERT语句插入,包括从键,但不包括主键,让主库自增ID,
(2)然后作一个UPDATE操作,以从键的值作关联查询,把外键中值替换为主库的ID,实现了ID替换。
(3)把这些更新的主键ID值再更新回从库
同步到从库时,则是连主键一起INSERT到从库中。
具体是否可行,还待进一步测试