我有一个服务器端应用程序,需要在其中将新的和更新的项目同步到移动设备。要求是存储一个“密钥”,该密钥可以在服务器和设备之间传递,以标记我们在同步过程中的位置。我们有一个毫秒级的时间戳字段,除了当我们允许客户上载csv文件时,插入过程会将所有这些插入分组并带有相同的时间戳,因为now()在开始时设置了一个变量,交易并在整个交易中使用它。
我能想到的唯一可能性是进行某种数字散列或CRC,在其中我将时间戳和pk(在本例中为1045)加在一起,就像CRC32(now()+ 1045)一样,但是随着时间的推移不会产生顺序模式...
我正在考虑的另一个选项是修改批处理上传过程,以在构建插入内容时向每个项目添加一个递增的毫秒值:
insert into items (description,datemodified) VALUES
('toaster',(now(3)+.001)),
('blender', (now(3)+.002),
('coffee maker', (now(3)+.003));
然后,我将获得一个唯一且足够的序列ID,可以来回传递该ID以跟踪同步状态。
运行MySQL 5.7.11,所有表都是InnoDB。
有人解决了这个更好的方法吗?
最佳答案
我认为带有AUTO_INCREMENT
的整数列可能适合您的用例。
CREATE TABLE foo
( id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT
, description VARCHAR(80)
, datemodified DATETIME
, ...
, CONSTRAINT foo_UX1 UNIQUE KEY (id)
)
;
INSERT INTO foo (id, description, datemodified)
VALUES
(NULL,'toaster',NOW())
,(NULL,'blender',NOW())
,(NULL,'coffee maker',NOW())
;
关于mysql - 包含PK和日期戳的Mysql递增字段,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41072383/