不间断查询

时间:2018-04-18 07:46:17

标签: mysql database concurrency

我想在表中插入记录并检索插入记录的ID,该ID设置为auto_increment。但是,有可能在插入和检索操作之间,另一个用户通过向表中插入另一个数据来进行干预。这意味着,我可能会检索错误的记录ID。如何在MySQL中避免这个问题?谢谢。

我使用的查询是SELECT CustomerID FROM Customers order by CustomerID desc limit 1;

2 个答案:

答案 0 :(得分:1)

您可以获得插入行的自动增量值,如下所示:

INSERT INTO Customers (column1,column2,...) VALUES('value1','value2',...);
SELECT LAST_INSERT_ID();

答案 1 :(得分:1)

Customers表格中添加新列,并将其命名为ConnectionIDSessionID。插入新记录时,请确保包含ConnectionID的唯一值,该值应引用每次有人尝试插入新记录(客户)时更改的唯一值。选择时,使用您现在生成的ConnectionID并将其保存在上一个查询中,在WHERE子句中使用它以确保只获取插入的最后一条记录并避免插入任何其他记录与其他用户同时使用。

Customers表将是这样的:

+------------+----------+----------+-----+----------------+
| 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 INTO Customers (column1, column2, ..., ConnID) VALUES('value1-3', 'value2-3', ..., 'UniqueValue');

SELECT您插入的最后一个自动增量ID的查询将是:

SELECT CustomerID FROM Customers WHERE ConnID = 'UniqueValue' ORDER BY CustomerID desc limit 1;