我想在表中插入一条记录,并检索被设置为自动递增的插入记录的id。但是,在插入和检索操作之间,有可能有另一个用户通过向表中插入另一个数据进行干预。这意味着,我可能检索到错误的记录id。如何在mysql中避免此问题?谢谢您。我使用的查询是 SELECT CustomerID FROM Customers order by CustomerID desc limit 1;
SELECT CustomerID FROM Customers order by CustomerID desc limit 1;
flseospp1#
可以按如下方式获取插入行的自动增量值:
INSERT INTO Customers (column1,column2,...) VALUES('value1','value2',...); SELECT LAST_INSERT_ID();
gzszwxb42#
将新列添加到 Customers 表并命名 ConnectionID 或者 SessionID . 在插入新记录时,请确保为 ConnectionID 它应该引用一个唯一的值,每当有人尝试插入新记录(customer)时,该值都会发生更改。当你选择的时候,用这个 ConnectionID 现在生成并保存在上一个查询中的,请在 WHERE 子句以确保只获取插入的最后一条记录,并避免其他用户同时插入任何其他记录。这个 Customers table应该是这样的:
Customers
ConnectionID
SessionID
WHERE
+------------+----------+----------+-----+----------------+ | CustomerID | column1 | column2 | ... | ConnectionID | +------------+----------+----------+-----+----------------+ | 1 | value1-1 | value2-1 | ... | anothervalue | +------------+----------+----------+-----+----------------+ | 2 | value1-2 | value2-2 | ... | UniqueValue | +------------+----------+----------+-----+----------------+ | 3 | value1-3 | value2-3 | ... | UniqueValue | +------------+----------+----------+-----+----------------+ | 4 | value1-4 | value2-4 | ... | someothervalue | +------------+----------+----------+-----+----------------+
所以 INSERT 声明如下:
INSERT
INSERT INTO Customers (column1, column2, ..., ConnID) VALUES('value1-3', 'value2-3', ..., 'UniqueValue');
以及 SELECT 您插入的最后一个自动增量id是:
SELECT
SELECT CustomerID FROM Customers WHERE ConnID = 'UniqueValue' ORDER BY CustomerID desc limit 1;
2条答案
按热度按时间flseospp1#
可以按如下方式获取插入行的自动增量值:
gzszwxb42#
将新列添加到
Customers
表并命名ConnectionID
或者SessionID
. 在插入新记录时,请确保为ConnectionID
它应该引用一个唯一的值,每当有人尝试插入新记录(customer)时,该值都会发生更改。当你选择的时候,用这个ConnectionID
现在生成并保存在上一个查询中的,请在WHERE
子句以确保只获取插入的最后一条记录,并避免其他用户同时插入任何其他记录。这个
Customers
table应该是这样的:所以
INSERT
声明如下:以及
SELECT
您插入的最后一个自动增量id是: