基于商店的多店订单表和顺序订单号

时间:2010-05-01 08:26:45

标签: mysql numbers sequential-number

我正在寻找建立需要可扩展的商店解决方案。目前,它在多个国家/地区的商店(例如英国,我们,德,dk,es等)平均每天检索1-2000个订单,但这个订单在两年内可能是这个数量的10倍。

我正在寻找使用单独的国家/地区商店数据库来存储订单表,或者希望将所有数据库组合成一个订单表。

如果所有订单都存在于具有全局ID(自动编号)和国家/地区ID(例如,uk,de,dk等)的一个表中,则每个国家/地区的订单也需要按顺序排序。因此,实质上,我们必须拥有全球ID和国家/地区订单ID,国家/地区订单ID仅适用于国家/地区,例如

全球ID = 1000,国家=英国,国家/地区订单ID = 1000
全球ID = 1001,国家= DE,国家/地区订单ID = 1000
全球ID = 1002,国家= DE,国家订单ID = 1001
全球ID = 1003,国家= DE,国家/地区订单ID = 1002
global ID = 1004,country = UK,country order ID = 1001

全局ID将由DB生成,而不是我需要担心的事情。但我想我必须进行查询才能获得当前基于国家/地区订单的ID + 1来查找下一个序列号。关于这一点我有两件事:1)表可能有数百万行数据并且我在写入之前进行读取的查询时间,2)由于同时写入/读取而导致ID号冲突的可能性。

使用MyISAM表可以锁定整个表,同时检索最后一个国家/地区订单+ 1,以防止ID号冲突。

我想知道是否有人知道更优雅的解决方案?

干杯, imanc

1 个答案:

答案 0 :(得分:0)

有一种方法可以做到这一点。

INSERT INTO test123 (`Country`, `Country order code`)
SELECT 'UK', MAX(`Country order code`) + 1
FROM test123
WHERE `Country` = 'UK'

这为英国订购了新订单,它选择了最高订单代码并添加了一个。 这已经过测试,所有需要更改的都是表格和字段的名称