【问题标题】:How to overcome duplicate ID while making transactions?如何在进行交易时克服重复 ID?
【发布时间】:2018-01-01 12:51:35
【问题描述】:

我有一个实时 Web 应用程序 (.NET),其中我有一个进行交易的工具。当更多没有。的用户同时进行任何交易,为所有进行交易的用户生成重复/相同的交易 ID。有什么方法可以避免创建相同的 ID 吗?我尝试了以下解决方案,但没有任何帮助。

1.Mutex
2.Table lock(SQL)
3.Generating Transaction ID at the time of inserting into the table.

【问题讨论】:

  • 我们如何在没有看到您正在做什么来生成事务 ID 的情况下回答?现在,您的问题的答案是:是的,有一种方法可以避免创建相同的 ID。
  • 您使用的是什么数据库?您需要使用为 SQL Server 等多用户设计的数据库。为防止 SQL Server 中出现重复 ID,您需要一个分配唯一 ID 的存储过程。如果您有一组服务器,则每个服务器都必须分配 ID,以免重复。
  • 是的,我只使用 SQL。但我想手动生成 ID(MAX + 1)而不是自动生成,因为我正在向它附加一些字符。
  • 这是你能做到的最糟糕的方式。 “SQL”并不意味着 Microsoft SQL Server,但我假设这就是您的意思。您可能想要创建和使用序列。 docs.microsoft.com/en-us/sql/t-sql/statements/…

标签: c# asp.net vb.net


【解决方案1】:

使用数据库生成 ID。一些可能的例子:

SQL Server 具有自动增量功能。 oracle有一个序列特性

这将确保您的 ID 是唯一的。

你提到了 SQL,所以你有一个可访问的数据库。

【讨论】:

  • 是的,我只使用 SQL。但我想手动生成 ID(MAX + 1)而不是自动生成,因为我在其中附加了一些字符。
  • 创建第二列...在插入后创建触发器以将新创建​​的 ok 信息附加到其他数据
  • Max 是个坏主意...你会遇到问题...找到使用自动增量的方法
【解决方案2】:

选项 1

SQL Server 已经具有自动增量功能,既保证生成唯一 ID,又高效。

如果您想“向该 ID 添加字母”,最简单的解决方案是添加一个包含这些字母的单独 varchar 字段,然后将它们格式化为在您的应用程序中显示为单个数字(通过使用这样做的 SQL 查询或string.Format

ID   | IDText                                Application Display
------------------                     -----------------------
1    | MyLabel                               1-MyLabel
2    | MyLabel                               2-MyLabel
3    | FooBar                                3-FooBar
4    | SomeText                              4-SomeText

因此,在上面,ID 将是一个自动递增的 int 字段,IDText 将是一个 varchar(或 char,如果您想要一个固定长度)。

如您所见,即使同时添加了相同的字符串(例如 "MyLabel"),您也会得到一个不同的 ID 附加到它上面,因此您实际上拥有一个唯一的 ID。

选项 2

使用存储过程在BEGIN TRANSACTION/END TRANSACTION 的单个事务中包含以下逻辑:

  1. 查询最高 ID
  2. 将该 ID 加 1
  3. 使用新 ID 创建新记录
  4. 返回该 ID

交易将保证号码不能重复。这在创建 ID 时效率较低,但在查找 ID 时比 2 列方法更有效。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2018-08-09
  • 1970-01-01
  • 2012-05-08
  • 1970-01-01
  • 1970-01-01
  • 2022-10-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多