我使用c#和mysql进行项目创建POS程序,该程序可以在PC离线时使用,如果PC在线它将连接到远程数据库服务器。
但是我发现我的订单ID在很多电脑上使用都是这样的问题。
PC1 : 100001 100002 ...
PC2 : 110001 110002 ...
因此,我决定让我的主订单 ID 不自动递增。 问题是我能做到吗? 它看起来像这样
order_ID
100001
120001
100002
110001
110002
100003
如果是这样的,我可以用它来搜索功能吗?或(索引它)
因为它不会相同的号码,我有 2digits 号码用于 PC 客户端。
100001
10 is prefix for PC and 0001 is order number
我在数据库服务器上的完整表将是这样的
id(not use auto increment but Primary key)
100001
130001
100002
在我的离线电脑上会是这样的
10 is PC1
id prefix number(this will use auto increment and Primary key)
100001 10 0001
100002 10 0002
13 is PC2
id prefix number(this will use auto increment and Primary key)
130001 13 0001
所以当我想搜索订单时,我会“从 id=130001 的订单表中选择”
是吗? 如果是的话,性能是否较低?
谢谢。
最佳答案
您的解决方案很好,但它限制每台 PC 最多 9999 条记录。您的主键不必是自动递增整数。主键的唯一要求是它是唯一的。
但是,假设 InnoDB,如果有大量插入,您仍然可以考虑使用一个代理自动递增整数作为主键,并简单地添加一个带有唯一索引的附加列“ID”。对于 InnoDB,主键是一个聚集索引。按升序插入聚集索引会更快(并且会导致更少的并发问题)。
关于Mysql主ID没有自动递增?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28961495/