Py学习  »  DATABASE

Java MySQL创建用户定义的变量连接专用?[复制品]

Fatnam • 4 年前 • 455 次点击  

我在用 AUTO_INCREMENT 我想获取插入行的id,以便使用 ID 作为两个表之间的公共字段。

我明白了 LAST_INSERT_ID 最后一个 身份证件 . 但是,我担心的是,许多用户同时访问数据库。因此,可能有另一个进程访问了表,同时插入了一个新行。

上次插入的ID 不管使用的连接是什么,只返回最后一个id,还是只返回我正在使用的连接的最后一个id?

注意,我正在使用tomcat服务器中的连接池访问mysql数据库。

编辑:在汇总表中,我需要在表A中插入一行并自动递增,而不是在表B中插入一行,后者需要使用自动递增值链接到表A。

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/43005
 
455 次点击  
文章 [ 4 ]  |  最新文章 4 年前
Community Jeromy Anglim
Reply   •   1 楼
Community Jeromy Anglim    7 年前

LAST_INSERT_ID 返回当前会话的最后一个插入id。 只要不在当前连接中插入多个条目,它就有效。

更多信息请参见: https://dba.stackexchange.com/questions/21181/is-mysqls-last-insert-id-function-guaranteed-to-be-correct

(我会链接到mysql.com,但它目前已关闭)

cheesemacfly Mauro
Reply   •   2 楼
cheesemacfly Mauro    10 年前

LAST_INSERT_ID 是特定于连接的。这是真的,但是如果使用连接池,您应该小心。当您连续执行 INSERT IGNORE 循环和池中的语句在每次迭代时都提供相同的连接。

例如,假设您接收到以下每一项的相同(打开)连接:

INSERT IGNORE ... some-new-id & gt;& gt; 上次插入的ID 收益率 100

INSERT IGNORE ... some-existing-id & gt;& gt; 上次插入的ID 仍然返回 一百 (上一次操作的结果)

最好检查一下 INSERT 实际上,操作在调用 上次插入的ID .

Raab
Reply   •   3 楼
Raab    11 年前

LAST_INSERT_ID() 在工作 语境 ,它应该在事务中或在用户定义的存储过程或用户定义的函数中。

user2001117
Reply   •   4 楼
user2001117    11 年前
SELECT max(employeeid) FROM Employee;

由于employeeid是一个自动递增列,所以上述查询返回employee表中最后插入记录的employeeid值。这似乎是可以的,但假设两个线程同时执行插入操作,则有可能得到错误的上次插入记录的id!不用担心,mysql提供了一个函数,返回上次插入记录的auto increment列的值。

SELECT LAST_INSERT_ID();

last_insert_id()始终是特定于连接的,这意味着即使从不同的连接同时执行insert操作,它也始终返回当前特定于连接的操作的值。因此,您必须首先在employee表中插入记录,运行上面的查询以获取id值,并使用它在第二个表中插入