我有一个表,其中包含一个标识一组值的数字。每次将值数组加载到数据库中时,此数字都会递增,因此对于在给定时间插入的每个值,此数字将重复。
如何获取此数字并添加1以便我可以使用表单通过PHP输入新值?
如果有更好的方法,我会很高兴知道。
由于
答案 0 :(得分:1)
按递增列降序排列表格,并将结果限制为仅第一行。这将是最高价值。
SELECT incrementing_column
FROM table
ORDER BY incrementing_column DESC
LIMIT 1
答案 1 :(得分: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对象。
还有其他方法,但有些方法从根本上被打破(因为它们可能会返回重复值),有些方法会对并发产生负面影响(因为它们锁定表以防止并发检索和/或更新。)
答案 2 :(得分:-2)
您可能需要查看MySQL的自动增量功能。
http://www.w3schools.com/sql/sql_autoincrement.asp
这将允许您识别单个ID字段,每次输入新记录时都会自动递增,而不必指定值。