社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  DATABASE

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

Fatnam • 4 年前 • 466 次点击  

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

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

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

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

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

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/43005
 
466 次点击  
文章 [ 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    11 年前

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值,并使用它在第二个表中插入