1

我有一个表,其中有一个标识一组值的数字。每次将一组值加载到数据库中时,此数字都会增加,因此对于在给定时间插入的每个值,此数字将重复。

如何获取这个数字并加 1,以便我可以使用表单通过 PHP 输入新值?

如果有更好的方法可以做到这一点,我将不胜感激。

谢谢

4

3 回答 3

1

按递增列对表进行降序排序,并将结果限制为仅第一行。这将是最高值。

SELECT incrementing_column 
FROM table 
ORDER BY incrementing_column DESC 
LIMIT 1
于 2012-07-25T20:44:39.040 回答
1

您需要考虑并发问题。例如,当您有两个用户各自向表中添加一个“新”数字数组时,您可能不希望他们使用相同的序列号。因此,您需要进行某种“原子”操作,以防止它们都返回相同的序列号。

(我将在这里假设整数值对于“序列”数字是可以接受的,在您的问题中没有任何迹象表明它不是。)

一种方法是定义一个表,其中只有一个列,其中包含此“序列”编号,定义为 AUTO_INCREMENT,如下所示:

CREATE TABLE seq (id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY);

然后,要获得一个“新”的 id 号,您只需在表中执行 INSERT,并检索自动生成的 id 值。您的 SQL 语句可能如下所示:

INSERT INTO seq (id) VALUES (NULL);
SELECT LAST_INSERT_ID() AS id;

还有其他(更简单的)方法可以检索 LAST_INSERT_ID 的值,但具体方法取决于您使用的是 mysqli (mysqli_insert_id) 还是 PDO (lastInsertId)。

这种方法大约是我(在 MySQL 中)获得的最接近 Oracle 风格的 SEQUENCE 对象的方法。

还有其他方法,但有些从根本上被破坏(因为它们可能会返回重复值),有些对并发性有负面影响(因为它们锁定表以防止并发检索和/或更新。)

于 2012-07-25T20:57:05.483 回答
-2

您可能想研究 MySQL 的自动增量功能。

http://www.w3schools.com/sql/sql_autoincrement.asp

这将允许您识别单个 ID 字段,该字段将在每次输入新记录时自动递增,而无需指定值。

于 2012-07-25T20:44:33.033 回答