【发布时间】:2010-12-05 13:12:25
【问题描述】:
假设我在客户表中有以下数据:(仅此而已)
ID FirstName LastName
-------------------------------
20 John Mackenzie
21 Ted Green
22 Marcy Nate
什么样的SELECT 语句可以让我得到ID 列中的数字22?
我需要做这样的事情来生成一个唯一的 ID。当然我可以让系统通过自动增量来执行此操作,但是我将如何获取自动生成的 ID?
我想到了SELECT ID FROM Customers 并计算返回的行数,但这似乎非常低效,在这种情况下,它会错误地返回“3”,尽管我需要一个唯一的 ID 23。
【问题讨论】:
-
好点,但他们的回答并没有直接回答我的问题。无论如何,我的方法是最安全的,因为我得到了一个免费的 ID,然后添加了一条记录。当然,您可以说并发操作可能会因为多个程序获得相同的“免费”ID 并重用它而搞砸……但这可以通过在获得免费 ID 后快速添加记录来防止。
-
msaeed 和其他一些人完全正确地回答了您的问题。问题是“SQL - 如何找到列中的最高数字?”和“什么样的 SELECT 语句可以让我在 ID 列中获得数字 22?”。更正您的帖子,让您的意图更加明确。
-
不。我什至没有在谈论那些答案,只有 rexem 指出的那些。其他答案谈到插入 THEN 获取 ID,这显然不是我要求的。我要求的是 22(最大数量),而不是 23(最近填充的 ID)。
-
@Jeremy:不,正如 Brisbe42 解释的那样,您的方法是不安全的,因为可以将数据库隔离级别设置为允许在 INSERT/UPDATE 提交之前读取数据。如果您在尝试插入非唯一主键时遇到错误,希望您记住这个问题。
-
@Jeremy,依赖你的“超级快速”方法是不明智的。程序本质上应该是确定性的,否则它们可能是不正确的。您所做的就是将 A 从您的 ACID 原则中丢弃。如果您正在运行单用户数据库应用程序,那很好。 其他所有情况都应该使用原子操作。
标签: sql mysql sql-server